From 41fcd8f90995bd9da32d5243f841f7cc96b18e2b Mon Sep 17 00:00:00 2001 From: "Nick J. Connors" Date: Mon, 10 Jan 2022 02:16:31 -0500 Subject: [PATCH] Scale curve done for lava/sand/water/star/rings --- NewHorizons/Builder/Body/LavaBuilder.cs | 17 +++++-- NewHorizons/Builder/Body/RingBuilder.cs | 36 ++++++++++++++ NewHorizons/Builder/Body/SandBuilder.cs | 48 +++++++++++++++++++ NewHorizons/Builder/Body/StarBuilder.cs | 11 +++++ NewHorizons/Builder/Body/WaterBuilder.cs | 14 +++++- NewHorizons/Components/RingSizeController.cs | 20 ++++++++ .../External/VariableSize/LavaModule.cs | 2 +- .../External/VariableSize/SandModule.cs | 2 +- .../External/VariableSize/WaterModule.cs | 2 +- NewHorizons/Main.cs | 4 +- NewHorizons/schema.json | 35 ++++++++++++-- 11 files changed, 178 insertions(+), 13 deletions(-) create mode 100644 NewHorizons/Components/RingSizeController.cs diff --git a/NewHorizons/Builder/Body/LavaBuilder.cs b/NewHorizons/Builder/Body/LavaBuilder.cs index 9673d9c3..7ecd13df 100644 --- a/NewHorizons/Builder/Body/LavaBuilder.cs +++ b/NewHorizons/Builder/Body/LavaBuilder.cs @@ -18,7 +18,7 @@ namespace NewHorizons.Builder.Body moltenCore.SetActive(false); moltenCore.transform.parent = body.transform; moltenCore.transform.localPosition = Vector3.zero; - moltenCore.transform.localScale = Vector3.one * module.Radius; + 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; @@ -38,9 +38,20 @@ namespace NewHorizons.Builder.Body var destructionVolume = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/DestructionVolume"), moltenCore.transform); destructionVolume.GetComponent().radius = 1; - - moltenCore.SetActive(true); 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); } } } diff --git a/NewHorizons/Builder/Body/RingBuilder.cs b/NewHorizons/Builder/Body/RingBuilder.cs index 101c3d00..cae209b0 100644 --- a/NewHorizons/Builder/Body/RingBuilder.cs +++ b/NewHorizons/Builder/Body/RingBuilder.cs @@ -9,6 +9,7 @@ using UnityEngine; using NewHorizons.Utility; using Logger = NewHorizons.Utility.Logger; using NewHorizons.External.VariableSize; +using NewHorizons.Components; namespace NewHorizons.Builder.Body { @@ -75,6 +76,41 @@ namespace NewHorizons.Builder.Body rot._localAxis = Vector3.down; } + // Collider can't be concave so nvm + /* + var collider = new GameObject("Collider"); + collider.SetActive(false); + collider.transform.parent = ringGO.transform; + collider.transform.localPosition = Vector3.zero; + collider.transform.localScale = Vector3.one; + collider.layer = 17; + + var mf = collider.AddComponent(); + mf.mesh = ringMesh; + + var mc = collider.AddComponent(); + mc.isTrigger = true; + + var owCollider = collider.AddComponent(); + var trigger = collider.AddComponent(); + var sfv = collider.AddComponent(); + sfv._fluidType = FluidVolume.Type.SAND; + sfv._density = 2f; + + collider.SetActive(true); + */ + + if (ring.Curve != null) + { + var levelController = ringGO.AddComponent(); + var curve = new AnimationCurve(); + foreach (var pair in ring.Curve) + { + curve.AddKey(new Keyframe(pair.Time, pair.Value)); + } + levelController.scaleCurve = curve; + } + return ringGO; } diff --git a/NewHorizons/Builder/Body/SandBuilder.cs b/NewHorizons/Builder/Body/SandBuilder.cs index ff7a28dd..5e5874e2 100644 --- a/NewHorizons/Builder/Body/SandBuilder.cs +++ b/NewHorizons/Builder/Body/SandBuilder.cs @@ -1,4 +1,5 @@ using NewHorizons.External.VariableSize; +using NewHorizons.Utility; using System; using System.Collections.Generic; using System.Linq; @@ -12,7 +13,54 @@ namespace NewHorizons.Builder.Body { public static void Make(GameObject go, Sector sector, OWRigidbody rb, SandModule module) { + var sandGO = new GameObject("Sand"); + sandGO.SetActive(false); + var sandSphere = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/SandSphere_Draining/SandSphere"), sandGO.transform); + if(module.Tint != null) + { + var oldMR = sandSphere.GetComponent(); + var sandMaterials = oldMR.sharedMaterials; + var sandMR = sandSphere.AddComponent(); + sandMR.CopyPropertiesFrom(oldMR); + sandMR.sharedMaterials = new Material[] + { + new Material(sandMaterials[0]), + new Material(sandMaterials[1]) + }; + GameObject.Destroy(oldMR); + sandMR.sharedMaterials[0].color = module.Tint.ToColor32(); + sandMR.sharedMaterials[1].color = module.Tint.ToColor32(); + } + + var collider = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/SandSphere_Draining/Collider"), sandGO.transform); + var sphereCollider = collider.GetComponent(); + collider.SetActive(true); + + var occlusionSphere = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/SandSphere_Draining/OcclusionSphere"), sandGO.transform); + + var proxyShadowCasterGO = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/SandSphere_Draining/ProxyShadowCaster"), sandGO.transform); + var proxyShadowCaster = proxyShadowCasterGO.GetComponent(); + proxyShadowCaster.SetSuperGroup(sandGO.GetComponent()); + + sandSphere.AddComponent(); + + if(module.Curve != null) + { + var levelController = sandGO.AddComponent(); + var curve = new AnimationCurve(); + foreach(var pair in module.Curve) + { + curve.AddKey(new Keyframe(pair.Time, 2f * module.Size * pair.Value)); + } + levelController._scaleCurve = curve; + } + + sandGO.transform.parent = go.transform; + sandGO.transform.localPosition = Vector3.zero; + sandGO.transform.localScale = Vector3.one * module.Size; + + sandGO.SetActive(true); } } } diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 0194225f..07cdf5d8 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -147,6 +147,17 @@ namespace NewHorizons.Builder.Body starController.Intensity = starModule.SolarLuminosity; starController.SunColor = lightColour; + if (starModule.Curve != null) + { + var levelController = starGO.AddComponent(); + var curve = new AnimationCurve(); + foreach (var pair in starModule.Curve) + { + curve.AddKey(new Keyframe(pair.Time, starModule.Size * pair.Value)); + } + levelController._scaleCurve = curve; + } + return starController; } } diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index ef5287f6..aad209ea 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -10,7 +10,7 @@ namespace NewHorizons.Builder.Body { public static void Make(GameObject body, Sector sector, OWRigidbody rb, WaterModule module) { - var waterSize = module.Radius; + var waterSize = module.Size; GameObject waterGO = new GameObject("Water"); waterGO.SetActive(false); @@ -59,7 +59,6 @@ namespace NewHorizons.Builder.Body var owCollider = buoyancyObject.AddComponent(); owCollider.SetValue("_parentBody", rb); owCollider.SetValue("_collider", sphereCollider); - var buoyancyTriggerVolume = buoyancyObject.AddComponent(); buoyancyTriggerVolume.SetValue("_owCollider", owCollider); @@ -93,6 +92,17 @@ namespace NewHorizons.Builder.Body fog3.AddComponent().material = new Material(Shader.Find("Sprites/Default")); fog3.GetComponent().material.color = new Color32(0, 75, 50, 5); + if (module.Curve != null) + { + var levelController = waterGO.AddComponent(); + var curve = new AnimationCurve(); + foreach (var pair in module.Curve) + { + curve.AddKey(new Keyframe(pair.Time, module.Size * pair.Value)); + } + levelController._scaleCurve = curve; + } + waterGO.transform.localPosition = Vector3.zero; waterGO.SetActive(true); } diff --git a/NewHorizons/Components/RingSizeController.cs b/NewHorizons/Components/RingSizeController.cs new file mode 100644 index 00000000..c43698ea --- /dev/null +++ b/NewHorizons/Components/RingSizeController.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace NewHorizons.Components +{ + public class RingSizeController : MonoBehaviour + { + public AnimationCurve scaleCurve; + + private void FixedUpdate() + { + float num = scaleCurve.Evaluate(TimeLoop.GetMinutesElapsed()); + base.transform.localScale = new Vector3(num, num, num); + } + } +} diff --git a/NewHorizons/External/VariableSize/LavaModule.cs b/NewHorizons/External/VariableSize/LavaModule.cs index 0a05e71f..4fcd3ac8 100644 --- a/NewHorizons/External/VariableSize/LavaModule.cs +++ b/NewHorizons/External/VariableSize/LavaModule.cs @@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize { public class LavaModule : VariableSizeModule { - public float Radius { get; set; } + public float Size { get; set; } public MColor32 Tint { get; set; } } } diff --git a/NewHorizons/External/VariableSize/SandModule.cs b/NewHorizons/External/VariableSize/SandModule.cs index 458b8e6e..9b790db2 100644 --- a/NewHorizons/External/VariableSize/SandModule.cs +++ b/NewHorizons/External/VariableSize/SandModule.cs @@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize { public class SandModule : VariableSizeModule { - public float Radius { get; set; } + public float Size { get; set; } public MColor32 Tint { get; set; } } } diff --git a/NewHorizons/External/VariableSize/WaterModule.cs b/NewHorizons/External/VariableSize/WaterModule.cs index 72f95997..f2d1b740 100644 --- a/NewHorizons/External/VariableSize/WaterModule.cs +++ b/NewHorizons/External/VariableSize/WaterModule.cs @@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize { public class WaterModule : VariableSizeModule { - public float Radius { get; set; } + public float Size { get; set; } public MColor32 Tint { get; set; } } } diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 4e5f732f..f0fab029 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -511,7 +511,7 @@ namespace NewHorizons if (body.Config.Base.LavaSize != 0) { var lava = new LavaModule(); - lava.Radius = body.Config.Base.LavaSize; + lava.Size = body.Config.Base.LavaSize; LavaBuilder.Make(go, sector, rb, lava); } @@ -522,7 +522,7 @@ namespace NewHorizons if (body.Config.Base.WaterSize != 0) { var water = new WaterModule(); - water.Radius = body.Config.Base.WaterSize; + water.Size = body.Config.Base.WaterSize; water.Tint = body.Config.Base.WaterTint; WaterBuilder.Make(go, sector, rb, water); } diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index 8d5ab98c..d91d11d8 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -860,7 +860,7 @@ "Water": { "type": "object", "properties": { - "radius": { + "size": { "type": "number", "default": 0 }, @@ -914,7 +914,7 @@ "Lava": { "type": "object", "properties": { - "radius": { + "size": { "type": "number", "default": 0 }, @@ -939,10 +939,39 @@ "Sand": { "type": "object", "properties": { - "radius": { + "size": { "type": "number", "default": 0 }, + "tint": { + "type": "object", + "properties": { + "R": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "G": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "B": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "A": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 255 + } + } + }, "curve": { "type": "array", "items": {