Skip to content

Commit 2ec73c8

Browse files
committed
gle: Emit events on main thread.
1 parent 34a3f91 commit 2ec73c8

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

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

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
9696
public void Switch(string id, bool isClosed)
9797
{
9898
if (_switchIds.ContainsKey(id)) {
99+
Logger.Info($"--> switch {id} ({_switchIds[id]}): {isClosed}");
99100
_api.Switch(_switchIds[id].ToString(), isClosed);
100101
} else {
101102
Logger.Error("Unmapped MPF switch " + id);
@@ -113,7 +114,8 @@ public void GetMachineDescription()
113114
private void OnEnableCoil(object sender, EnableCoilRequest e)
114115
{
115116
if (_coilNames.ContainsKey(e.CoilNumber)) {
116-
OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], true));
117+
Logger.Info($"<-- coil {e.CoilNumber} ({_coilNames[e.CoilNumber]}): true");
118+
_player.Queue(() => OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], true)));
117119
} else {
118120
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
119121
}
@@ -122,7 +124,8 @@ private void OnEnableCoil(object sender, EnableCoilRequest e)
122124
private void OnDisableCoil(object sender, DisableCoilRequest e)
123125
{
124126
if (_coilNames.ContainsKey(e.CoilNumber)) {
125-
OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], false));
127+
Logger.Info($"<-- coil {e.CoilNumber} ({_coilNames[e.CoilNumber]}): false");
128+
_player.Queue(() => OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], false)));
126129
} else {
127130
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
128131
}
@@ -131,16 +134,22 @@ private void OnDisableCoil(object sender, DisableCoilRequest e)
131134
private void OnPulseCoil(object sender, PulseCoilRequest e)
132135
{
133136
if (_coilNames.ContainsKey(e.CoilNumber)) {
134-
OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], true));
135-
_player.ScheduleAction((int)e.PulseMs, () => OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], false)));
137+
var coilId = _coilNames[e.CoilNumber];
138+
_player.ScheduleAction(e.PulseMs * 10, () => {
139+
Logger.Info($"<-- coil {coilId} ({e.CoilNumber}): false (pulse)");
140+
OnCoilChanged?.Invoke(this, new CoilEventArgs(coilId, false));
141+
});
142+
Logger.Info($"<-- coil {e.CoilNumber} ({coilId}): true (pulse {e.PulseMs}ms)");
143+
_player.Queue(() => OnCoilChanged?.Invoke(this, new CoilEventArgs(coilId, true)));
144+
136145
} else {
137146
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
138147
}
139148
}
140149

141150
private void OnFadeLight(object sender, FadeLightRequest e)
142151
{
143-
Logger.Info("FADING SOME LIGHTS");
152+
_player.Queue(() => Logger.Error("TODO: FADE LIGHTS."));
144153
}
145154

146155
private void OnConfigureHardwareRule(object sender, ConfigureHardwareRuleRequest e)
@@ -154,8 +163,8 @@ private void OnConfigureHardwareRule(object sender, ConfigureHardwareRuleRequest
154163
return;
155164
}
156165

157-
_player.AddDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]);
158-
Logger.Info($"Added new hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
166+
_player.Queue(() => _player.AddDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]));
167+
Logger.Info($"<-- new hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
159168
}
160169

161170
private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
@@ -169,13 +178,18 @@ private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
169178
return;
170179
}
171180

172-
_player.RemoveDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]);
173-
Logger.Info($"Removed hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
181+
_player.Queue(() => _player.RemoveDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]));
182+
Logger.Info($"<-- remove hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
174183
}
175184

176185
private void OnDestroy()
177186
{
178187
_api.Client.OnEnableCoil -= OnEnableCoil;
188+
_api.Client.OnDisableCoil -= OnDisableCoil;
189+
_api.Client.OnPulseCoil -= OnPulseCoil;
190+
_api.Client.OnConfigureHardwareRule -= OnConfigureHardwareRule;
191+
_api.Client.OnRemoveHardwareRule -= OnRemoveHardwareRule;
192+
_api.Client.OnFadeLight -= OnFadeLight;
179193
_api.Dispose();
180194
}
181195
}

VisualPinball.Engine.Mpf/MpfClient.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ private async void ReceiveCommands()
7575
Logger.Info("Client started, retrieving commands...");
7676
while (await _commandStream.ResponseStream.MoveNext()) {
7777
var commands = _commandStream.ResponseStream.Current;
78-
Logger.Info($"New command: {commands.CommandCase}");
7978
switch (commands.CommandCase) {
8079
case Commands.CommandOneofCase.None:
8180
break;

0 commit comments

Comments
 (0)