Scale curve done for lava/sand/water/star/rings

This commit is contained in:
Nick J. Connors 2022-01-10 02:16:31 -05:00
parent 09a1d8a120
commit 41fcd8f909
11 changed files with 178 additions and 13 deletions

View File

@ -18,7 +18,7 @@ namespace NewHorizons.Builder.Body
moltenCore.SetActive(false); moltenCore.SetActive(false);
moltenCore.transform.parent = body.transform; moltenCore.transform.parent = body.transform;
moltenCore.transform.localPosition = Vector3.zero; 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); var lavaSphere = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/LavaSphere"), moltenCore.transform);
lavaSphere.transform.localScale = Vector3.one; 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); var destructionVolume = GameObject.Instantiate(GameObject.Find("VolcanicMoon_Body/MoltenCore_VM/DestructionVolume"), moltenCore.transform);
destructionVolume.GetComponent<SphereCollider>().radius = 1; destructionVolume.GetComponent<SphereCollider>().radius = 1;
moltenCore.SetActive(true);
destructionVolume.SetActive(true); destructionVolume.SetActive(true);
if (module.Curve != null)
{
var levelController = moltenCore.AddComponent<SandLevelController>();
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);
} }
} }
} }

View File

@ -9,6 +9,7 @@ using UnityEngine;
using NewHorizons.Utility; using NewHorizons.Utility;
using Logger = NewHorizons.Utility.Logger; using Logger = NewHorizons.Utility.Logger;
using NewHorizons.External.VariableSize; using NewHorizons.External.VariableSize;
using NewHorizons.Components;
namespace NewHorizons.Builder.Body namespace NewHorizons.Builder.Body
{ {
@ -75,6 +76,41 @@ namespace NewHorizons.Builder.Body
rot._localAxis = Vector3.down; 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<MeshFilter>();
mf.mesh = ringMesh;
var mc = collider.AddComponent<MeshCollider>();
mc.isTrigger = true;
var owCollider = collider.AddComponent<OWCollider>();
var trigger = collider.AddComponent<OWTriggerVolume>();
var sfv = collider.AddComponent<SimpleFluidVolume>();
sfv._fluidType = FluidVolume.Type.SAND;
sfv._density = 2f;
collider.SetActive(true);
*/
if (ring.Curve != null)
{
var levelController = ringGO.AddComponent<RingSizeController>();
var curve = new AnimationCurve();
foreach (var pair in ring.Curve)
{
curve.AddKey(new Keyframe(pair.Time, pair.Value));
}
levelController.scaleCurve = curve;
}
return ringGO; return ringGO;
} }

View File

@ -1,4 +1,5 @@
using NewHorizons.External.VariableSize; using NewHorizons.External.VariableSize;
using NewHorizons.Utility;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -12,7 +13,54 @@ namespace NewHorizons.Builder.Body
{ {
public static void Make(GameObject go, Sector sector, OWRigidbody rb, SandModule module) 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<TessellatedSphereRenderer>();
var sandMaterials = oldMR.sharedMaterials;
var sandMR = sandSphere.AddComponent<TessellatedSphereRenderer>();
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<SphereCollider>();
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>();
proxyShadowCaster.SetSuperGroup(sandGO.GetComponent<ProxyShadowCasterSuperGroup>());
sandSphere.AddComponent<ChildColliderSettings>();
if(module.Curve != null)
{
var levelController = sandGO.AddComponent<SandLevelController>();
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);
} }
} }
} }

View File

@ -147,6 +147,17 @@ namespace NewHorizons.Builder.Body
starController.Intensity = starModule.SolarLuminosity; starController.Intensity = starModule.SolarLuminosity;
starController.SunColor = lightColour; starController.SunColor = lightColour;
if (starModule.Curve != null)
{
var levelController = starGO.AddComponent<SandLevelController>();
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; return starController;
} }
} }

View File

