mirror of
https://github.com/rmroc451/TweaksAndThings.git
synced 2025-12-18 10:19:38 -06:00
Adding AutoOiler Patch that halves times to oil consists and the start delay, if a caboose is presentin the consist that the ai engineer is in.
This commit is contained in:
66
TweaksAndThings/Extensions/AutoEngineer_Extensions.cs
Normal file
66
TweaksAndThings/Extensions/AutoEngineer_Extensions.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
using Model.AI;
|
||||||
|
using System.Collections;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace RMROC451.TweaksAndThings.Extensions
|
||||||
|
{
|
||||||
|
internal static class AutoEngineer_Extensions
|
||||||
|
{
|
||||||
|
private static float CabooseHalvedFloat(this float input, bool hasCaboose) =>
|
||||||
|
hasCaboose ? input / 2 : input;
|
||||||
|
|
||||||
|
private static float CabooseAutoOilerLimit(this bool hasCaboose) =>
|
||||||
|
hasCaboose ? 0.99f : AutoOiler.OilIfBelow;
|
||||||
|
|
||||||
|
public static IEnumerator MrocAutoOilerLoop(this AutoOiler oiler, Serilog.ILogger _log)
|
||||||
|
{
|
||||||
|
int originIndex = oiler.FindOriginIndex();
|
||||||
|
bool hasCaboose = oiler._cars.CabooseInConsist();
|
||||||
|
if (originIndex < 0)
|
||||||
|
{
|
||||||
|
_log.Error("Couldn't find origin car {car}", oiler._originCar);
|
||||||
|
oiler._coroutine = null;
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
oiler._reverse = originIndex > oiler._cars.Count - originIndex;
|
||||||
|
_log.Information(
|
||||||
|
"AutoOiler {name} starting, rev = {reverse}, caboose halving adjustment = {hasCaboose}, oil limit = {limit}",
|
||||||
|
oiler.name,
|
||||||
|
oiler._reverse,
|
||||||
|
hasCaboose,
|
||||||
|
hasCaboose.CabooseAutoOilerLimit()
|
||||||
|
);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
yield return new WaitForSeconds(AutoOiler.StartDelay.CabooseHalvedFloat(hasCaboose));
|
||||||
|
int carIndex = originIndex;
|
||||||
|
float adjustedTimeToWalk = AutoOiler.TimeToWalkCar.CabooseHalvedFloat(hasCaboose);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (oiler.TryGetCar(carIndex, out var car))
|
||||||
|
{
|
||||||
|
float num = 0f;
|
||||||
|
float origOil = car.Oiled;
|
||||||
|
if (car.NeedsOiling && car.Oiled < hasCaboose.CabooseAutoOilerLimit())
|
||||||
|
{
|
||||||
|
float num2 = 1f - car.Oiled;
|
||||||
|
car.OffsetOiled(num2);
|
||||||
|
float num3 = num2 * AutoOiler.TimeToFullyOil.CabooseHalvedFloat(hasCaboose);
|
||||||
|
num += num3;
|
||||||
|
oiler._pendingRunDuration += num3;
|
||||||
|
oiler._oiledCount++;
|
||||||
|
_log.Information("AutoOiler {name}: oiled {car} from {orig} => {new}", oiler.name, car, origOil, car.Oiled);
|
||||||
|
}
|
||||||
|
num += adjustedTimeToWalk;
|
||||||
|
oiler._pendingRunDuration += adjustedTimeToWalk;
|
||||||
|
yield return new WaitForSeconds(num);
|
||||||
|
}
|
||||||
|
carIndex = oiler.NextIndex(carIndex);
|
||||||
|
}
|
||||||
|
while (oiler.InBounds(carIndex));
|
||||||
|
oiler._reverse = !oiler._reverse;
|
||||||
|
oiler.PayWages();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
TweaksAndThings/Patches/AutoOiler_Loop_Patch.cs
Normal file
26
TweaksAndThings/Patches/AutoOiler_Loop_Patch.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
using Model.AI;
|
||||||
|
using Railloader;
|
||||||
|
using RMROC451.TweaksAndThings.Extensions;
|
||||||
|
using Serilog;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
|
namespace RMROC451.TweaksAndThings.Patches;
|
||||||
|
|
||||||
|
[HarmonyPatch(typeof(AutoOiler))]
|
||||||
|
[HarmonyPatch(nameof(AutoOiler.Loop))]
|
||||||
|
[HarmonyPatchCategory("RMROC451TweaksAndThings")]
|
||||||
|
internal class AutoOiler_Loop_Patch
|
||||||
|
{
|
||||||
|
private static ILogger _log => Log.ForContext<AutoOiler_Loop_Patch>();
|
||||||
|
|
||||||
|
public static bool Prefix(AutoOiler __instance, ref IEnumerator __result)
|
||||||
|
{
|
||||||
|
TweaksAndThingsPlugin tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
|
||||||
|
if (!tweaksAndThings.IsEnabled) return true;
|
||||||
|
bool buttonsHaveCost = tweaksAndThings?.settings?.EndGearHelpersRequirePayment ?? false;
|
||||||
|
|
||||||
|
if (buttonsHaveCost)__result = __instance.MrocAutoOilerLoop(_log);
|
||||||
|
return !buttonsHaveCost; //only hit this if !buttonsHaveCost, since Loop is a coroutine
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user