mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Scale curve done for lava/sand/water/star/rings
This commit is contained in:
parent
09a1d8a120
commit
41fcd8f909
@ -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<SphereCollider>().radius = 1;
|
||||
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);
|
||||
destructionVolume.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<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;
|
||||
}
|
||||
|
||||
|
||||
@ -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<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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,6 +147,17 @@ namespace NewHorizons.Builder.Body
|
||||
starController.Intensity = starModule.SolarLuminosity;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
@ -60,7 +60,6 @@ namespace NewHorizons.Builder.Body
|
||||
owCollider.SetValue("_parentBody", rb);
|
||||
owCollider.SetValue("_collider", sphereCollider);
|
||||
|
||||
|
||||
var buoyancyTriggerVolume = buoyancyObject.AddComponent<OWTriggerVolume>();
|
||||
buoyancyTriggerVolume.SetValue("_owCollider", owCollider);
|
||||
|
||||
@ -93,6 +92,17 @@ namespace NewHorizons.Builder.Body
|
||||
fog3.AddComponent<MeshRenderer>().material = new Material(Shader.Find("Sprites/Default"));
|
||||
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.SetActive(true);
|
||||
}
|
||||
|
||||
20
NewHorizons/Components/RingSizeController.cs
Normal file
20
NewHorizons/Components/RingSizeController.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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": {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user