Skip to content

Commit a10ee04

Browse files
committed
gle: Emit light changes.
1 parent 2ec73c8 commit a10ee04

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
5252
private Dictionary<string, int> _switchIds = new Dictionary<string, int>();
5353
private Dictionary<string, string> _switchNames = new Dictionary<string, string>();
5454
private Dictionary<string, string> _coilNames = new Dictionary<string, string>();
55+
private Dictionary<string, string> _lampNames = new Dictionary<string, string>();
5556

5657
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
5758

@@ -67,6 +68,10 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
6768
foreach (var coil in availableCoils) {
6869
_coilNames[coil.InternalId.ToString()] = coil.Id;
6970
}
71+
_lampNames.Clear();
72+
foreach (var lamp in availableLamps) {
73+
_lampNames[lamp.InternalId.ToString()] = lamp.Id;
74+
}
7075
_api = new MpfApi(machineFolder);
7176
_api.Launch(new MpfConsoleOptions {
7277
ShowLogInsteadOfConsole = false,
@@ -149,7 +154,17 @@ private void OnPulseCoil(object sender, PulseCoilRequest e)
149154

150155
private void OnFadeLight(object sender, FadeLightRequest e)
151156
{
152-
_player.Queue(() => Logger.Error("TODO: FADE LIGHTS."));
157+
var args = new List<LampEventArgs>();
158+
foreach (var fade in e.Fades) {
159+
if (_lampNames.ContainsKey(fade.LightNumber)) {
160+
args.Add(new LampEventArgs(_lampNames[fade.LightNumber], (int)(fade.TargetBrightness * 255)));
161+
} else {
162+
Logger.Error("Unmapped MPF lamp " + fade.LightNumber);
163+
}
164+
}
165+
_player.Queue(() => {
166+
OnLampsChanged?.Invoke(this, new LampsEventArgs(args.ToArray()));
167+
});
153168
}
154169

155170
private void OnConfigureHardwareRule(object sender, ConfigureHardwareRuleRequest e)
@@ -184,13 +199,15 @@ private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
184199

185200
private void OnDestroy()
186201
{
187-
_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;
193-
_api.Dispose();
202+
if (_api != null) {
203+
_api.Client.OnEnableCoil -= OnEnableCoil;
204+
_api.Client.OnDisableCoil -= OnDisableCoil;
205+
_api.Client.OnPulseCoil -= OnPulseCoil;
206+
_api.Client.OnConfigureHardwareRule -= OnConfigureHardwareRule;
207+
_api.Client.OnRemoveHardwareRule -= OnRemoveHardwareRule;
208+
_api.Client.OnFadeLight -= OnFadeLight;
209+
_api.Dispose();
210+
}
194211
}
195212
}
196213
}

0 commit comments

Comments
 (0)