public static void Register() { Register("airbrake.fillTrain", _ => { if (PlayerManager.Car != null) { foreach (var car in PlayerManager.Car.trainset.cars) { var brakeSystem = car.brakeSystem; var state = ExtraBrakeState.Instance(brakeSystem); brakeSystem.brakePipePressure = state.brakePipePressureUnsmoothed = Constants.MaxBrakePipePressure; var carType = car.carType; if (CarTypes.IsLocomotive(carType)) { brakeSystem.mainReservoirPressure = brakeSystem.mainReservoirPressureUnsmoothed = Constants.MaxMainReservoirPressure; state.equalizingReservoirPressure = Constants.MaxBrakePipePressure; } else { state.auxReservoirPressure = Constants.MaxBrakePipePressure; state.tripleValveMode = Components.TripleValveMode.FullRelease; } } } }); }
public static void Postfix(IndicatorsSteam __instance) { var state = ExtraBrakeState.Instance(TrainCar.Resolve(__instance.gameObject).brakeSystem); var indicators = extraIndicators[__instance]; indicators.brakeCylinder.value = state.cylinderPressure; indicators.equalizingReservoir.value = state.equalizingReservoirPressure; }
public static void Postfix(IndicatorsDiesel __instance) { var car = TrainCar.Resolve(__instance.gameObject); var state = ExtraBrakeState.Instance(car.brakeSystem); var indicators = extraIndicators[__instance]; indicators.brakeCylinder.value = state.cylinderPressure; indicators.equalizingReservoir.value = state.equalizingReservoirPressure; // Main.DebugLog($"{car.ID}: cylinder={state.cylinderPressure}, EQ={state.equalizingReservoirPressure}"); }
public static void Postfix(JObject carData, TrainCar __result) { if (carData.TryGetValue(SaveKey, out JToken token) && token is JObject obj) { var serializer = new JsonSerializer(); var state = ExtraBrakeState.Instance(__result.brakeSystem); serializer.Populate(new JTokenReader(token), state); if (CarTypes.IsLocomotive(__result.carType) && obj.TryGetValue(mainReservoirKey, out var mainResPressure)) { __result.brakeSystem.mainReservoirPressure = __result.brakeSystem.mainReservoirPressureUnsmoothed = mainResPressure.Value <float>(); } Main.DebugLog($"Loaded state for {carData["id"]}: {state}"); } }
public static void Postfix(TrainCar car, JObject __result) { var state = ExtraBrakeState.Instance(car.brakeSystem); if (!state.Valid) { Main.DebugLog($"Skipping corrupted ExtraBrakeState {state} for {car.ID}"); return; } Main.DebugLog($"Saving state for {car.ID}: {state}"); __result[SaveKey] = JObject.FromObject(state); if (CarTypes.IsLocomotive(car.carType)) { __result[SaveKey][mainReservoirKey] = car.brakeSystem.mainReservoirPressureUnsmoothed; } }
private HeadsUpDisplayBridge(UnityModManager.ModEntry hudMod) { void RegisterPull(string label, Provider provider, Formatter formatter, IComparable?order = null) { hudMod.Invoke( "DvMod.HeadsUpDisplay.Registry.RegisterPull", out var _, new object?[] { label, provider, formatter, order }, RegisterPullArgumentTypes); } void RegisterPush(out Pusher pusher, string label, Formatter formatter, IComparable?order = null) { hudMod.Invoke( "DvMod.HeadsUpDisplay.Registry.RegisterPush", out var temp, new object?[] { label, formatter, order }, RegisterPushArgumentTypes); pusher = (Pusher)temp; } RegisterPull( "Train brake position", car => { if (!CarTypes.IsLocomotive(car.carType)) { return(null); } return(AirBrake.IsSelfLap(car.carType) ? car.brakeSystem.trainBrakePosition : Components.BrakeValve6ET.Mode(car.brakeSystem)); }, v => { return(v <= 1 ? v.ToString("P0") : v == 2 ? "Running" : v == 3 ? "Lap" : v == 4 ? "Service" : "Emergency"); }); RegisterPull( "Triple valve mode", car => CarTypes.IsAnyLocomotiveOrTender(car.carType) ? null : (float?)(int)ExtraBrakeState.Instance(car.brakeSystem).tripleValveMode.Abbrev(), v => Components.TripleValveModeExtensions.FromAbbrev((char)v)); RegisterPush( out auxReservoirPressurePusher, "Aux reservoir", v => $"{v:F2} bar"); RegisterPush( out brakeCylinderPressurePusher, "Brake cylinder", v => $"{v:F2} bar"); RegisterPush( out equalizingReservoirPressurePusher, "Equalizing reservoir", v => $"{v:F2} bar"); }