Skip to content

Commit e4d78c2

Browse files
committed
engine: Handle hardware rules.
1 parent a04fef9 commit e4d78c2

File tree

1 file changed

+38
-10
lines changed

1 file changed

+38
-10
lines changed

VisualPinball.Engine.Mpf.Unity/Runtime/MpfGamelogicEngine.cs

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
using System.Collections.Generic;
1414
using System.Linq;
1515
using Mpf.Vpe;
16+
using NLog;
1617
using UnityEngine;
1718
using VisualPinball.Engine.Game.Engines;
1819
using VisualPinball.Unity;
20+
using Logger = NLog.Logger;
1921

2022
namespace VisualPinball.Engine.Mpf.Unity
2123
{
@@ -46,14 +48,20 @@ public class MpfGamelogicEngine : MonoBehaviour, IGamelogicEngine
4648
[SerializeField] private GamelogicEngineCoil[] availableCoils = new GamelogicEngineCoil[0];
4749
[SerializeField] private GamelogicEngineLamp[] availableLamps = new GamelogicEngineLamp[0];
4850

51+
private Player _player;
4952
private Dictionary<string, int> _switchIds = new Dictionary<string, int>();
53+
private Dictionary<string, string> _switchNames = new Dictionary<string, string>();
5054
private Dictionary<string, string> _coilNames = new Dictionary<string, string>();
5155

52-
private void Awake()
56+
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
57+
58+
public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
5359
{
60+
_player = player;
5461
_switchIds.Clear();
5562
foreach (var sw in availableSwitches) {
5663
_switchIds[sw.Id] = sw.InternalId;
64+
_switchNames[sw.InternalId.ToString()] = sw.Id;
5765
}
5866
_coilNames.Clear();
5967
foreach (var coil in availableCoils) {
@@ -68,10 +76,7 @@ private void Awake()
6876
_api.Client.OnConfigureHardwareRule += OnConfigureHardwareRule;
6977
_api.Client.OnRemoveHardwareRule += OnRemoveHardwareRule;
7078
_api.Client.OnFadeLight += OnFadeLight;
71-
}
7279

73-
public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
74-
{
7580
_api.StartGame(player.SwitchStatusesClosed);
7681
}
7782

@@ -80,7 +85,7 @@ public void Switch(string id, bool isClosed)
8085
if (_switchIds.ContainsKey(id)) {
8186
_api.Switch(_switchIds[id].ToString(), isClosed);
8287
} else {
83-
Debug.LogError("Unmapped MPF switch " + id);
88+
Logger.Error("Unmapped MPF switch " + id);
8489
}
8590
}
8691

@@ -97,7 +102,7 @@ private void OnEnableCoil(object sender, EnableCoilRequest e)
97102
if (_coilNames.ContainsKey(e.CoilNumber)) {
98103
OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], true));
99104
} else {
100-
Debug.LogError("Unmapped MPF coil " + e.CoilNumber);
105+
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
101106
}
102107
}
103108

@@ -106,26 +111,49 @@ private void OnDisableCoil(object sender, DisableCoilRequest e)
106111
if (_coilNames.ContainsKey(e.CoilNumber)) {
107112
OnCoilChanged?.Invoke(this, new CoilEventArgs(_coilNames[e.CoilNumber], false));
108113
} else {
109-
Debug.LogError("Unmapped MPF coil " + e.CoilNumber);
114+
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
110115
}
111116
}
112117

113118
private void OnPulseCoil(object sender, PulseCoilRequest e)
114119
{
120+
Logger.Info($"PULSING COIL {e.CoilNumber}");
115121
}
116122

117123
private void OnFadeLight(object sender, FadeLightRequest e)
118124
{
125+
Logger.Info("FADING SOME LIGHTS");
119126
}
120127

121-
private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
128+
private void OnConfigureHardwareRule(object sender, ConfigureHardwareRuleRequest e)
122129
{
130+
if (!_switchNames.ContainsKey(e.SwitchNumber)) {
131+
Logger.Error("Unmapped MPF switch " + e.SwitchNumber);
132+
return;
133+
}
134+
if (!_coilNames.ContainsKey(e.CoilNumber)) {
135+
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
136+
return;
137+
}
138+
139+
_player.AddDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]);
140+
Logger.Info($"Added new hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
123141
}
124142

125-
private void OnConfigureHardwareRule(object sender, ConfigureHardwareRuleRequest e)
143+
private void OnRemoveHardwareRule(object sender, RemoveHardwareRuleRequest e)
126144
{
127-
}
145+
if (!_switchNames.ContainsKey(e.SwitchNumber)) {
146+
Logger.Error("Unmapped MPF coil " + e.SwitchNumber);
147+
return;
148+
}
149+
if (!_coilNames.ContainsKey(e.CoilNumber)) {
150+
Logger.Error("Unmapped MPF coil " + e.CoilNumber);
151+
return;
152+
}
128153

154+
_player.RemoveDynamicWire(_switchNames[e.SwitchNumber], _coilNames[e.CoilNumber]);
155+
Logger.Info($"Removed hardware rule: {_switchNames[e.SwitchNumber]} -> {_coilNames[e.CoilNumber]}.");
156+
}
129157

130158
private void OnDestroy()
131159
{

0 commit comments

Comments
 (0)