diff --git a/VisualPinball.Engine/Game/Engines/GamelogicEngineCoil.cs b/VisualPinball.Engine/Game/Engines/GamelogicEngineCoil.cs
index 85efa5514..c314c77eb 100644
--- a/VisualPinball.Engine/Game/Engines/GamelogicEngineCoil.cs
+++ b/VisualPinball.Engine/Game/Engines/GamelogicEngineCoil.cs
@@ -26,7 +26,6 @@ public class GamelogicEngineCoil : IGamelogicEngineDeviceItem
public virtual string Id { get => _id; set => _id = value; }
public virtual string Description { get => _description; set => _description = value; }
- public int InternalId;
public string DeviceHint { get => _deviceHint; set => _deviceHint = value; }
public string DeviceItemHint { get => _deviceItemHint; set => _deviceItemHint = value; }
public int NumMatches { get => _numMatches; set => _numMatches = value; }
@@ -46,13 +45,11 @@ public class GamelogicEngineCoil : IGamelogicEngineDeviceItem
public GamelogicEngineCoil(string id)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
}
- public GamelogicEngineCoil(string id, int internalId)
+ public GamelogicEngineCoil(int id)
{
- Id = id;
- InternalId = internalId;
+ Id = id.ToString();
}
}
}
diff --git a/VisualPinball.Engine/Game/Engines/GamelogicEngineLamp.cs b/VisualPinball.Engine/Game/Engines/GamelogicEngineLamp.cs
index e46c3f748..918e40c24 100644
--- a/VisualPinball.Engine/Game/Engines/GamelogicEngineLamp.cs
+++ b/VisualPinball.Engine/Game/Engines/GamelogicEngineLamp.cs
@@ -34,11 +34,6 @@ public class GamelogicEngineLamp : IGamelogicEngineDeviceItem
///
public virtual string Description { get => _description; set => _description = value; }
- ///
- /// Some gamelogic engines use integers for the ID. In order to avoid repetitive casting, we store it as integer as well.
- ///
- public int InternalId;
-
///
/// Which channel this lamp corresponds to.
///
@@ -84,13 +79,11 @@ public class GamelogicEngineLamp : IGamelogicEngineDeviceItem
public GamelogicEngineLamp(string id)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
}
- public GamelogicEngineLamp(string id, int internalId)
+ public GamelogicEngineLamp(int id)
{
- Id = id;
- InternalId = internalId;
+ Id = id.ToString();
}
}
diff --git a/VisualPinball.Engine/Game/Engines/GamelogicEngineSwitch.cs b/VisualPinball.Engine/Game/Engines/GamelogicEngineSwitch.cs
index cf6c623cb..ef8583b27 100644
--- a/VisualPinball.Engine/Game/Engines/GamelogicEngineSwitch.cs
+++ b/VisualPinball.Engine/Game/Engines/GamelogicEngineSwitch.cs
@@ -40,12 +40,6 @@ public class GamelogicEngineSwitch : IGamelogicEngineDeviceItem
///
public virtual string Id { get => _id; set => _id = value; }
- ///
- /// A numerical identifier that can be used in gamelogic engines that
- /// are tied to numerical identifiers.
- ///
- public int InternalId;
-
///
/// If true, inverts the signal, i.e. disabled switches return "closed" (true),
/// while enabled switched return "open" (false).
@@ -76,13 +70,11 @@ public class GamelogicEngineSwitch : IGamelogicEngineDeviceItem
public GamelogicEngineSwitch(string id)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
}
- public GamelogicEngineSwitch(string id, int internalId)
+ public GamelogicEngineSwitch(int id)
{
- Id = id;
- InternalId = internalId;
+ Id = id.ToString();
}
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Coil/CoilListData.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Coil/CoilListData.cs
index a72b3f3a9..053ba97c2 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Coil/CoilListData.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Coil/CoilListData.cs
@@ -34,7 +34,6 @@ public class CoilListData : IManagerListData, IDeviceListData where T : IGamelogicEngineDeviceItem
{
IDeviceComponent DeviceComponent { get; }
string DeviceItem { get; set; }
- int InternalId { get; set; }
string Description { get; set; }
void ClearDevice();
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampListData.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampListData.cs
index 4ce31c75d..baf83a219 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampListData.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampListData.cs
@@ -24,8 +24,6 @@ public class LampListData : IManagerListData, IDeviceListData Id;
- public int InternalId { get; set; }
-
[ManagerListColumn(Order = 1, HeaderName = "Description", Width = 300)]
public string Description { get; set; }
@@ -55,7 +53,6 @@ public class LampListData : IManagerListData, IDeviceListData lampStatuses, LampListDa
EditorGUI.DrawTextureTransparent(iconRect, icon, ScaleMode.ScaleToFit);
GUI.color = guiColor;
}
- cellRect.x += 20;
- cellRect.width -= 20;
-
- EditorGUI.LabelField(cellRect, lampListData.InternalId.ToString());
}
protected override void RenderDeviceElement(LampListData listData, Rect cellRect, Action updateAction)
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampManager.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampManager.cs
index 6ad8656aa..106292ba0 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampManager.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Lamp/LampManager.cs
@@ -195,7 +195,6 @@ protected override void CloneData(string undoName, string newName, LampListData
TableComponent.MappingConfig.AddLamp(new LampMapping {
Id = data.Id,
- InternalId = data.InternalId,
Description = data.Description,
Device = data.Device,
DeviceItem = data.DeviceItem,
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ListViewItemRenderer.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ListViewItemRenderer.cs
index 29b6e4e09..ee70eced3 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ListViewItemRenderer.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ListViewItemRenderer.cs
@@ -44,7 +44,6 @@ protected virtual void OnIconClick(TListData data, bool pressedDown)
protected void RenderId(Dictionary statuses, ref string id, Action setId, TListData listData, Rect cellRect, Action updateAction)
{
- const float idWidth = 25f;
const float padding = 2f;
// add some padding
@@ -52,12 +51,7 @@ protected void RenderId(Dictionary statuses, ref string id, Act
cellRect.width -= 2 * padding;
var dropdownRect = cellRect;
- dropdownRect.width -= idWidth + 2 * padding;
-
- var idRect = cellRect;
- idRect.width = idWidth;
- idRect.x += cellRect.width - idWidth;
-
+
var options = new List(GleItems.Select(entry => entry.Id).ToArray());
if (options.Count > 0) {
options.Add("");
@@ -65,7 +59,6 @@ protected void RenderId(Dictionary statuses, ref string id, Act
options.Add("Add...");
if (Application.isPlaying && statuses != null) {
-
var iconRect = cellRect;
iconRect.width = 20;
@@ -108,13 +101,6 @@ protected void RenderId(Dictionary statuses, ref string id, Act
updateAction(listData);
}
}
-
- EditorGUI.BeginChangeCheck();
- var value = EditorGUI.IntField(idRect, listData.InternalId);
- if (EditorGUI.EndChangeCheck()) {
- listData.InternalId = value;
- updateAction(listData);
- }
}
protected void RenderDescription(TListData listData, Rect cellRect, Action updateAction)
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ManagerListView.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ManagerListView.cs
index 90113099f..6bb5932a0 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ManagerListView.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/ManagerListView.cs
@@ -145,7 +145,12 @@ protected override IList BuildRows(TreeViewItem root)
} else if (bVal == null) {
compareResult = -1;
} else {
- compareResult = aVal.CompareTo(bVal);
+ if (aVal is string && bVal is string && int.TryParse((string)aVal, out int aNum) && int.TryParse((string)bVal, out int bNum)) {
+ compareResult = aNum.CompareTo(bNum);
+ }
+ else {
+ compareResult = aVal.CompareTo(bVal);
+ }
}
}
// not equal in this column, then return that
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Switch/SwitchListData.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Switch/SwitchListData.cs
index 2bdbd6de9..f3464a726 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Switch/SwitchListData.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Managers/Switch/SwitchListData.cs
@@ -40,7 +40,6 @@ public class SwitchListData : IManagerListData, IDeviceListData DeviceComponent => DestinationDevice;
public string DeviceItem { get => DestinationDeviceItem; set => DestinationDeviceItem = value; }
- public int InternalId { get; set; }
public WireListData(WireMapping wireMapping)
{
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Test/Mappings/CoilPopulationTests.cs b/VisualPinball.Unity/VisualPinball.Unity.Test/Mappings/CoilPopulationTests.cs
index 0e318d9f3..8c82e1754 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Test/Mappings/CoilPopulationTests.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Test/Mappings/CoilPopulationTests.cs
@@ -55,10 +55,9 @@ public void ShouldCorrectlyPrintCoilInfo()
{
var coil = new CoilMapping {
Id = "c_left_flipper",
- InternalId = 12,
Description = "Left Flipper"
};
- coil.ToString().Should().Be("coil c_left_flipper (12) Left Flipper");
+ coil.ToString().Should().Be("coil c_left_flipper Left Flipper");
}
[Test]
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Display/SegmentDisplayComponent.cs b/VisualPinball.Unity/VisualPinball.Unity/Display/SegmentDisplayComponent.cs
index 4f182f4e8..556c01641 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Display/SegmentDisplayComponent.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Display/SegmentDisplayComponent.cs
@@ -22,7 +22,6 @@
using System.Globalization;
using System.Text;
using NLog;
-using NLog.LayoutRenderers.Wrappers;
using Unity.Mathematics;
using UnityEngine;
using Logger = NLog.Logger;
@@ -242,7 +241,6 @@ protected override Material CreateMaterial()
public override void UpdateFrame(DisplayFrameFormat format, byte[] source)
{
- Debug.Log($"Getting segment data!");
ushort[] target;
switch (format) {
case DisplayFrameFormat.Dmd2:
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Game/CoilPlayer.cs b/VisualPinball.Unity/VisualPinball.Unity/Game/CoilPlayer.cs
index 9f0eb786e..2d2dd47fa 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Game/CoilPlayer.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Game/CoilPlayer.cs
@@ -136,7 +136,7 @@ private void HandleCoilEvent(object sender, CoilEventArgs coilEvent)
}
if (destConfig.IsLampCoil) {
- _lampPlayer!.HandleCoilEvent(coilEvent.Id, coilEvent.InternalId, coilEvent.IsEnabled);
+ _lampPlayer!.HandleCoilEvent(coilEvent.Id, coilEvent.IsEnabled);
continue;
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Game/Engine/IGamelogicEngine.cs b/VisualPinball.Unity/VisualPinball.Unity/Game/Engine/IGamelogicEngine.cs
index 096df5a82..6ef79557a 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Game/Engine/IGamelogicEngine.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Game/Engine/IGamelogicEngine.cs
@@ -213,10 +213,6 @@ public readonly struct CoilEventArgs
///
public readonly string Id;
- /// Internal ID of the coil.
- ///
- public readonly int InternalId;
-
///
/// State of the coil, true if the coil is under voltage, false if not.
///
@@ -225,14 +221,6 @@ public readonly struct CoilEventArgs
public CoilEventArgs(string id, bool isEnabled)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
- IsEnabled = isEnabled;
- }
-
- public CoilEventArgs(string id, int internalId, bool isEnabled)
- {
- Id = id;
- InternalId = internalId;
IsEnabled = isEnabled;
}
}
@@ -244,11 +232,6 @@ public readonly struct LampEventArgs
///
public readonly string Id;
- ///
- /// Internal ID of the lamp. Some lamps have multiple internal IDs per ID, like RGBs.
- ///
- public readonly int InternalId;
-
///
/// The intensity of the light. The range is dependent on the GLE,
/// i.e. PinMAME sends 0-255 or sometimes 0-8 for GI. MPF sends 0-1.
@@ -269,16 +252,6 @@ public readonly struct LampEventArgs
public LampEventArgs(string id, float value, LampSource source = LampSource.Lamp)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
- Value = value;
- Source = source;
- IsCoil = false;
- }
-
- public LampEventArgs(string id, int internalId, float value, LampSource source = LampSource.Lamp)
- {
- Id = id;
- InternalId = internalId;
Value = value;
Source = source;
IsCoil = false;
@@ -287,7 +260,6 @@ public LampEventArgs(string id, int internalId, float value, LampSource source =
public LampEventArgs(string id, float value, bool isCoil, LampSource source = LampSource.Lamp)
{
Id = id;
- InternalId = int.TryParse(id, out var internalId) ? internalId : 0;
Value = value;
Source = source;
IsCoil = isCoil;
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Game/LampPlayer.cs b/VisualPinball.Unity/VisualPinball.Unity/Game/LampPlayer.cs
index 55ef959d4..0fba514c7 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Game/LampPlayer.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Game/LampPlayer.cs
@@ -41,7 +41,7 @@ public class LampPlayer
///
/// Links the GLE's IDs to the mappings.
///
- private readonly Dictionary>> _lampMappings = new();
+ private readonly Dictionary> _lampMappings = new();
private Player? _player;
private TableComponent? _tableComponent;
@@ -80,11 +80,11 @@ public void OnStart()
// turn off non-rgb lamps, turn on rgb lamps, but set to channel to 0
if (lampMapping.Type != LampType.RgbMulti) {
- HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.Off);
+ HandleLampEvent(lampMapping.Id, LampStatus.Off);
}
else {
- HandleLampEvent(lampMapping.Id, lampMapping.InternalId, LampStatus.On);
- HandleLampEvent(lampMapping.Id, lampMapping.InternalId, 0f);
+ HandleLampEvent(lampMapping.Id, LampStatus.On);
+ HandleLampEvent(lampMapping.Id, 0f);
}
}
}
@@ -99,44 +99,40 @@ public void OnStart()
private void HandleLampsEvent(object sender, LampsEventArgs lampsEvent)
{
foreach (var lampEvent in lampsEvent.LampsChanged) {
- Apply(lampEvent.Id, lampEvent.InternalId, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
+ Apply(lampEvent.Id, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.Value, state, lamp, mapping));
}
}
private void HandleLampEvent(object sender, LampEventArgs lampEvent)
{
- Apply(lampEvent.Id, lampEvent.InternalId, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.InternalId, lampEvent.Value, state, lamp, mapping));
+ Apply(lampEvent.Id, lampEvent.Source, lampEvent.IsCoil, (state, lamp, mapping) => ApplyValue(lampEvent.Id, lampEvent.Value, state, lamp, mapping));
}
- public void HandleLampEvent(string id, int internalId, float value)
+ public void HandleLampEvent(string id, float value)
{
- Apply(id, internalId, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, internalId, value, state, lamp, mapping));
+ Apply(id, LampSource.Lamp, false, (state, lamp, mapping) => ApplyValue(id, value, state, lamp, mapping));
}
- public void HandleLampEvent(string id, int internalId, LampStatus status)
+ public void HandleLampEvent(string id, LampStatus status)
{
- Apply(id, internalId, LampSource.Lamp, false, (state, lamp, _) => ApplyStatus(id, status, state, lamp));
+ Apply(id, LampSource.Lamp, false, (state, lamp, _) => ApplyStatus(id, status, state, lamp));
}
- public void HandleLampEvent(string id, int internalId, Color color)
+ public void HandleLampEvent(string id, Color color)
{
- Apply(id, internalId, LampSource.Lamp, false, (state, lamp, _) => ApplyColor(id, color, state, lamp));
+ Apply(id, LampSource.Lamp, false, (state, lamp, _) => ApplyColor(id, color, state, lamp));
}
- public void HandleCoilEvent(string id, int internalId, bool isEnabled)
+ public void HandleCoilEvent(string id, bool isEnabled)
{
- Apply(id, internalId, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
+ Apply(id, LampSource.Lamp, true, (state, lamp, _) => ApplyStatus(id, isEnabled ? LampStatus.On : LampStatus.Off, state, lamp));
}
- private void Apply(string id, int internalId, LampSource lampSource, bool isCoil, Action action)
+ private void Apply(string id, LampSource lampSource, bool isCoil, Action action)
{
if (_lampAssignments.ContainsKey(id)) {
foreach (var component in _lampAssignments[id]) {
-
- if (!_lampMappings[id][component].ContainsKey(internalId)) {
- continue;
- }
- var mapping = _lampMappings[id][component][internalId];
+ var mapping = _lampMappings[id][component];
if (mapping.Source != lampSource || mapping.IsCoil != isCoil) {
// so, if we have a coil here that happens to have the same name as a lamp,
// or a GI light with the same name as an other lamp, skip.
@@ -149,10 +145,11 @@ private void Apply(string id, int internalId, LampSource lampSource, bool isCoil
}
}
- #if UNITY_EDITOR
+#if UNITY_EDITOR
RefreshUI();
- #endif
- } else {
+#endif
+ }
+ else {
if (!LampStates.ContainsKey(id)) {
LampStates[id] = LampState.Default;
}
@@ -174,7 +171,7 @@ private void ApplyColor(string id, Color color, LampState state, IApiLamp? lamp)
lamp?.OnLamp(state.Color.ToUnityColor());
}
- private void ApplyValue(string id, int internalId, float value, LampState state, IApiLamp? lamp, LampMapping? mapping)
+ private void ApplyValue(string id, float value, LampState state, IApiLamp? lamp, LampMapping? mapping)
{
if (mapping == null) {
// if not mapped, there is no lamp, so just save the state.
@@ -231,17 +228,11 @@ private void AssignLampMapping(LampMapping lampMapping)
_lampAssignments[id] = new List();
}
if (!_lampMappings.ContainsKey(id)) {
- _lampMappings[id] = new Dictionary>();
+ _lampMappings[id] = new Dictionary();
}
_lampAssignments[id].Add(lampMapping.Device);
- if (!_lampMappings[id].ContainsKey(lampMapping.Device)) {
- _lampMappings[id][lampMapping.Device] = new Dictionary();
- }
- _lampMappings[id][lampMapping.Device][lampMapping.InternalId] = lampMapping;
-
- if (!LampStates.ContainsKey(id)) {
- LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());
- }
+ _lampMappings[id][lampMapping.Device] = lampMapping;
+ LampStates[id] = new LampState(lampMapping.Device.LampStatus, lampMapping.Device.LampColor.ToEngineColor());
}
#if UNITY_EDITOR
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Game/Player.cs b/VisualPinball.Unity/VisualPinball.Unity/Game/Player.cs
index 07f67d603..89c88f3a8 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Game/Player.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Game/Player.cs
@@ -116,9 +116,9 @@ public class Player : MonoBehaviour
public Dictionary WireStatuses => _wirePlayer.WireStatuses;
public float3 Gravity => _playfieldComponent.Gravity;
- public void SetLamp(string lampId, int internalId, float value) => _lampPlayer.HandleLampEvent(lampId, internalId, value);
- public void SetLamp(string lampId, int internalId, LampStatus status) => _lampPlayer.HandleLampEvent(lampId, internalId, status);
- public void SetLamp(string lampId, int internalId, VisualPinball.Engine.Math.Color color) => _lampPlayer.HandleLampEvent(lampId, internalId, color);
+ public void SetLamp(string lampId, float value) => _lampPlayer.HandleLampEvent(lampId, value);
+ public void SetLamp(string lampId, LampStatus status) => _lampPlayer.HandleLampEvent(lampId, status);
+ public void SetLamp(string lampId, VisualPinball.Engine.Math.Color color) => _lampPlayer.HandleLampEvent(lampId, color);
#endregion
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Mappings/CoilMapping.cs b/VisualPinball.Unity/VisualPinball.Unity/Mappings/CoilMapping.cs
index 5948495c7..8d2743e89 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Mappings/CoilMapping.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Mappings/CoilMapping.cs
@@ -26,8 +26,6 @@ public class CoilMapping
{
public string Id = string.Empty;
- public int InternalId;
-
public string Description = string.Empty;
public CoilDestination Destination = CoilDestination.Playfield;
@@ -40,7 +38,7 @@ public class CoilMapping
public override string ToString()
{
- return $"coil {Id} ({InternalId}) {Description}";
+ return $"coil {Id} {Description}";
}
}
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Mappings/LampMapping.cs b/VisualPinball.Unity/VisualPinball.Unity/Mappings/LampMapping.cs
index a4b99c7d4..913d54f9b 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Mappings/LampMapping.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Mappings/LampMapping.cs
@@ -28,8 +28,6 @@ public class LampMapping
{
public string Id = string.Empty;
- public int InternalId;
-
public LampSource Source = LampSource.Lamp;
public int FadingSteps;
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Mappings/MappingConfig.cs b/VisualPinball.Unity/VisualPinball.Unity/Mappings/MappingConfig.cs
index 00b946fe9..c74872f76 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Mappings/MappingConfig.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Mappings/MappingConfig.cs
@@ -87,7 +87,6 @@ public void PopulateSwitches(GamelogicEngineSwitch[] engineSwitches, TableCompon
AddSwitch(new SwitchMapping
{
Id = engineSwitch.Id,
- InternalId = engineSwitch.InternalId,
IsNormallyClosed = engineSwitch.NormallyClosed,
Description = description,
Source = source,
@@ -106,7 +105,6 @@ public void PopulateSwitches(GamelogicEngineSwitch[] engineSwitches, TableCompon
AddSwitch(new SwitchMapping
{
Id = engineSwitch.Id,
- InternalId = engineSwitch.InternalId,
IsNormallyClosed = engineSwitch.NormallyClosed,
Description = description,
Source = source,
@@ -265,7 +263,6 @@ public void PopulateCoils(GamelogicEngineCoil[] engineCoils, TableComponent tabl
AddCoil(new CoilMapping
{
Id = engineCoil.Id,
- InternalId = engineCoil.InternalId,
Description = description,
Destination = destination,
Device = matchedDevice,
@@ -280,7 +277,6 @@ public void PopulateCoils(GamelogicEngineCoil[] engineCoils, TableComponent tabl
AddCoil(new CoilMapping
{
Id = engineCoil.Id,
- InternalId = engineCoil.InternalId,
Description = description,
Destination = destination,
Device = null,
@@ -487,7 +483,6 @@ public void PopulateLamps(GamelogicEngineLamp[] engineLamps, TableComponent tabl
AddLamp(new LampMapping {
Id = engineLamp.Id,
- InternalId = engineLamp.InternalId,
Channel = engineLamp.Channel,
Source = engineLamp.Source,
Description = description,
@@ -503,7 +498,6 @@ public void PopulateLamps(GamelogicEngineLamp[] engineLamps, TableComponent tabl
if (!deviceAdded) {
AddLamp(new LampMapping {
Id = engineLamp.Id,
- InternalId = engineLamp.InternalId,
Channel = engineLamp.Channel,
Source = engineLamp.Source,
Description = description,
diff --git a/VisualPinball.Unity/VisualPinball.Unity/Mappings/SwitchMapping.cs b/VisualPinball.Unity/VisualPinball.Unity/Mappings/SwitchMapping.cs
index 4324042a4..b55ff8e7f 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/Mappings/SwitchMapping.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/Mappings/SwitchMapping.cs
@@ -26,8 +26,6 @@ public class SwitchMapping
{
public string Id = string.Empty;
- public int InternalId;
-
public bool IsNormallyClosed;
public string Description = string.Empty;
diff --git a/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughApi.cs b/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughApi.cs
index ac19c42d1..6626d7615 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughApi.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughApi.cs
@@ -16,6 +16,7 @@
using System;
using System.Collections.Generic;
+using System.Text.RegularExpressions;
using NLog;
using UnityEngine;
using VisualPinball.Engine.VPT;
@@ -196,10 +197,17 @@ void IApi.OnInit(BallManager ballManager)
} else {
_stackSwitches = new DeviceSwitch[MainComponent.SwitchCount];
- foreach (var sw in MainComponent.AvailableSwitches) {
- if (sw.InternalId > 0) {
- _stackSwitches[sw.InternalId - 1] = CreateSwitch(sw.Id, false, MainComponent.Type == TroughType.ModernOpto ? SwitchDefault.NormallyClosed : SwitchDefault.NormallyOpen);
- _switchLookup[sw.Id] = _stackSwitches[sw.InternalId - 1];
+
+ // ball_switch_# switches created in TroughComponent
+ var ballSwitchRegex = new Regex(@"^ball_switch_(\d+)$");
+ foreach (var @switch in MainComponent.AvailableSwitches) {
+ var match = ballSwitchRegex.Match(@switch.Id);
+ if (match.Success) {
+ int.TryParse(match.Groups[1].Value, out int id);
+ if (id > 0) {
+ _stackSwitches[id - 1] = CreateSwitch(@switch.Id, false, MainComponent.Type == TroughType.ModernOpto ? SwitchDefault.NormallyClosed : SwitchDefault.NormallyOpen);
+ _switchLookup[@switch.Id] = _stackSwitches[id - 1];
+ }
}
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughComponent.cs b/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughComponent.cs
index 825cc5706..dcdee6ee9 100644
--- a/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughComponent.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity/VPT/Trough/TroughComponent.cs
@@ -207,8 +207,9 @@ public IEnumerable AvailableSwitches {
switch (Type) {
case TroughType.ModernOpto:
case TroughType.ModernMech:
+ // ball_switch_# is matched with regex in TroughApi
return Enumerable.Repeat(0, SwitchCount)
- .Select((_, i) => new GamelogicEngineSwitch($"ball_switch_{i + 1}", i + 1)
+ .Select((_, i) => new GamelogicEngineSwitch($"ball_switch_{i + 1}")
{ Description = SwitchDescription(i) })
.Concat(JamSwitch
? new [] { new GamelogicEngineSwitch(JamSwitchId) { Description = "Jam Switch" }}
@@ -216,10 +217,11 @@ public IEnumerable AvailableSwitches {
);
case TroughType.TwoCoilsNSwitches:
+ // ball_switch_# is matched with regex in TroughApi
return new[] {
new GamelogicEngineSwitch(EntrySwitchId) { Description = "Entry Switch" }
}.Concat(Enumerable.Repeat(0, SwitchCount)
- .Select((_, i) => new GamelogicEngineSwitch($"ball_switch_{i + 1}", i + 1)
+ .Select((_, i) => new GamelogicEngineSwitch($"ball_switch_{i + 1}")
{ Description = SwitchDescription(i) } )
).Concat(JamSwitch
? new [] { new GamelogicEngineSwitch(JamSwitchId) { Description = "Jam Switch" }}