diff --git a/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs b/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs index 1553b50b..d543e136 100644 --- a/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs @@ -22,8 +22,14 @@ namespace NewHorizons.Builder.Atmosphere private static GameObject _atmospherePrefab; private static GameObject _proxyAtmospherePrefab; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_atmospherePrefab == null) _atmospherePrefab = SearchUtilities.Find("TimberHearth_Body/Atmosphere_TH/AtmoSphere").InstantiateInactive().Rename("Atmosphere").DontDestroyOnLoad(); if (_proxyAtmospherePrefab == null) _proxyAtmospherePrefab = GameObject.FindObjectOfType()._proxies.FirstOrDefault(apt => apt.astroName == AstroObject.Name.TimberHearth).proxyPrefab.FindChild("Atmosphere_TH/Atmosphere_LOD3").InstantiateInactive().Rename("ProxyAtmosphere").DontDestroyOnLoad(); } diff --git a/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs b/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs index da8f2f81..8085f03d 100644 --- a/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs @@ -27,8 +27,14 @@ namespace NewHorizons.Builder.Atmosphere private static readonly int CapTex = Shader.PropertyToID("_CapTex"); private static readonly int Smoothness = Shader.PropertyToID("_Glossiness"); + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_lightningPrefab == null) _lightningPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Clouds_GD/LightningGenerator_GD").InstantiateInactive().Rename("LightningGenerator").DontDestroyOnLoad(); if (_colorRamp == null) _colorRamp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/Clouds_Bottom_ramp.png"); if (_gdTopCloudMesh == null) _gdTopCloudMesh = SearchUtilities.Find("CloudsTopLayer_GD").GetComponent().mesh.DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Atmosphere/EffectsBuilder.cs b/NewHorizons/Builder/Atmosphere/EffectsBuilder.cs index f177dd57..c7312f0b 100644 --- a/NewHorizons/Builder/Atmosphere/EffectsBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/EffectsBuilder.cs @@ -9,8 +9,14 @@ namespace NewHorizons.Builder.Atmosphere private static GameObject _rainEmitterPrefab; private static GameObject _snowEmitterPrefab; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_rainEmitterPrefab == null) _rainEmitterPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Sector_GDInterior/Effects_GDInterior/Effects_GD_Rain").InstantiateInactive().Rename("Prefab_Effects_Rain").DontDestroyOnLoad(); if (_snowEmitterPrefab == null) _snowEmitterPrefab = SearchUtilities.Find("BrittleHollow_Body/Sector_BH/Effects_BH/Effects_BH_Snowflakes").InstantiateInactive().Rename("Prefab_Effects_Snowflakes").DontDestroyOnLoad(); } diff --git a/NewHorizons/Builder/Atmosphere/FogBuilder.cs b/NewHorizons/Builder/Atmosphere/FogBuilder.cs index 1dbb6fce..f91f1e27 100644 --- a/NewHorizons/Builder/Atmosphere/FogBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/FogBuilder.cs @@ -18,8 +18,14 @@ namespace NewHorizons.Builder.Atmosphere private static Mesh _dbImpostorMesh; private static Material[] _dbImpostorMaterials; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_ramp == null) _ramp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/FogColorRamp.png"); // Going to copy from dark bramble diff --git a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs index aae39106..b6ca8df8 100644 --- a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs @@ -10,8 +10,14 @@ namespace NewHorizons.Builder.Atmosphere private static Material _gdMaterial; private static Material _gdCloudMaterial; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_gdMaterial == null) _gdMaterial = new Material(SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Volumes_GD/RulesetVolumes_GD").GetComponent()._material).DontDestroyOnLoad(); if (_gdCloudMaterial == null) _gdCloudMaterial = new Material(SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Volumes_GD/RulesetVolumes_GD").GetComponent()._cloudMaterial).DontDestroyOnLoad(); } diff --git a/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs b/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs index babc53aa..22f0c2ef 100644 --- a/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs +++ b/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs @@ -55,8 +55,14 @@ namespace NewHorizons.Builder.Body private static GameObject _repelVolume; private static Material _material; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_atmosphere == null) _atmosphere = SearchUtilities.Find("DB_HubDimension_Body/Sector_HubDimension/Atmosphere_HubDimension").InstantiateInactive().Rename("Prefab_Bramble_Atmosphere").DontDestroyOnLoad(); if (_volumes == null) _volumes = SearchUtilities.Find("DB_HubDimension_Body/Sector_HubDimension/Volumes_HubDimension").InstantiateInactive().Rename("Prefab_Bramble_Volumes").DontDestroyOnLoad(); if (_effects == null) _effects = SearchUtilities.Find("DB_HubDimension_Body/Sector_HubDimension/Effects_HubDimension").InstantiateInactive().Rename("Prefab_Bramble_Effects").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index dd96ac56..c3969e90 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -19,8 +19,14 @@ namespace NewHorizons.Builder.Body private static Material[] _waterMaterials; private static Material _lavaMaterial; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_proxySandFunnel == null) _proxySandFunnel = SearchUtilities.Find("SandFunnel_Body/ScaleRoot/Proxy_SandFunnel").InstantiateInactive().Rename("Prefab_Funnel_Proxy").DontDestroyOnLoad(); if (_geoSandFunnel == null) _geoSandFunnel = SearchUtilities.Find("SandFunnel_Body/ScaleRoot/Geo_SandFunnel").InstantiateInactive().Rename("Prefab_Funnel_Geo").DontDestroyOnLoad(); if (_volumesSandFunnel == null) _volumesSandFunnel = SearchUtilities.Find("SandFunnel_Body/ScaleRoot/Volumes_SandFunnel").InstantiateInactive().Rename("Prefab_Funnel_Volumes").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/LavaBuilder.cs b/NewHorizons/Builder/Body/LavaBuilder.cs index 7a6628b2..2f520151 100644 --- a/NewHorizons/Builder/Body/LavaBuilder.cs +++ b/NewHorizons/Builder/Body/LavaBuilder.cs @@ -14,8 +14,14 @@ namespace NewHorizons.Builder.Body private static GameObject _moltenCoreProxy; private static GameObject _destructionVolume; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_lavaSphere == null) _lavaSphere = SearchUtilities.Find("VolcanicMoon_Body/MoltenCore_VM/LavaSphere").InstantiateInactive().Rename("Prefab_VM_LavaSphere").DontDestroyOnLoad(); if (_moltenCoreProxy == null) _moltenCoreProxy = SearchUtilities.Find("VolcanicMoon_Body/MoltenCore_VM/MoltenCore_Proxy").InstantiateInactive().Rename("Prefab_VM_MoltenCore_Proxy").DontDestroyOnLoad(); if (_destructionVolume == null) _destructionVolume = SearchUtilities.Find("VolcanicMoon_Body/MoltenCore_VM/DestructionVolume").InstantiateInactive().Rename("Prefab_VM_DestructionVolume").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/SandBuilder.cs b/NewHorizons/Builder/Body/SandBuilder.cs index ebd3fb70..f18d7494 100644 --- a/NewHorizons/Builder/Body/SandBuilder.cs +++ b/NewHorizons/Builder/Body/SandBuilder.cs @@ -11,8 +11,14 @@ namespace NewHorizons.Builder.Body private static GameObject _sandOcclusion; private static GameObject _sandProxyShadowCaster; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_sandSphere == null) _sandSphere = SearchUtilities.Find("TowerTwin_Body/SandSphere_Draining/SandSphere").InstantiateInactive().Rename("Prefab_TT_SandSphere").DontDestroyOnLoad(); if (_sandCollider == null) _sandCollider = SearchUtilities.Find("TowerTwin_Body/SandSphere_Draining/Collider").InstantiateInactive().Rename("Prefab_TT_SandCollider").DontDestroyOnLoad(); if (_sandOcclusion == null) _sandOcclusion = SearchUtilities.Find("TowerTwin_Body/SandSphere_Draining/OcclusionSphere").InstantiateInactive().Rename("Prefab_TT_SandOcclusion").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/SingularityBuilder.cs b/NewHorizons/Builder/Body/SingularityBuilder.cs index fe135a1f..9047e2c2 100644 --- a/NewHorizons/Builder/Body/SingularityBuilder.cs +++ b/NewHorizons/Builder/Body/SingularityBuilder.cs @@ -41,8 +41,14 @@ namespace NewHorizons.Builder.Body private static GameObject _whiteHoleRulesetVolume; private static GameObject _whiteHoleVolume; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_blackHoleProxyPrefab == null) _blackHoleProxyPrefab = SearchUtilities.Find(_blackHoleProxyPath).InstantiateInactive().Rename("BlackHoleSingularity").DontDestroyOnLoad(); if (_whiteHoleProxyPrefab == null) _whiteHoleProxyPrefab = SearchUtilities.Find(_whiteHoleProxyPath).InstantiateInactive().Rename("WhiteHoleSingularity").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index d32dba2f..df584d73 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -34,8 +34,14 @@ namespace NewHorizons.Builder.Body private static Material _mainSequenceMaterial; private static Material _giantMaterial; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_colorOverTime == null) _colorOverTime = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/StarColorOverTime.png"); if (_starAudio == null) _starAudio = SearchUtilities.Find("Sun_Body/Sector_SUN/Audio_SUN").InstantiateInactive().Rename("Prefab_Audio_Star").DontDestroyOnLoad(); if (_starAtmosphere == null) _starAtmosphere = SearchUtilities.Find("Sun_Body/Atmosphere_SUN").InstantiateInactive().Rename("Prefab_Atmosphere_Star").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Body/SupernovaEffectBuilder.cs b/NewHorizons/Builder/Body/SupernovaEffectBuilder.cs index af237a23..189d9432 100644 --- a/NewHorizons/Builder/Body/SupernovaEffectBuilder.cs +++ b/NewHorizons/Builder/Body/SupernovaEffectBuilder.cs @@ -13,8 +13,14 @@ namespace NewHorizons.Builder.Body private static Mesh _shockLayerMesh; private static Material _shockLayerMaterial; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_shockLayerMesh == null) _shockLayerMesh = SearchUtilities.Find("GiantsDeep_Body/Shocklayer_GD").GetComponent().sharedMesh.DontDestroyOnLoad(); if (_shockLayerMaterial == null) _shockLayerMaterial = new Material(SearchUtilities.Find("GiantsDeep_Body/Shocklayer_GD").GetComponent().sharedMaterial).Rename("ShockLayer_mat").DontDestroyOnLoad(); } diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index a004b763..8d8573b6 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -14,8 +14,14 @@ namespace NewHorizons.Builder.Body private static GameObject _oceanFog; private static GameObject _oceanAmbientLight; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_oceanMeshGroup == null) { _oceanMeshGroup = ScriptableObject.CreateInstance().Rename("Ocean").DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/General/DetectorBuilder.cs b/NewHorizons/Builder/General/DetectorBuilder.cs index bdca0f17..fff255b5 100644 --- a/NewHorizons/Builder/General/DetectorBuilder.cs +++ b/NewHorizons/Builder/General/DetectorBuilder.cs @@ -10,8 +10,14 @@ namespace NewHorizons.Builder.General { private static List _splashEffects; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_splashEffects == null) { _splashEffects = new List(); diff --git a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs index b73c6e6f..83a657e8 100644 --- a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs +++ b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs @@ -41,8 +41,14 @@ namespace NewHorizons.Builder.Props PropagateSignals(dimensionConfigs); } + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_brambleSeedPrefab == null) _brambleSeedPrefab = SearchUtilities.Find("DB_PioneerDimension_Body/Sector_PioneerDimension/Interactables_PioneerDimension/SeedWarp_ToPioneer (1)").InstantiateInactive().Rename("Prefab_DB_Seed").DontDestroyOnLoad(); if (_brambleNodePrefab == null) _brambleNodePrefab = SearchUtilities.Find("DB_HubDimension_Body/Sector_HubDimension/Interactables_HubDimension/InnerWarp_ToCluster").InstantiateInactive().Rename("Prefab_DB_Node").DontDestroyOnLoad(); } diff --git a/NewHorizons/Builder/Props/NomaiTextBuilder.cs b/NewHorizons/Builder/Props/NomaiTextBuilder.cs index f7ff7099..4c916571 100644 --- a/NewHorizons/Builder/Props/NomaiTextBuilder.cs +++ b/NewHorizons/Builder/Props/NomaiTextBuilder.cs @@ -45,8 +45,14 @@ namespace NewHorizons.Builder.Props public static List GetChildArcPrefabs() { return _childArcPrefabs; } public static List GetGhostArcPrefabs() { return _ghostArcPrefabs; } + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + // Just take every scroll and get the first arc if (_arcPrefabs == null || _childArcPrefabs == null) { diff --git a/NewHorizons/Builder/Props/ProjectionBuilder.cs b/NewHorizons/Builder/Props/ProjectionBuilder.cs index cf699d7e..f8d49b3a 100644 --- a/NewHorizons/Builder/Props/ProjectionBuilder.cs +++ b/NewHorizons/Builder/Props/ProjectionBuilder.cs @@ -20,8 +20,14 @@ namespace NewHorizons.Builder.Props private static GameObject _standingVisionTorchPrefab; private static readonly int EmissionMap = Shader.PropertyToID("_EmissionMap"); + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_slideReelPrefab == null) { _slideReelPrefab = SearchUtilities.Find("RingWorld_Body/Sector_RingInterior/Sector_Zone1/Sector_SlideBurningRoom_Zone1/Interactables_SlideBurningRoom_Zone1/Prefab_IP_SecretAlcove/RotationPivot/SlideReelSocket/Prefab_IP_Reel_1_LibraryPath")?.gameObject?.InstantiateInactive()?.Rename("Prefab_IP_Reel")?.DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Props/RemoteBuilder.cs b/NewHorizons/Builder/Props/RemoteBuilder.cs index 51e04bb0..2d90e8f5 100644 --- a/NewHorizons/Builder/Props/RemoteBuilder.cs +++ b/NewHorizons/Builder/Props/RemoteBuilder.cs @@ -17,8 +17,14 @@ namespace NewHorizons.Builder.Props private static GameObject _whiteboardPrefab; private static GameObject _shareStonePrefab; + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_decalMaterial == null) { _decalMaterial = new Material(Shader.Find("Standard (Decal)")).DontDestroyOnLoad(); diff --git a/NewHorizons/Builder/Props/TornadoBuilder.cs b/NewHorizons/Builder/Props/TornadoBuilder.cs index f0501827..023623c4 100644 --- a/NewHorizons/Builder/Props/TornadoBuilder.cs +++ b/NewHorizons/Builder/Props/TornadoBuilder.cs @@ -23,8 +23,14 @@ namespace NewHorizons.Builder.Props private static readonly int MainTex = Shader.PropertyToID("_MainTex"); private static readonly int FresnelColor = Shader.PropertyToID("_FresnelColor"); + private static bool _isInit; + internal static void InitPrefabs() { + if (_isInit) return; + + _isInit = true; + if (_upPrefab == null) { _upPrefab = SearchUtilities.Find("BrittleHollow_Body/Sector_BH/Sector_SouthHemisphere/Sector_SouthPole/Sector_Observatory/Interactables_Observatory/MockUpTornado").InstantiateInactive().Rename("Tornado_Up_Prefab").DontDestroyOnLoad();