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" }}