using NewHorizons.External; using NewHorizons.Utility; using OWML.Utils; using UnityEngine; using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Builder.Atmosphere { public static class EffectsBuilder { public static void Make(GameObject planetGO, Sector sector, AtmosphereModule.AirInfo info, float surfaceSize) { GameObject effectsGO = new GameObject("Effects"); effectsGO.SetActive(false); effectsGO.transform.parent = sector?.transform ?? planetGO.transform; effectsGO.transform.position = planetGO.transform.position; SectorCullGroup SCG = effectsGO.AddComponent(); SCG._sector = sector; SCG._particleSystemSuspendMode = CullGroup.ParticleSystemSuspendMode.Stop; SCG._occlusionCulling = false; SCG._dynamicCullingBounds = false; SCG._waitForStreaming = false; if(info.IsRaining) { var rainGO = GameObject.Instantiate(SearchUtilities.CachedFind("/GiantsDeep_Body/Sector_GD/Sector_GDInterior/Effects_GDInterior/Effects_GD_Rain"), effectsGO.transform); rainGO.transform.position = planetGO.transform.position; var pvc = rainGO.GetComponent(); pvc._densityByHeight = new AnimationCurve(new Keyframe[] { new Keyframe(surfaceSize - 0.5f, 0), new Keyframe(surfaceSize, 10f), new Keyframe(info.Scale, 0f) }); rainGO.GetComponent()._activeInSector = sector; rainGO.GetComponent()._exclusionSectors = new Sector[] { }; rainGO.SetActive(true); } if(info.IsSnowing) { var snowGO = new GameObject("SnowEffects"); snowGO.transform.parent = effectsGO.transform; snowGO.transform.position = planetGO.transform.position; for(int i = 0; i < 5; i++) { var snowEmitter = GameObject.Instantiate(SearchUtilities.CachedFind("/BrittleHollow_Body/Sector_BH/Effects_BH/Effects_BH_Snowflakes"), snowGO.transform); snowEmitter.name = "SnowEmitter"; snowEmitter.transform.position = planetGO.transform.position; var pvc = snowEmitter.GetComponent(); pvc._densityByHeight = new AnimationCurve(new Keyframe[] { new Keyframe(surfaceSize - 0.5f, 0), new Keyframe(surfaceSize, 10f), new Keyframe(info.Scale, 0f) }); snowEmitter.GetComponent()._activeInSector = sector; snowEmitter.GetComponent()._exclusionSectors = new Sector[] { }; snowEmitter.SetActive(true); } } effectsGO.transform.position = planetGO.transform.position; effectsGO.SetActive(true); } } }