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); } }
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); }
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); }