From 5c5b4e07644e7dcd0490a0caa04dc3cd1aab1cd5 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 13 Jul 2022 23:48:43 -0400 Subject: [PATCH] Wrap Main.Instance.ModHelper.Events.Unity into Delay --- NewHorizons/Builder/Body/CloakBuilder.cs | 6 +++--- NewHorizons/Builder/Body/FunnelBuilder.cs | 2 +- NewHorizons/Builder/Body/WaterBuilder.cs | 2 +- NewHorizons/Builder/General/AstroObjectBuilder.cs | 3 ++- NewHorizons/Builder/General/SpawnPointBuilder.cs | 2 +- NewHorizons/Builder/Orbital/OrbitlineBuilder.cs | 2 +- NewHorizons/Builder/Props/DetailBuilder.cs | 6 +++--- NewHorizons/Builder/Props/GeyserBuilder.cs | 2 +- NewHorizons/Builder/Props/NomaiTextBuilder.cs | 2 +- NewHorizons/Builder/Props/ScatterBuilder.cs | 2 +- NewHorizons/Builder/Props/TornadoBuilder.cs | 2 +- NewHorizons/Builder/Props/VolcanoBuilder.cs | 2 +- NewHorizons/Components/ShipLogStarChartMode.cs | 2 +- NewHorizons/Components/ShipWarpController.cs | 6 +++--- NewHorizons/Handlers/AudioTypeHandler.cs | 2 +- NewHorizons/Handlers/PlanetCreationHandler.cs | 12 ++++++------ NewHorizons/Handlers/PlanetDestructionHandler.cs | 6 +++--- NewHorizons/Handlers/SystemCreationHandler.cs | 2 +- NewHorizons/Utility/Delay.cs | 11 +++++++++++ 19 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 NewHorizons/Utility/Delay.cs diff --git a/NewHorizons/Builder/Body/CloakBuilder.cs b/NewHorizons/Builder/Body/CloakBuilder.cs index 239c1809..57c4056e 100644 --- a/NewHorizons/Builder/Body/CloakBuilder.cs +++ b/NewHorizons/Builder/Body/CloakBuilder.cs @@ -44,9 +44,9 @@ namespace NewHorizons.Builder.Body cloakSectorController.EnableCloak(); // To cloak from the start - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(cloakSectorController.OnPlayerExit); - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(hasCustomAudio ? cloakSectorController.TurnOnMusic : cloakSectorController.TurnOffMusic); - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(keepReferenceFrame ? cloakSectorController.EnableReferenceFrameVolume : cloakSectorController.DisableReferenceFrameVolume); + Delay.FireOnNextUpdate(cloakSectorController.OnPlayerExit); + Delay.FireOnNextUpdate(hasCustomAudio ? cloakSectorController.TurnOnMusic : cloakSectorController.TurnOffMusic); + Delay.FireOnNextUpdate(keepReferenceFrame ? cloakSectorController.EnableReferenceFrameVolume : cloakSectorController.DisableReferenceFrameVolume); } } } diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index eea69694..77cdc3ab 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -159,7 +159,7 @@ namespace NewHorizons.Builder.Body funnelSizeController.anchor = planetGO.transform; // Finish up next tick - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => PostMake(funnelGO, funnelSizeController, module)); + Delay.FireOnNextUpdate(() => PostMake(funnelGO, funnelSizeController, module)); } private static void PostMake(GameObject funnelGO, FunnelController funnelSizeController, FunnelModule module) diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index 0ddc00d5..5cbc5d70 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -55,7 +55,7 @@ namespace NewHorizons.Builder.Body OLC._ambientLight = GDOLC._ambientLight; // this needs to be set or else is black // trigger sector enter - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + Delay.FireOnNextUpdate(() => { OEC._active = true; OEC.enabled = true; diff --git a/NewHorizons/Builder/General/AstroObjectBuilder.cs b/NewHorizons/Builder/General/AstroObjectBuilder.cs index 543a3e4d..667ff4bd 100644 --- a/NewHorizons/Builder/General/AstroObjectBuilder.cs +++ b/NewHorizons/Builder/General/AstroObjectBuilder.cs @@ -1,5 +1,6 @@ using NewHorizons.Components.Orbital; using NewHorizons.External.Configs; +using NewHorizons.Utility; using UnityEngine; using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Builder.General @@ -51,7 +52,7 @@ namespace NewHorizons.Builder.General { Logger.Log($"Setting center of universe to {config.name}"); - Main.Instance.ModHelper.Events.Unity.RunWhen( + Delay.RunWhen( () => Locator._centerOfTheUniverse != null, () => Locator._centerOfTheUniverse._staticReferenceFrame = astroObject.GetComponent() ); diff --git a/NewHorizons/Builder/General/SpawnPointBuilder.cs b/NewHorizons/Builder/General/SpawnPointBuilder.cs index 0311374f..f094a57a 100644 --- a/NewHorizons/Builder/General/SpawnPointBuilder.cs +++ b/NewHorizons/Builder/General/SpawnPointBuilder.cs @@ -78,7 +78,7 @@ namespace NewHorizons.Builder.General if ((Main.Instance.IsWarpingFromVessel || (!Main.Instance.IsWarpingFromShip && module.startWithSuit)) && !suitUpQueued) { suitUpQueued = true; - Main.Instance.ModHelper.Events.Unity.RunWhen(() => Main.IsSystemReady, () => SuitUp()); + Delay.RunWhen(() => Main.IsSystemReady, () => SuitUp()); } Logger.Log($"Made spawnpoint on [{planetGO.name}]"); diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index 651eef5d..198310d2 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -78,7 +78,7 @@ namespace NewHorizons.Builder.Orbital orbitLine._numVerts = (int)Mathf.Clamp(config.Orbit.semiMajorAxis / 1000f, numVerts, 4096); - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(orbitLine.InitializeLineRenderer); + Delay.FireOnNextUpdate(orbitLine.InitializeLineRenderer); return orbitLine; } diff --git a/NewHorizons/Builder/Props/DetailBuilder.cs b/NewHorizons/Builder/Props/DetailBuilder.cs index bcd19447..49a7d0b2 100644 --- a/NewHorizons/Builder/Props/DetailBuilder.cs +++ b/NewHorizons/Builder/Props/DetailBuilder.cs @@ -125,7 +125,7 @@ namespace NewHorizons.Builder.Props // Enable all children or something // BUG doesnt work because enabled is a property, not a field var enabledField = component?.GetType()?.GetField("enabled"); - if (enabledField != null && enabledField.FieldType == typeof(bool)) Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => enabledField.SetValue(component, true)); + if (enabledField != null && enabledField.FieldType == typeof(bool)) Events.FireOnNextUpdate(() => enabledField.SetValue(component, true)); */ // Fix a bunch of sector stuff @@ -167,7 +167,7 @@ namespace NewHorizons.Builder.Props var sectorField = component?.GetType()?.GetField("_sector"); if (sectorField != null && sectorField.FieldType == typeof(Sector)) { - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => sectorField.SetValue(component, sector)); + Events.FireOnNextUpdate(() => sectorField.SetValue(component, sector)); } } */ @@ -227,7 +227,7 @@ namespace NewHorizons.Builder.Props } // Fix a bunch of stuff when done loading - Main.Instance.ModHelper.Events.Unity.RunWhen(() => Main.IsSystemReady, () => + Delay.RunWhen(() => Main.IsSystemReady, () => { try { diff --git a/NewHorizons/Builder/Props/GeyserBuilder.cs b/NewHorizons/Builder/Props/GeyserBuilder.cs index 6cb77acb..54e478a4 100644 --- a/NewHorizons/Builder/Props/GeyserBuilder.cs +++ b/NewHorizons/Builder/Props/GeyserBuilder.cs @@ -32,7 +32,7 @@ namespace NewHorizons.Builder.Props var geyserFluidVolume = geyserGO.GetComponentInChildren(); // Do this after awake - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => geyserFluidVolume._maxHeight = 1); + Delay.FireOnNextUpdate(() => geyserFluidVolume._maxHeight = 1); geyserFluidVolume.enabled = true; geyserGO.transform.Find("FluidVolume_Geyser").GetComponent().enabled = true; diff --git a/NewHorizons/Builder/Props/NomaiTextBuilder.cs b/NewHorizons/Builder/Props/NomaiTextBuilder.cs index bac6a75b..435e13fa 100644 --- a/NewHorizons/Builder/Props/NomaiTextBuilder.cs +++ b/NewHorizons/Builder/Props/NomaiTextBuilder.cs @@ -165,7 +165,7 @@ namespace NewHorizons.Builder.Props customScroll.SetActive(true); // Enable the collider and renderer - Main.Instance.ModHelper.Events.Unity.RunWhen( + Delay.RunWhen( () => Main.IsSystemReady, () => { diff --git a/NewHorizons/Builder/Props/ScatterBuilder.cs b/NewHorizons/Builder/Props/ScatterBuilder.cs index 89307795..d330d404 100644 --- a/NewHorizons/Builder/Props/ScatterBuilder.cs +++ b/NewHorizons/Builder/Props/ScatterBuilder.cs @@ -29,7 +29,7 @@ namespace NewHorizons.Builder.Props { heightMapTexture = ImageUtilities.GetTexture(mod, heightMap.heightMap); // defer remove texture to next frame - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Object.Destroy(heightMapTexture)); + Delay.FireOnNextUpdate(() => Object.Destroy(heightMapTexture)); } catch (Exception) { } if (heightMapTexture == null) diff --git a/NewHorizons/Builder/Props/TornadoBuilder.cs b/NewHorizons/Builder/Props/TornadoBuilder.cs index f7056ed8..49b2f43a 100644 --- a/NewHorizons/Builder/Props/TornadoBuilder.cs +++ b/NewHorizons/Builder/Props/TornadoBuilder.cs @@ -118,7 +118,7 @@ namespace NewHorizons.Builder.Props // Resize the distance it can be heard from to match roughly with the size var maxDistance = info.audioDistance; if (maxDistance <= 0) maxDistance = scale * 10f; - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + Delay.FireOnNextUpdate(() => { audioSource.maxDistance = maxDistance; audioSource.minDistance = maxDistance / 10f; diff --git a/NewHorizons/Builder/Props/VolcanoBuilder.cs b/NewHorizons/Builder/Props/VolcanoBuilder.cs index 48f5fa99..54cf68e0 100644 --- a/NewHorizons/Builder/Props/VolcanoBuilder.cs +++ b/NewHorizons/Builder/Props/VolcanoBuilder.cs @@ -37,7 +37,7 @@ namespace NewHorizons.Builder.Props launcherGO.SetActive(true); // Have to null check else it breaks on reload configs - Main.Instance.ModHelper.Events.Unity.RunWhen(() => Main.IsSystemReady && meteorLauncher._meteorPool != null, () => + Delay.RunWhen(() => Main.IsSystemReady && meteorLauncher._meteorPool != null, () => { foreach (var meteor in meteorLauncher._meteorPool) { diff --git a/NewHorizons/Components/ShipLogStarChartMode.cs b/NewHorizons/Components/ShipLogStarChartMode.cs index 83035ab7..2496bc01 100644 --- a/NewHorizons/Components/ShipLogStarChartMode.cs +++ b/NewHorizons/Components/ShipLogStarChartMode.cs @@ -114,7 +114,7 @@ namespace NewHorizons.Components if (name.Length > 17) textComponent.fontSize = 10; // Do it next frame var fontPath = "Ship_Body/Module_Cabin/Systems_Cabin/ShipLogPivot/ShipLog/ShipLogPivot/ShipLogCanvas/DetectiveMode/ScaleRoot/PanRoot/TH_VILLAGE/EntryCardRoot/NameBackground/Name"; - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => textComponent.font = SearchUtilities.Find(fontPath).GetComponent().font); + Delay.FireOnNextUpdate(() => textComponent.font = SearchUtilities.Find(fontPath).GetComponent().font); newCard.SetActive(true); newCard.transform.name = uniqueID; diff --git a/NewHorizons/Components/ShipWarpController.cs b/NewHorizons/Components/ShipWarpController.cs index e34f9626..9a9f1aad 100644 --- a/NewHorizons/Components/ShipWarpController.cs +++ b/NewHorizons/Components/ShipWarpController.cs @@ -121,7 +121,7 @@ namespace NewHorizons.Components { if (_isWarpingIn && LateInitializerManager.isDoneInitializing) { - Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => StartWarpInEffect(), 1); + Delay.FireInNUpdates(() => StartWarpInEffect(), 1); _isWarpingIn = false; } @@ -139,7 +139,7 @@ namespace NewHorizons.Components // Idk whats making this work but now it works and idc if (_waitingToBeSeated && PlayerState.IsInsideShip() && _eyesOpen) { - Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => FinishWarpIn(), 1); + Delay.FireInNUpdates(() => FinishWarpIn(), 1); _waitingToBeSeated = false; } } @@ -174,7 +174,7 @@ namespace NewHorizons.Components Logger.LogVerbose("Finishing warp"); Locator.GetShipBody().GetComponentInChildren().OnPressInteract(); _waitingToBeSeated = false; - Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => _whitehole.Collapse(), 30); + Delay.FireInNUpdates(() => _whitehole.Collapse(), 30); var resources = Locator.GetPlayerTransform().GetComponent(); diff --git a/NewHorizons/Handlers/AudioTypeHandler.cs b/NewHorizons/Handlers/AudioTypeHandler.cs index 8d22b764..e3f3a66c 100644 --- a/NewHorizons/Handlers/AudioTypeHandler.cs +++ b/NewHorizons/Handlers/AudioTypeHandler.cs @@ -19,7 +19,7 @@ namespace NewHorizons.Handlers _customAudioTypes = new Dictionary(); _audioEntries = new List(); - Main.Instance.ModHelper.Events.Unity.RunWhen( + Delay.RunWhen( () => Locator.GetAudioManager()?._libraryAsset != null, PostInit ); diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 00f5ced8..c2e07553 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -138,7 +138,7 @@ namespace NewHorizons.Handlers Logger.Log("Done loading bodies"); - // Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(PlanetDestroyer.RemoveAllProxies); + // Events.FireOnNextUpdate(PlanetDestroyer.RemoveAllProxies); if (Main.SystemDict[Main.Instance.CurrentStarSystem].Config.destroyStockPlanets) PlanetDestructionHandler.RemoveSolarSystem(); } @@ -164,8 +164,8 @@ namespace NewHorizons.Handlers if (body.Config.destroy) { var ao = existingPlanet.GetComponent(); - if (ao != null) Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => PlanetDestructionHandler.RemoveBody(ao), 2); - else Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => existingPlanet.SetActive(false), 2); + if (ao != null) Delay.FireInNUpdates(() => PlanetDestructionHandler.RemoveBody(ao), 2); + else Delay.FireInNUpdates(() => existingPlanet.SetActive(false), 2); } else if (body.Config.isQuantumState) { @@ -279,7 +279,7 @@ namespace NewHorizons.Handlers { // We purposefully use GameObject.Find here because we don't want to find inactive things. // If you were to try and disable two children with the same name, if we were finding inactive then we'd disable the first one twice - Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => GameObject.Find(go.name + "/" + child)?.SetActive(false), 2); + Delay.FireInNUpdates(() => GameObject.Find(go.name + "/" + child)?.SetActive(false), 2); } } @@ -417,7 +417,7 @@ namespace NewHorizons.Handlers if (body.Config.Orbit.showOrbitLine && !body.Config.Orbit.isStatic) { - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => OrbitlineBuilder.Make(body.Object, ao as NHAstroObject, body.Config.Orbit.isMoon, body.Config)); + Delay.FireOnNextUpdate(() => OrbitlineBuilder.Make(body.Object, ao as NHAstroObject, body.Config.Orbit.isMoon, body.Config)); } if (!body.Config.Orbit.isStatic) @@ -429,7 +429,7 @@ namespace NewHorizons.Handlers if (!(body.Config.Cloak != null && body.Config.Cloak.radius != 0f)) { - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + Delay.FireOnNextUpdate(() => { ProxyBuilder.Make(go, body); }); diff --git a/NewHorizons/Handlers/PlanetDestructionHandler.cs b/NewHorizons/Handlers/PlanetDestructionHandler.cs index 7b74d1f5..68d45537 100644 --- a/NewHorizons/Handlers/PlanetDestructionHandler.cs +++ b/NewHorizons/Handlers/PlanetDestructionHandler.cs @@ -54,12 +54,12 @@ namespace NewHorizons.Handlers foreach (var name in _solarSystemBodies) { var ao = AstroObjectLocator.GetAstroObject(name); - if (ao != null) Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => RemoveBody(ao, false), 2); + if (ao != null) Delay.FireInNUpdates(() => RemoveBody(ao, false), 2); else Logger.LogError($"Couldn't find [{name}]"); } // Bring the sun back because why not - Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => { if (Locator.GetAstroObject(AstroObject.Name.Sun).gameObject.activeInHierarchy) { sunVolumes.SetActive(true); } }, 3); + Delay.FireInNUpdates(() => { if (Locator.GetAstroObject(AstroObject.Name.Sun).gameObject.activeInHierarchy) { sunVolumes.SetActive(true); } }, 3); } public static void RemoveBody(AstroObject ao, bool delete = false, List toDestroy = null) @@ -198,7 +198,7 @@ namespace NewHorizons.Handlers } RemoveProxy(ao.name.Replace("_Body", "")); - Main.Instance.ModHelper.Events.Unity.RunWhen(() => Main.IsSystemReady, () => DisableBody(ao.gameObject, delete)); + Delay.RunWhen(() => Main.IsSystemReady, () => DisableBody(ao.gameObject, delete)); foreach (ProxyBody proxy in GameObject.FindObjectsOfType()) { diff --git a/NewHorizons/Handlers/SystemCreationHandler.cs b/NewHorizons/Handlers/SystemCreationHandler.cs index 39b009c2..545c0cde 100644 --- a/NewHorizons/Handlers/SystemCreationHandler.cs +++ b/NewHorizons/Handlers/SystemCreationHandler.cs @@ -30,7 +30,7 @@ namespace NewHorizons.Handlers if (!string.IsNullOrEmpty(system.Config.travelAudio)) { - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => AudioUtilities.SetAudioClip(Locator.GetGlobalMusicController()._travelSource, system.Config.travelAudio, system.Mod)); + Delay.FireOnNextUpdate(() => AudioUtilities.SetAudioClip(Locator.GetGlobalMusicController()._travelSource, system.Config.travelAudio, system.Mod)); } } } diff --git a/NewHorizons/Utility/Delay.cs b/NewHorizons/Utility/Delay.cs new file mode 100644 index 00000000..84bff778 --- /dev/null +++ b/NewHorizons/Utility/Delay.cs @@ -0,0 +1,11 @@ +using System; + +namespace NewHorizons.Utility +{ + public static class Delay + { + public static void RunWhen(Func predicate, Action action) => Main.Instance.ModHelper.Events.Unity.RunWhen(predicate, action); + public static void FireInNUpdates(Action action, int n) => Main.Instance.ModHelper.Events.Unity.FireInNUpdates(action, n); + public static void FireOnNextUpdate(Action action) => Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(action); + } +}