Skip to content

Commit ada8165

Browse files
jsm174freezy
authored andcommitted
misc: add internal id to CoilEventArgs. Fix lamp init in OnStart
1 parent b6f9c13 commit ada8165

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

VisualPinball.Unity/VisualPinball.Unity/Game/CoilPlayer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private void HandleCoilEvent(object sender, CoilEventArgs coilEvent)
136136
}
137137

138138
if (destConfig.IsLampCoil) {
139-
_lampPlayer!.HandleCoilEvent(coilEvent.Id, coilEvent.IsEnabled);
139+
_lampPlayer!.HandleCoilEvent(coilEvent.Id, coilEvent.InternalId, coilEvent.IsEnabled);
140140
continue;
141141
}
142142

VisualPinball.Unity/VisualPinball.Unity/Game/Engine/IGamelogicEngine.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ public readonly struct CoilEventArgs
213213
/// </summary>
214214
public readonly string Id;
215215

216+
/// Internal ID of the coil.
217+
/// </summary>
218+
public readonly int InternalId;
219+
216220
/// <summary>
217221
/// State of the coil, true if the coil is under voltage, false if not.
218222
/// </summary>
@@ -221,6 +225,14 @@ public readonly struct CoilEventArgs
221225
public CoilEventArgs(string id, bool isEnabled)
222226
{
223227
Id = id;
228+
InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
229+
IsEnabled = isEnabled;
230+
}
231+
232+
public CoilEventArgs(string id, int internalId, bool isEnabled)
233+
{
234+
Id = id;
235+
InternalId = internalId;
224236
IsEnabled = isEnabled;
225237
}
226238
}

VisualPinball.Unity/VisualPinball.Unity/Game/LampPlayer.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,16 @@ public void OnStart()
7676

7777
AssignLampMapping(lampMapping);
7878

79-
// turn it off
8079
if (_lamps.ContainsKey(lampMapping.Device)) {
81-
HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.Off);
80+
// turn off non-rgb lamps, turn on rgb lamps, but set to channel to 0
81+
82+
if (lampMapping.Type != LampType.RgbMulti) {
83+
HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.Off);
84+
}
85+
else {
86+
HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.On);
87+
HandleLampEvent(lampMapping.Id, lampMapping.InternalId, 0f);
88+
}
8289
}
8390
}
8491

@@ -103,7 +110,7 @@ private void HandleLampEvent(object sender, LampEventArgs lampEvent)
103110

104111
public void HandleLampEvent(string id, int internalId, float value)
105112
{
106-
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, int.TryParse(id, out var internalId) ? internalId : 0, value, state, lamp, mapping));
113+
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, internalId, value, state, lamp, mapping));
107114
}
108115

109116
public void HandleLampEvent(string id, int internalId, LampStatus status)
@@ -116,9 +123,9 @@ public void HandleLampEvent(string id, int internalId, Color color)
116123
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, _) => ApplyColor(id, color, state, lamp));
117124
}
118125

119-
public void HandleCoilEvent(string id, bool isEnabled)
126+
public void HandleCoilEvent(string id, int internalId, bool isEnabled)
120127
{
121-
Apply(id, 0, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
128+
Apply(id, internalId, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
122129
}
123130

124131
private void Apply(string id, int internalId, LampSource lampSource, bool isCoil, Action<LampState, IApiLamp?, LampMapping?> action)
@@ -191,11 +198,9 @@ private void ApplyValue(string id, int internalId, float value, LampState state,
191198
break;
192199

193200
case LampType.RgbMulti:
194-
if (mapping.InternalId == internalId) {
195-
state.SetChannel(mapping.Channel, value / 255f);
196-
LampStates[id] = state;
197-
lamp?.OnLamp(state.Color.ToUnityColor());
198-
}
201+
state.SetChannel(mapping.Channel, value / 255f);
202+
LampStates[id] = state;
203+
lamp?.OnLamp(state.Color.ToUnityColor());
199204
break;
200205

201206
case LampType.SingleFading:
@@ -232,7 +237,10 @@ private void AssignLampMapping(LampMapping lampMapping)
232237
_lampMappings[id][lampMapping.InternalId] = new Dictionary<ILampDeviceComponent, LampMapping>();
233238
}
234239
_lampMappings[id][lampMapping.InternalId][lampMapping.Device] = lampMapping;
235-
LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());
240+
241+
if (!LampStates.ContainsKey(id)) {
242+
LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());
243+
}
236244
}
237245

238246
#if UNITY_EDITOR

0 commit comments

Comments
 (0)