Example #1
0
        private HeadsUpDisplayBridge(UnityModManager.ModEntry hudMod)
        {
            void RegisterPull(string label, Provider provider, Formatter formatter, IComparable?order = null, bool hidden = false)
            {
                hudMod.Invoke(
                    "DvMod.HeadsUpDisplay.Registry.RegisterPull",
                    out var _,
                    new object?[] { label, provider, formatter, order, hidden },
                    RegisterPullArgumentTypes);
            }

            RegisterPull(
                "Fuel consumption",
                car =>
            {
                if (car.carType == TrainCarType.LocoDiesel)
                {
                    return(DieselPower.DieselFuelUsage(DieselPower.RawPowerInWatts(car.GetComponentInChildren <DieselLocoSimulation>())));
                }
                else if (CarTypes.IsShunterLocomotive(car.carType))
                {
                    return(ShunterFuelPatch.DieselFuelUsage(ShunterPower.RawPowerInWatts(car.GetComponentInChildren <ShunterLocoSimulation>())));
                }
                else
                {
                    return(null);
                }
            },
                v => $"{v * 3600f:F0} L/h"
                );
        }
            private static IEnumerator CoolingFanCoro(LocoAudioShunter locoAudio)
            {
                var sim     = locoAudio.GetComponentInParent <ShunterLocoSimulation>();
                var layered = GetLayeredAudio(locoAudio);

                while (true)
                {
                    yield return(null);

                    layered.Set(ShunterPower.IsFanRunning(sim) ? 1f : 0f);
                }
            }
Example #3
0
        public static bool Prefix(ShunterLocoSimulation __instance, float delta)
        {
            if (!__instance.engineOn || __instance.oil.value <= 0.0)
            {
                return(false);
            }
            var oilUsage = ShunterPower.RawPowerInWatts(__instance) * OilConsumption * Main.settings.shunterOilConsumptionMultiplier * delta / __instance.timeMult;

            __instance.oil.AddNextValue(-oilUsage);
            // Main.DebugLog(TrainCar.Resolve(__instance.gameObject), () => $"oil={__instance.oil.value} / {__instance.oil.max}, oilConsumption={oilUsage / (delta / __instance.timeMult) * 3600} Lph, timeToExhaust={__instance.oil.value/(oilUsage/(delta/__instance.timeMult))} s");

            return(false);
        }
Example #4
0
        public static bool Prefix(ShunterLocoSimulation __instance, float delta)
        {
            if (!__instance.engineOn)
            {
                return(false);
            }
            var fuelUsage = DieselFuelUsage(ShunterPower.RawPowerInWatts(__instance)) * Main.settings.shunterFuelConsumptionMultiplier *
                            (delta / __instance.timeMult);

            __instance.TotalFuelConsumed += fuelUsage;
            __instance.fuel.AddNextValue(-fuelUsage);
            // Main.DebugLog(TrainCar.Resolve(__instance.gameObject), () => $"fuel={__instance.fuel.value} / {__instance.fuel.max}, fuelConsumption={fuelUsage / (delta / __instance.timeMult) * 3600} Lph, timeToExhaust={__instance.fuel.value/(fuelUsage/(delta/__instance.timeMult))} s");
            return(false);
        }