@@ -36,8 +36,9 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
36
36
public event EventHandler < LampEventArgs > OnLampChanged ;
37
37
public event EventHandler < LampsEventArgs > OnLampsChanged ;
38
38
public event EventHandler < LampColorEventArgs > OnLampColorChanged ;
39
-
40
39
public event EventHandler < CoilEventArgs > OnCoilChanged ;
40
+ public event EventHandler < AvailableDisplays > OnDisplaysAvailable ;
41
+ public event EventHandler < DisplayFrameData > OnDisplayFrame ;
41
42
42
43
[ NonSerialized ]
43
44
private MpfApi _api ;
@@ -54,6 +55,8 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
54
55
private Dictionary < string , string > _coilNames = new Dictionary < string , string > ( ) ;
55
56
private Dictionary < string , string > _lampNames = new Dictionary < string , string > ( ) ;
56
57
58
+ private bool _displaysAnnounced ;
59
+
57
60
private static readonly Logger Logger = LogManager . GetCurrentClassLogger ( ) ;
58
61
59
62
public void OnInit ( Player player , TableApi tableApi , BallManager ballManager )
@@ -85,6 +88,7 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
85
88
_api . Client . OnConfigureHardwareRule += OnConfigureHardwareRule ;
86
89
_api . Client . OnRemoveHardwareRule += OnRemoveHardwareRule ;
87
90
_api . Client . OnFadeLight += OnFadeLight ;
91
+ _api . Client . OnDmdFrame += OnDmdFrame ;
88
92
89
93
// map initial switches
90
94
var mappedSwitchStatuses = new Dictionary < string , bool > ( ) ;
@@ -197,6 +201,19 @@ private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
197
201
Logger . Info ( $ "<-- remove hardware rule: { _switchNames [ e . SwitchNumber ] } -> { _coilNames [ e . CoilNumber ] } .") ;
198
202
}
199
203
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
+
200
217
private void OnDestroy ( )
201
218
{
202
219
if ( _api != null ) {
0 commit comments