@ -10,7 +10,7 @@ namespace NewHorizons.Builder.Body
{ {
public static void Make(GameObject body, Sector sector, OWRigidbody rb, WaterModule module) 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"); GameObject waterGO = new GameObject("Water");
waterGO.SetActive(false); waterGO.SetActive(false);
@ -59,7 +59,6 @@ namespace NewHorizons.Builder.Body
var owCollider = buoyancyObject.AddComponent<OWCollider>(); var owCollider = buoyancyObject.AddComponent<OWCollider>();
owCollider.SetValue("_parentBody", rb); owCollider.SetValue("_parentBody", rb);
owCollider.SetValue("_collider", sphereCollider); owCollider.SetValue("_collider", sphereCollider);
var buoyancyTriggerVolume = buoyancyObject.AddComponent<OWTriggerVolume>(); var buoyancyTriggerVolume = buoyancyObject.AddComponent<OWTriggerVolume>();
buoyancyTriggerVolume.SetValue("_owCollider", owCollider); buoyancyTriggerVolume.SetValue("_owCollider", owCollider);
@ -93,6 +92,17 @@ namespace NewHorizons.Builder.Body
fog3.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default")); fog3.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));
fog3.GetComponent<MeshRenderer>().material.color = new Color32(0, 75, 50, 5); fog3.GetComponent<MeshRenderer>().material.color = new Color32(0, 75, 50, 5);
if (module.Curve != null)
{
var levelController = waterGO.AddComponent<SandLevelController>();
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.transform.localPosition = Vector3.zero;
waterGO.SetActive(true); waterGO.SetActive(true);
} }

View File

@ -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);
}
}
}

View File

@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize
{ {
public class LavaModule : VariableSizeModule public class LavaModule : VariableSizeModule
{ {
public float Radius { get; set; } public float Size { get; set; }
public MColor32 Tint { get; set; } public MColor32 Tint { get; set; }
} }
} }

View File

@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize
{ {
public class SandModule : VariableSizeModule public class SandModule : VariableSizeModule
{ {
public float Radius { get; set; } public float Size { get; set; }
public MColor32 Tint { get; set; } public MColor32 Tint { get; set; }
} }
} }

View File

@ -9,7 +9,7 @@ namespace NewHorizons.External.VariableSize
{ {
public class WaterModule : VariableSizeModule public class WaterModule : VariableSizeModule
{ {
public float Radius { get; set; } public float Size { get; set; }
public MColor32 Tint { get; set; } public MColor32 Tint { get; set; }
} }
} }

View File

@ -511,7 +511,7 @@ namespace NewHorizons
if (body.Config.Base.LavaSize != 0) if (body.Config.Base.LavaSize != 0)
{ {
var lava = new LavaModule(); var lava = new LavaModule();
lava.Radius = body.Config.Base.LavaSize; lava.Size = body.Config.Base.LavaSize;
LavaBuilder.Make(go, sector, rb, lava); LavaBuilder.Make(go, sector, rb, lava);
} }
@ -522,7 +522,7 @@ namespace NewHorizons
if (body.Config.Base.WaterSize != 0) if (body.Config.Base.WaterSize != 0)
{ {
var water = new WaterModule(); var water = new WaterModule();
water.Radius = body.Config.Base.WaterSize; water.Size = body.Config.Base.WaterSize;
water.Tint = body.Config.Base.WaterTint; water.Tint = body.Config.Base.WaterTint;
WaterBuilder.Make(go, sector, rb, water); WaterBuilder.Make(go, sector, rb, water);
} }

View File

@ -860,7 +860,7 @@
"Water": { "Water": {
"type": "object", "type": "object",
"properties": { "properties": {
"radius": { "size": {
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
@ -914,7 +914,7 @@
"Lava": { "Lava": {
"type": "object", "type": "object",
"properties": { "properties": {
"radius": { "size": {
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
@ -939,10 +939,39 @@
"Sand": { "Sand": {
"type": "object", "type": "object",
"properties": { "properties": {
"radius": { "size": {
"type": "number", "type": "number",
"default": 0 "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": { "curve": {
"type": "array", "type": "array",
"items": { "items": {