diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index d60478d1..bc398979 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -58,6 +58,7 @@ namespace NewHorizons public string DefaultStarSystem => SystemDict.ContainsKey(_defaultSystemOverride) ? _defaultSystemOverride : _defaultStarSystem; public string CurrentStarSystem => _currentStarSystem; + public bool TimeLoopEnabled => SystemDict[CurrentStarSystem]?.Config?.enableTimeLoop ?? true; public bool IsWarpingFromShip { get; private set; } = false; public bool IsWarpingFromVessel { get; private set; } = false; public bool IsWarpingBackToEye { get; internal set; } = false; diff --git a/NewHorizons/Patches/TimeLoopPatches.cs b/NewHorizons/Patches/TimeLoopPatches.cs new file mode 100644 index 00000000..ac10a9ec --- /dev/null +++ b/NewHorizons/Patches/TimeLoopPatches.cs @@ -0,0 +1,50 @@ +using HarmonyLib; + +namespace NewHorizons.Patches +{ + [HarmonyPatch] + public static class TimeLoopPatches + { + /// + /// Disables starfield updates + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(StarfieldController), nameof(StarfieldController.Update))] + public static bool StarfieldController_Update() => Main.Instance.TimeLoopEnabled; + + /// + /// Disables interloper destruction + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(TempCometCollisionFix), nameof(TempCometCollisionFix.Update))] + public static bool TempCometCollisionFix_Update() => Main.Instance.TimeLoopEnabled; + + /// + /// Disables sun logic + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(SunController), nameof(SunController.Update))] + public static bool SunController_Update(SunController __instance) => Main.Instance.TimeLoopEnabled && __instance.isActiveAndEnabled; + + /// + /// Disables sun expansion + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(SunController), nameof(SunController.UpdateScale))] + public static bool SunController_UpdateScale(SunController __instance) => Main.Instance.TimeLoopEnabled && __instance.isActiveAndEnabled; + + /// + /// Disables sun collapse SFX + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(SunController), nameof(SunController.OnTriggerSupernova))] + public static bool SunController_OnTriggerSupernova(SunController __instance) => Main.Instance.TimeLoopEnabled && __instance.isActiveAndEnabled; + + /// + /// Disables end times music + /// + [HarmonyPrefix] + [HarmonyPatch(typeof(GlobalMusicController), nameof(GlobalMusicController.UpdateEndTimesMusic))] + public static bool GlobalMusicController_UpdateEndTimesMusic() => Main.Instance.TimeLoopEnabled; + } +}