using NewHorizons.External; using OWML.Utils; using UnityEngine; using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Builder.Body { static class WaterBuilder { public static void Make(GameObject body, Sector sector, OWRigidbody rb, float waterSize) { GameObject waterGO = new GameObject("Water"); waterGO.SetActive(false); waterGO.layer = 15; waterGO.transform.parent = body.transform; waterGO.transform.localScale = new Vector3(waterSize, waterSize, waterSize); waterGO.DestroyAllComponents(); var GDTSR = GameObject.Find("Ocean_GD").GetComponent(); TessellatedSphereRenderer TSR = waterGO.AddComponent(); TSR.tessellationMeshGroup = GDTSR.tessellationMeshGroup; var GDSharedMaterials = GameObject.Find("Ocean_GD").GetComponent()._lowAltitudeMaterials; var tempArray = new Material[GDSharedMaterials.Length]; for(int i = 0; i < GDSharedMaterials.Length; i++) { tempArray[i] = new Material(GDSharedMaterials[i]); } // TODO: Make water module //tempArray[1].color = Color.red; TSR.sharedMaterials = tempArray; TSR.maxLOD = GDTSR.maxLOD; TSR.LODBias = GDTSR.LODBias; TSR.LODRadius = GDTSR.LODRadius; OceanEffectController OEC = waterGO.AddComponent(); OEC.SetValue("_sector", sector); OEC.SetValue("_ocean", TSR); //Buoyancy var buoyancyObject = new GameObject("WaterVolume"); buoyancyObject.transform.parent = waterGO.transform; buoyancyObject.transform.localScale = Vector3.one; buoyancyObject.layer = LayerMask.NameToLayer("BasicEffectVolume"); var sphereCollider = buoyancyObject.AddComponent(); sphereCollider.radius = 1; sphereCollider.isTrigger = true; var owCollider = buoyancyObject.AddComponent(); owCollider.SetValue("_parentBody", rb); owCollider.SetValue("_collider", sphereCollider); var buoyancyTriggerVolume = buoyancyObject.AddComponent(); buoyancyTriggerVolume.SetValue("_owCollider", owCollider); var fluidVolume = buoyancyObject.AddComponent(); fluidVolume.SetValue("_fluidType", FluidVolume.Type.WATER); fluidVolume.SetValue("_attachedBody", rb); fluidVolume.SetValue("_triggerVolume", buoyancyTriggerVolume); fluidVolume.SetValue("_radius", waterSize); fluidVolume.SetValue("_layer", LayerMask.NameToLayer("BassicEffectVolume")); // Because assetbundles were a bitch... GameObject fog1 = new GameObject(); fog1.transform.parent = waterGO.transform; fog1.transform.localScale = new Vector3(1, 1, 1); fog1.AddComponent().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent().mesh; fog1.AddComponent().material = new Material(Shader.Find("Sprites/Default")); fog1.GetComponent().material.color = new Color32(0, 75, 50, 5); GameObject fog2 = new GameObject(); fog2.transform.parent = waterGO.transform; fog2.transform.localScale = new Vector3(1.001f, 1.001f, 1.001f); fog2.AddComponent().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent().mesh; fog2.AddComponent().material = new Material(Shader.Find("Sprites/Default")); fog2.GetComponent().material.color = new Color32(0, 75, 50, 5); GameObject fog3 = new GameObject(); fog3.transform.parent = fog2.transform; fog3.transform.localScale = new Vector3(1.001f, 1.001f, 1.001f); fog3.AddComponent().mesh = GameObject.Find("CloudsTopLayer_GD").GetComponent().mesh; fog3.AddComponent().material = new Material(Shader.Find("Sprites/Default")); fog3.GetComponent().material.color = new Color32(0, 75, 50, 5); waterGO.transform.localPosition = Vector3.zero; waterGO.SetActive(true); } } }