using NewHorizons.External.VariableSize; using OWML.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Builder.Body { static class LavaBuilder { public static void Make(GameObject body, 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 = body.transform; moltenCore.transform.localPosition = Vector3.zero; 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); } } }