public void StopListeningToTrainInputEvents() { if (!loco || !loco.IsLoco) { return; } if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening throttle change on base loco controller"); } baseController.ThrottleUpdated -= OnTrainThrottleChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening brake change on base loco controller"); } baseController.BrakeUpdated -= OnTrainBrakeChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening indepBrake change on base loco controller"); } baseController.IndependentBrakeUpdated -= OnTrainIndependentBrakeChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening reverser change on base loco controller"); } baseController.ReverserUpdated -= OnTrainReverserStateChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening sander change on base loco controller"); } baseController.SandersUpdated -= OnTrainSanderChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Stop listening to train specific events"); } switch (loco.carType) { case TrainCarType.LocoShunter: FuseBoxPowerController fuseBox = loco.interior.GetComponentInChildren <ShunterDashboardControls>().fuseBoxPowerController; for (int i = 0; i < fuseBox.sideFusesObj.Length; i++) { ToggleSwitchBase sideFuse = fuseBox.sideFusesObj[i].GetComponent <ToggleSwitchBase>(); switch (i) { case 0: sideFuse.ValueChanged -= OnTrainSideFuse_1Changed; break; case 1: sideFuse.ValueChanged -= OnTrainSideFuse_2Changed; break; } } fuseBox.mainFuseObj.GetComponent <ToggleSwitchBase>().ValueChanged -= OnTrainMainFuseChanged; fuseBox.powerRotaryObj.GetComponent <RotaryAmplitudeChecker>().RotaryStateChanged -= OnTrainFusePowerStarterStateChanged; break; } }
private IEnumerator RotaryAmplitudeCheckerStartListen(FuseBoxPowerController fuseBox) { yield return(new WaitUntil(() => fuseBox.powerRotaryObj.GetComponent <RotaryAmplitudeChecker>() != null)); fuseBox.powerRotaryObj.GetComponent <RotaryAmplitudeChecker>().RotaryStateChanged += OnTrainFusePowerStarterStateChanged; }
public void ListenToTrainInputEvents() { if (!loco.IsLoco && isAlreadyListening) { return; } if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen to base loco controller"); } baseController = loco.GetComponent <LocoControllerBase>(); if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen throttle change on base loco controller"); } baseController.ThrottleUpdated += OnTrainThrottleChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen brake change on base loco controller"); } baseController.BrakeUpdated += OnTrainBrakeChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen indepBrake change on base loco controller"); } baseController.IndependentBrakeUpdated += OnTrainIndependentBrakeChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen reverser change on base loco controller"); } baseController.ReverserUpdated += OnTrainReverserStateChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen sander change on base loco controller"); } baseController.SandersUpdated += OnTrainSanderChanged; if (loco.logicCar != null) { Main.Log($"[{loco.ID}] Listen to specific train events"); } switch (loco.carType) { case TrainCarType.LocoShunter: ShunterDashboardControls shunterDashboard = loco.interior.GetComponentInChildren <ShunterDashboardControls>(); FuseBoxPowerController fuseBox = shunterDashboard.fuseBoxPowerController; for (int i = 0; i < fuseBox.sideFusesObj.Length; i++) { ToggleSwitchBase sideFuse = fuseBox.sideFusesObj[i].GetComponent <ToggleSwitchBase>(); switch (i) { case 0: sideFuse.ValueChanged += OnTrainSideFuse_1Changed; break; case 1: sideFuse.ValueChanged += OnTrainSideFuse_2Changed; break; } } fuseBox.mainFuseObj.GetComponent <ToggleSwitchBase>().ValueChanged += OnTrainMainFuseChanged; shunterDashboard.hornObj.GetComponent <ControlImplBase>().ValueChanged += ShunterHornUsed; SingletonBehaviour <CoroutineManager> .Instance.Run(RotaryAmplitudeCheckerStartListen(fuseBox)); break; } isAlreadyListening = true; }