Skip to content

Commit b6f9c13

Browse files
jsm174freezy
authored andcommitted
lights: update lampmappings to support internal id
1 parent 91fc50f commit b6f9c13

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

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

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class LampPlayer
4141
/// <summary>
4242
/// Links the GLE's IDs to the mappings.
4343
/// </summary>
44-
private readonly Dictionary<string, Dictionary<ILampDeviceComponent, LampMapping>> _lampMappings = new();
44+
private readonly Dictionary<string, Dictionary<int, Dictionary<ILampDeviceComponent, LampMapping>>> _lampMappings = new();
4545

4646
private Player? _player;
4747
private TableComponent? _tableComponent;
@@ -78,7 +78,7 @@ public void OnStart()
7878

7979
// turn it off
8080
if (_lamps.ContainsKey(lampMapping.Device)) {
81-
HandleLampEvent(lampMapping.Id, LampStatus.Off);
81+
HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.Off);
8282
}
8383
}
8484

@@ -92,40 +92,43 @@ public void OnStart()
9292
private void HandleLampsEvent(object sender, LampsEventArgs lampsEvent)
9393
{
9494
foreach (var lampEvent in lampsEvent.LampsChanged) {
95-
Apply(lampEvent.Id, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
95+
Apply(lampEvent.Id, lampEvent.InternalId, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
9696
}
9797
}
9898

9999
private void HandleLampEvent(object sender, LampEventArgs lampEvent)
100100
{
101-
Apply(lampEvent.Id, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
101+
Apply(lampEvent.Id, lampEvent.InternalId, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
102102
}
103103

104-
public void HandleLampEvent(string id, float value)
104+
public void HandleLampEvent(string id, int internalId, float value)
105105
{
106-
Apply(id, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, int.TryParse(id, out var internalId) ? internalId : 0, value, state, lamp, mapping));
106+
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, int.TryParse(id, out var internalId) ? internalId : 0, value, state, lamp, mapping));
107107
}
108108

109-
public void HandleLampEvent(string id, LampStatus status)
109+
public void HandleLampEvent(string id, int internalId, LampStatus status)
110110
{
111-
Apply(id, LampSource.Lamp, false, (state, lamp, _) => ApplyStatus(id, status, state, lamp));
111+
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, _) => ApplyStatus(id, status, state, lamp));
112112
}
113113

114-
public void HandleLampEvent(string id, Color color)
114+
public void HandleLampEvent(string id, int internalId, Color color)
115115
{
116-
Apply(id, LampSource.Lamp, false, (state, lamp, _) => ApplyColor(id, color, state, lamp));
116+
Apply(id, internalId, LampSource.Lamp, false, (state, lamp, _) => ApplyColor(id, color, state, lamp));
117117
}
118118

119119
public void HandleCoilEvent(string id, bool isEnabled)
120120
{
121-
Apply(id, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
121+
Apply(id, 0, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
122122
}
123123

124-
private void Apply(string id, LampSource lampSource, bool isCoil, Action<LampState, IApiLamp?, LampMapping?> action)
124+
private void Apply(string id, int internalId, LampSource lampSource, bool isCoil, Action<LampState, IApiLamp?, LampMapping?> action)
125125
{
126126
if (_lampAssignments.ContainsKey(id)) {
127127
foreach (var component in _lampAssignments[id]) {
128-
var mapping = _lampMappings[id][component];
128+
if (!_lampMappings[id].ContainsKey(internalId)) {
129+
continue;
130+
}
131+
var mapping = _lampMappings[id][internalId][component];
129132
if (mapping.Source != lampSource || mapping.IsCoil != isCoil) {
130133
// so, if we have a coil here that happens to have the same name as a lamp,
131134
// or a GI light with the same name as an other lamp, skip.
@@ -222,10 +225,13 @@ private void AssignLampMapping(LampMapping lampMapping)
222225
_lampAssignments[id] = new List<ILampDeviceComponent>();
223226
}
224227
if (!_lampMappings.ContainsKey(id)) {
225-
_lampMappings[id] = new Dictionary<ILampDeviceComponent, LampMapping>();
228+
_lampMappings[id] = new Dictionary<int, Dictionary<ILampDeviceComponent, LampMapping>>();
226229
}
227230
_lampAssignments[id].Add(lampMapping.Device);
228-
_lampMappings[id][lampMapping.Device] = lampMapping;
231+
if (!_lampMappings[id].ContainsKey(lampMapping.InternalId)) {
232+
_lampMappings[id][lampMapping.InternalId] = new Dictionary<ILampDeviceComponent, LampMapping>();
233+
}
234+
_lampMappings[id][lampMapping.InternalId][lampMapping.Device] = lampMapping;
229235
LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());
230236
}
231237

VisualPinball.Unity/VisualPinball.Unity/Game/Player.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ public class Player : MonoBehaviour
116116
public Dictionary<string, (bool, float)> WireStatuses => _wirePlayer.WireStatuses;
117117
public float3 Gravity => _playfieldComponent.Gravity;
118118

119-
public void SetLamp(string lampId, float value) => _lampPlayer.HandleLampEvent(lampId, value);
120-
public void SetLamp(string lampId, LampStatus status) => _lampPlayer.HandleLampEvent(lampId, status);
121-
public void SetLamp(string lampId, VisualPinball.Engine.Math.Color color) => _lampPlayer.HandleLampEvent(lampId, color);
119+
public void SetLamp(string lampId, int internalId, float value) => _lampPlayer.HandleLampEvent(lampId, internalId, value);
120+
public void SetLamp(string lampId, int internalId, LampStatus status) => _lampPlayer.HandleLampEvent(lampId, internalId, status);
121+
public void SetLamp(string lampId, int internalId, VisualPinball.Engine.Math.Color color) => _lampPlayer.HandleLampEvent(lampId, internalId, color);
122122

123123
#endregion
124124

0 commit comments

Comments
 (0)