Skip to content

Commit 50873ff

Browse files
committed
gle: Add (untested) DMD support.
1 parent f9ccfd3 commit 50873ff

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

VisualPinball.Engine.Mpf.Unity/Runtime/MpfGamelogicEngine.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
3636
public event EventHandler<LampEventArgs> OnLampChanged;
3737
public event EventHandler<LampsEventArgs> OnLampsChanged;
3838
public event EventHandler<LampColorEventArgs> OnLampColorChanged;
39-
4039
public event EventHandler<CoilEventArgs> OnCoilChanged;
40+
public event EventHandler<AvailableDisplays> OnDisplaysAvailable;
41+
public event EventHandler<DisplayFrameData> OnDisplayFrame;
4142

4243
[NonSerialized]
4344
private MpfApi _api;
@@ -54,6 +55,8 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
5455
private Dictionary<string, string> _coilNames = new Dictionary<string, string>();
5556
private Dictionary<string, string> _lampNames = new Dictionary<string, string>();
5657

58+
private bool _displaysAnnounced;
59+
5760
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
5861

5962
public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
@@ -85,6 +88,7 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
8588
_api.Client.OnConfigureHardwareRule += OnConfigureHardwareRule;
8689
_api.Client.OnRemoveHardwareRule += OnRemoveHardwareRule;
8790
_api.Client.OnFadeLight += OnFadeLight;
91+
_api.Client.OnDmdFrame += OnDmdFrame;
8892

8993
// map initial switches
9094
var mappedSwitchStatuses = new Dictionary<string, bool>();
@@ -197,6 +201,19 @@ private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
197201
Logger.Info($"<-- remove hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
198202
}
199203

204+
private void OnDmdFrame(object sender, SetDmdFrameRequest frame)
205+
{
206+
if (!_displaysAnnounced) {
207+
_displaysAnnounced = true;
208+
var config = _api.GetMachineDescription();
209+
foreach (var dmd in config.Dmds) {
210+
OnDisplaysAvailable?.Invoke(this, new AvailableDisplays(
211+
new DisplayConfig(dmd.Name, DisplayType.Dmd2PinMame, dmd.Width, dmd.Height)));
212+
}
213+
}
214+
OnDisplayFrame?.Invoke(this, new DisplayFrameData(frame.Name, frame.FrameData()));
215+
}
216+
200217
private void OnDestroy()
201218
{
202219
if (_api != null) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Mpf.Vpe;
2+
3+
namespace VisualPinball.Engine.Mpf
4+
{
5+
public static class MpfExtensions
6+
{
7+
public static byte[] FrameData(this SetDmdFrameRequest req)
8+
{
9+
return req.Frame.ToByteArray();
10+
}
11+
}
12+
}

VisualPinball.Engine.Mpf/MpfSpawner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private static string GetFullPath(string fileName)
114114
/// </summary>
115115
public class MpfConsoleOptions
116116
{
117-
public bool UseMediaController;
117+
public bool UseMediaController = true;
118118
public bool ShowLogInsteadOfConsole;
119119
public bool VerboseLogging = true;
120120
public bool CatchStdOut;

0 commit comments

Comments
 (0)