using OWML.ModHelper.Events; using UnityEngine; namespace Marshmallow.Atmosphere { static class MakeClouds { public static void Make(GameObject body, float topCloudScale, float bottomCloudScale, Color? cloudTint = null) { GameObject cloudsMain = new GameObject(); cloudsMain.SetActive(false); cloudsMain.transform.parent = body.transform; GameObject cloudsTop = new GameObject(); cloudsTop.SetActive(false); cloudsTop.transform.parent = cloudsMain.transform; cloudsTop.transform.localScale = new Vector3(topCloudScale / 2, topCloudScale / 2, topCloudScale / 2); MeshFilter MF = cloudsTop.AddComponent(); MF.mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent().mesh; MeshRenderer MR = cloudsTop.AddComponent(); MR.materials = GameObject.Find("CloudsTopLayer_GD").GetComponent().materials; foreach (var item in MR.materials) { item.SetColor("_Color", cloudTint.Value); } RotateTransform RT = cloudsTop.AddComponent(); RT.SetValue("_localAxis", Vector3.up); RT.SetValue("degreesPerSecond", 10); RT.SetValue("randomizeRotationRate", false); /* SectorCullGroup scg = cloudsTop.AddComponent(); scg.SetValue("_sector", MainClass.SECTOR); scg.SetValue("_occlusionCulling", true); scg.SetValue("_dynamicCullingBounds", false); scg.SetValue("_particleSystemSuspendMode", CullGroup.ParticleSystemSuspendMode.Pause); scg.SetValue("_waitForStreaming", false); */ GameObject cloudsBottom = new GameObject(); cloudsBottom.SetActive(false); cloudsBottom.transform.parent = cloudsMain.transform; cloudsBottom.transform.localScale = new Vector3(bottomCloudScale / 2, bottomCloudScale / 2, bottomCloudScale / 2); TessellatedSphereRenderer TSR = cloudsBottom.AddComponent(); TSR.tessellationMeshGroup = GameObject.Find("CloudsBottomLayer_GD").GetComponent().tessellationMeshGroup; TSR.sharedMaterials = GameObject.Find("CloudsBottomLayer_GD").GetComponent().sharedMaterials; foreach (var item in TSR.sharedMaterials) { item.SetColor("_Color", cloudTint.Value); } TSR.maxLOD = 6; TSR.LODBias = 0; TSR.LODRadius = 1f; TessSphereSectorToggle TSST = cloudsBottom.AddComponent(); TSST.SetValue("_sector", Main.SECTOR); GameObject cloudsFluid = new GameObject(); cloudsFluid.layer = 17; cloudsFluid.SetActive(false); cloudsFluid.transform.parent = cloudsMain.transform; SphereCollider cloudSC = cloudsFluid.AddComponent(); cloudSC.isTrigger = true; cloudSC.radius = topCloudScale / 2; OWShellCollider cloudShell = cloudsFluid.AddComponent(); cloudShell.SetValue("_innerRadius", bottomCloudScale); CloudLayerFluidVolume cloudLayer = cloudsFluid.AddComponent(); cloudLayer.SetValue("_layer", 5); cloudLayer.SetValue("_priority", 1); cloudLayer.SetValue("_density", 1.2f); cloudLayer.SetValue("_fluidType", FluidVolume.Type.CLOUD); cloudLayer.SetValue("_allowShipAutoroll", true); cloudLayer.SetValue("_disableOnStart", false); cloudsTop.SetActive(true); cloudsBottom.SetActive(true); cloudsFluid.SetActive(true); cloudsMain.SetActive(true); //Main.Log("Clouds - topCloudScale : " + topCloudScale + ", bottomCloudScale : " + bottomCloudScale + ", cloudTint : " + cloudTint); } } }