Esempio n. 1
0
 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;
                 }
             }
         }
     });
 }
Esempio n. 2
0
            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;
            }
Esempio n. 3
0
            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}");
            }
Esempio n. 4
0
 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}");
     }
 }
Esempio n. 5
0
            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");
        }