Skip to content

Commit 46f8da6

Browse files
committed
fix: Don't crash when internal lamp IDs don't match, and persist internal ID when setting a coil as lamp.
1 parent f6d89bc commit 46f8da6

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Coil/CoilListViewItemRenderer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ private void RenderDestination(CoilListData coilListData, Rect cellRect, Action<
117117
} else if (index == CoilDestination.Lamp) {
118118
_tableComponent.MappingConfig.AddLamp(new LampMapping {
119119
Id = coilListData.Id,
120+
InternalId = coilListData.InternalId,
120121
Source = LampSource.Lamp,
121122
IsCoil = true,
122123
Description = coilListData.Description

VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampListViewItemRenderer.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ protected override void OnIconClick(LampListData data, bool pressedDown)
107107

108108
private void RenderCoilId(Dictionary<string, LampState> lampStatuses, LampListData lampListData, Rect cellRect)
109109
{
110+
cellRect.x += 5;
111+
EditorGUI.LabelField(cellRect, lampListData.Id);
112+
110113
// add some padding
111114
cellRect.x = cellRect.width - 45;
112115
cellRect.width -= 4;
@@ -134,7 +137,7 @@ private void RenderCoilId(Dictionary<string, LampState> lampStatuses, LampListDa
134137
cellRect.x += 20;
135138
cellRect.width -= 20;
136139

137-
EditorGUI.LabelField(cellRect, lampListData.Id);
140+
EditorGUI.LabelField(cellRect, lampListData.InternalId.ToString());
138141
}
139142

140143
protected override void RenderDeviceElement(LampListData listData, Rect cellRect, Action<LampListData> updateAction)

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

Lines changed: 8 additions & 7 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<int, Dictionary<ILampDeviceComponent, LampMapping>>> _lampMappings = new();
44+
private readonly Dictionary<string, Dictionary<ILampDeviceComponent, Dictionary<int, LampMapping>>> _lampMappings = new();
4545

4646
private Player? _player;
4747
private TableComponent? _tableComponent;
@@ -132,10 +132,11 @@ private void Apply(string id, int internalId, LampSource lampSource, bool isCoil
132132
{
133133
if (_lampAssignments.ContainsKey(id)) {
134134
foreach (var component in _lampAssignments[id]) {
135-
if (!_lampMappings[id].ContainsKey(internalId)) {
135+
136+
if (!_lampMappings[id][component].ContainsKey(internalId)) {
136137
continue;
137138
}
138-
var mapping = _lampMappings[id][internalId][component];
139+
var mapping = _lampMappings[id][component][internalId];
139140
if (mapping.Source != lampSource || mapping.IsCoil != isCoil) {
140141
// so, if we have a coil here that happens to have the same name as a lamp,
141142
// or a GI light with the same name as an other lamp, skip.
@@ -230,13 +231,13 @@ private void AssignLampMapping(LampMapping lampMapping)
230231
_lampAssignments[id] = new List<ILampDeviceComponent>();
231232
}
232233
if (!_lampMappings.ContainsKey(id)) {
233-
_lampMappings[id] = new Dictionary<int, Dictionary<ILampDeviceComponent, LampMapping>>();
234+
_lampMappings[id] = new Dictionary<ILampDeviceComponent, Dictionary<int, LampMapping>>();
234235
}
235236
_lampAssignments[id].Add(lampMapping.Device);
236-
if (!_lampMappings[id].ContainsKey(lampMapping.InternalId)) {
237-
_lampMappings[id][lampMapping.InternalId] = new Dictionary<ILampDeviceComponent, LampMapping>();
237+
if (!_lampMappings[id].ContainsKey(lampMapping.Device)) {
238+
_lampMappings[id][lampMapping.Device] = new Dictionary<int, LampMapping>();
238239
}
239-
_lampMappings[id][lampMapping.InternalId][lampMapping.Device] = lampMapping;
240+
_lampMappings[id][lampMapping.Device][lampMapping.InternalId] = lampMapping;
240241

241242
if (!LampStates.ContainsKey(id)) {
242243
LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());

0 commit comments

Comments
 (0)