static IEnumerator <object> AttachListeners()
        {
            yield return((object)null);

            var rotary02 = GameObjectUtils.FindObject(instance.transform.gameObject, "C headlights dash_rotary02");

            DV.CabControls.ControlImplBase lightCtrl = rotary02.gameObject.GetComponent <DV.CabControls.ControlImplBase>();

            if (PlayerManager.Car.carType == TrainCarType.LocoShunter)
            {
                locoLights = PlayerManager.Car.GetComponent <LocoLights>();
            }

            if (locoLights != null)
            {
                lightCtrl.SetValue(locoLights.IsOn ? 1f : 0f);
            }

            lightCtrl.ValueChanged += (e =>
            {
                if (locoLights != null)
                {
                    locoLights.SetLights(e.newValue > 0.5f);
                }
            });
        }
        static IEnumerator <object> AttachListeners()
        {
            yield return((object)null);

            DV.CabControls.ControlImplBase fanCtrl = instance.fanSwitchButton.GetComponent <DV.CabControls.ControlImplBase>();

            fanCtrl.ValueChanged += (e =>
            {
                Main.isFanOn = e.newValue >= 0.5f;
            });
        }
        static IEnumerator AttachListeners()
        {
            yield return(null);

            var light_switch = GameObjectUtils.FindObject(instance.transform.gameObject, "C light lever");

            DV.CabControls.ControlImplBase lightCtrl = light_switch
                                                       .gameObject.GetComponent <DV.CabControls.ControlImplBase>();

            if (PlayerManager.Car.carType == TrainCarType.LocoSteamHeavy)
            {
                locoLights = PlayerManager.Car.GetComponent <LocoLights>();
            }

            var isInitialized = Traverse.Create(lightCtrl).Field("isInitialized");

            Main.Log("pausing until Lever is initialized");
            while (!isInitialized.GetValue <bool>())
            {
                yield return(null);
            }
            Main.Log("Lever is initialized; resuming");

            if (locoLights != null)
            {
                float position = DirectionToLeverPosition(locoLights.IsOn ? locoLights.Direction : 0f);
                lightCtrl.SetValue(position);
            }

            lightCtrl.ValueChanged += (e =>
            {
                if (locoLights != null)
                {
                    float direction = LeverPositionToDirection(e.newValue);
                    locoLights.SetLights(Mathf.Abs(direction) > 0.25f);
                    locoLights.SetDirection(Mathf.Abs(direction) > 0.75f ? direction : 0f);
                }
            });
        }
        static IEnumerator <object> AttachListeners()
        {
            yield return((object)null);

            DV.CabControls.ControlImplBase sandDeployCtrl = instance.sandDeployBtn.GetComponent <DV.CabControls.ControlImplBase>();

            sandDeployCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoShunter)
                    {
                        LocoControllerShunter locoController = car.GetComponent <LocoControllerShunter>();

                        if (locoController)
                        {
                            locoController.SetSandersOn(e.newValue >= 0.5f);
                        }
                    }
                    else if (car.carType == TrainCarType.LocoDiesel)
                    {
                        LocoControllerDiesel locoController = car.GetComponent <LocoControllerDiesel>();

                        if (locoController)
                        {
                            locoController.SetSandersOn(e.newValue >= 0.5f);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase fanCtrl = instance.fanSwitchButton.GetComponent <DV.CabControls.ControlImplBase>();

            fanCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoShunter)
                    {
                        LocoControllerShunter locoController = car.GetComponent <LocoControllerShunter>();

                        if (locoController)
                        {
                            locoController.SetFan(e.newValue >= 0.5f);
                        }
                    }
                    else if (car.carType == TrainCarType.LocoDiesel)
                    {
                        LocoControllerDiesel locoController = car.GetComponent <LocoControllerDiesel>();

                        if (locoController)
                        {
                            locoController.SetFan(e.newValue >= 0.5f);
                        }
                    }
                }
            });
        }
Example #5
0
        static IEnumerator <object> AttachListeners()
        {
            yield return(null);

            DV.CabControls.ControlImplBase sanderCtrl = instance.sanderValveObj.GetComponent <DV.CabControls.ControlImplBase>();

            sanderCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetSanderValve(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase blowerCtrl = instance.blowerValveObj.GetComponent <DV.CabControls.ControlImplBase>();

            blowerCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetBlower(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase injectorCtrl = instance.injectorValveObj.GetComponent <DV.CabControls.ControlImplBase>();

            injectorCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetInjector(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase waterDumpCtrl = instance.waterDumpValveObj.GetComponent <DV.CabControls.ControlImplBase>();

            waterDumpCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetWaterDump(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase steamReleaseCtrl = instance.steamReleaserValveObj.GetComponent <DV.CabControls.ControlImplBase>();

            steamReleaseCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetSteamReleaser(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase draftPullerCtrl = instance.draftPullerObj.GetComponent <DV.CabControls.ControlImplBase>();

            draftPullerCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetDraft(e.newValue);
                        }
                    }
                }
            });

            DV.CabControls.ControlImplBase fireDoorLeverCtrl = instance.fireDoorLeverObj.GetComponent <DV.CabControls.ControlImplBase>();

            fireDoorLeverCtrl.ValueChanged += (e =>
            {
                if (PlayerManager.Car == null || PlayerManager.Car.trainset == null)
                {
                    return;
                }

                for (int i = 0; i < PlayerManager.Car.trainset.cars.Count; i++)
                {
                    TrainCar car = PlayerManager.Car.trainset.cars[i];

                    if (PlayerManager.Car.Equals(car))
                    {
                        continue;
                    }

                    if (car.carType == TrainCarType.LocoSteamHeavy)
                    {
                        LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>();

                        if (steamController)
                        {
                            steamController.SetFireDoorOpen(e.newValue);
                        }
                    }
                }
            });
        }