// Need to know when we have grabbed a Locomotive Remote // Actual Grab Handlers static void OnItemGrabbedRight(InventoryItemSpec iis) { LocomotiveRemoteController lrc = iis?.GetComponent <LocomotiveRemoteController>(); if (lrc != null) { LocoControllerBase locoController = (LocoControllerBase)typeof(LocomotiveRemoteController).GetField("pairedLocomotive", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(lrc); remoteCar = locoController?.GetComponent <TrainCar>(); } }
private static void Postfix(LocoControllerBase __instance, ref float __result) { if (NetworkManager.IsClient() && __instance.train.rb.isKinematic) { NetworkTrainPosSync networking = __instance.GetComponent <NetworkTrainPosSync>(); if (networking) { __result = networking.velocity.magnitude * 3.6f; } } }
static void Postfix(LocoControllerBase __instance, float nextTargetIndependentBrake) { TrainCar currentCar = __instance.GetComponent <TrainCar>(); TrainCar targetCar = null; Trainset trainset = null; if (Main.remoteCar) { targetCar = Main.remoteCar; trainset = targetCar.trainset; } else if (PlayerManager.Car != null) { targetCar = PlayerManager.Car; trainset = PlayerManager.Car.trainset; } if (currentCar == null || targetCar == null || !targetCar.Equals(currentCar) || trainset == null || trainset.cars.Count < 2) { return; } for (int i = 0; i < trainset.cars.Count; i++) { TrainCar car = trainset.cars[i]; if (targetCar.Equals(car)) { continue; } if (car.carType == TrainCarType.LocoShunter) { LocoControllerShunter locoController = car.GetComponent <LocoControllerShunter>(); if (locoController) { locoController.SetIndependentBrake(nextTargetIndependentBrake); } } else if (car.carType == TrainCarType.LocoDiesel) { LocoControllerDiesel locoController = car.GetComponent <LocoControllerDiesel>(); if (locoController) { locoController.SetIndependentBrake(nextTargetIndependentBrake); } } } }
static void Postfix(LocoControllerBase __instance, float nextTargetIndependentBrake) { TrainCar currentCar = __instance.GetComponent <TrainCar>(); TrainCar targetCar = null; Trainset trainset = null; if (PlayerManager.Car != null && PlayerManager.Car.trainset != null) { targetCar = PlayerManager.Car; trainset = PlayerManager.Car.trainset; } if (currentCar == null || targetCar == null || !targetCar.Equals(currentCar) || trainset == null || trainset.cars.Count < 2) { return; } List <TrainCar> trainsetCars = trainset.cars; for (int i = 0; i < trainsetCars.Count; i++) { TrainCar car = trainsetCars[i]; if (targetCar.Equals(car)) { continue; } if (car.carType == TrainCarType.LocoSteamHeavy) { LocoControllerSteam steamController = car.GetComponent <LocoControllerSteam>(); if (steamController) { steamController.SetIndependentBrake(nextTargetIndependentBrake); } } } }
private static float GetWheelSpeedKmH(LocoControllerBase loco) { if (loco.GetComponent <WheelRotationViaAnimation>() is var wrva && wrva != null) { return(Mathf.Abs(wrva.rotationSpeed * wrva.wheelCircumference * 3.6f)); }