using System.Collections.Generic; using UnityEngine; using NewHorizons.External.Modules.VariableSize; namespace NewHorizons.Builder.Body { public static class LavaBuilder { public static void Make(GameObject planetGO, Sector sector, OWRigidbody rb, LavaModule module) { var heightScale = module.Size; if (module.Curve != null) { var modifier = 1f; foreach (var pair in module.Curve) { if (pair.Value < modifier) modifier = pair.Value; } heightScale = Mathf.Max(0.1f, heightScale * modifier); } var moltenCore = new GameObject("MoltenCore"); moltenCore.SetActive(false); moltenCore.transform.parent = sector?.transform ?? planetGO.transform; moltenCore.transform.position = planetGO.transform.position; moltenCore.transform.localScale = Vector3.one * module.Size; var lavaSphere = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/LavaSphere"), moltenCore.transform); lavaSphere.transform.localScale = Vector3.one; lavaSphere.transform.name = "LavaSphere"; lavaSphere.GetComponent().material.SetFloat("_HeightScale", heightScale); if (module.Tint != null) lavaSphere.GetComponent().material.SetColor("_EmissionColor", module.Tint.ToColor()); var sectorCullGroup = lavaSphere.GetComponent(); sectorCullGroup.SetSector(sector); var moltenCoreProxy = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/MoltenCore_Proxy"), moltenCore.transform); ; moltenCoreProxy.name = "MoltenCore_Proxy"; var proxyLavaSphere = moltenCoreProxy.transform.Find("LavaSphere (1)"); proxyLavaSphere.transform.localScale = Vector3.one; proxyLavaSphere.name = "LavaSphere_Proxy"; proxyLavaSphere.GetComponent().material.SetFloat("_HeightScale", heightScale); if (module.Tint != null) proxyLavaSphere.GetComponent().material.SetColor("_EmissionColor", module.Tint.ToColor()); var sectorProxy = moltenCoreProxy.GetComponent(); sectorProxy._renderers = new List { proxyLavaSphere.GetComponent() }; sectorProxy.SetSector(sector); var destructionVolume = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/DestructionVolume"), moltenCore.transform); destructionVolume.GetComponent().radius = 1; destructionVolume.SetActive(true); if (module.Curve != null) { var levelController = moltenCore.AddComponent(); var curve = new AnimationCurve(); foreach (var pair in module.Curve) { curve.AddKey(new Keyframe(pair.Time, module.Size * pair.Value)); } levelController._scaleCurve = curve; } moltenCore.SetActive(true); } } }