Rearrange size controllers, better water funnels

This commit is contained in:
Nick J. Connors 2022-01-31 18:14:33 -05:00
parent ff3ed51907
commit 63fcdb5ba5
7 changed files with 70 additions and 14 deletions

View File

@ -84,15 +84,37 @@ namespace NewHorizons.Builder.Body
{
materials[i].SetColor("_FogColor", module.Tint.ToColor());
}
materials[i].renderQueue = 2990;
}
proxyGO.GetComponentInChildren<MeshRenderer>().materials = materials;
geoGO.GetComponentInChildren<MeshRenderer>().materials = materials;
//TODO: Material inside
// Proxy
var proxyExterior = proxyGO.transform.Find("SandColumn_Exterior (1)");
proxyExterior.name = "WaterColumn_Exterior";
var proxyExteriorMR = proxyExterior.GetComponent<MeshRenderer>();
proxyExteriorMR.material = materials[0];
proxyExteriorMR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
//TODO: do the effect in water effect
/*
var proxyInterior = GameObject.Instantiate(proxyExterior, proxyGO.transform);
proxyInterior.name = "WaterColumn_Interior";
var proxyInteriorMR = proxyInterior.GetComponent<MeshRenderer>();
proxyInteriorMR.material = materials[1];
proxyInteriorMR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
*/
// Geometry
var geoExterior = geoGO.transform.Find("Effects_HT_SandColumn/SandColumn_Exterior");
geoExterior.name = "WaterColumn_Exterior";
var geoExteriorMR = geoExterior.GetComponent<MeshRenderer>();
geoExteriorMR.material = materials[0];
geoExteriorMR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
/*
var geoInterior = GameObject.Instantiate(geoExterior, geoGO.transform);
geoInterior.name = "WaterColumn_Interior";
var geoInteriorMR = geoInterior.GetComponent<MeshRenderer>();
geoInteriorMR.material = materials[1];
geoInteriorMR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
*/
break;
case FunnelType.LAVA:

View File

@ -10,6 +10,7 @@ using NewHorizons.Utility;
using Logger = NewHorizons.Utility.Logger;
using NewHorizons.External.VariableSize;
using NewHorizons.Components;
using NewHorizons.Components.SizeControllers;
namespace NewHorizons.Builder.Body
{

View File

@ -10,6 +10,7 @@ using NewHorizons.Utility;
using Logger = NewHorizons.Utility.Logger;
using NewHorizons.External.VariableSize;
using NewHorizons.Components;
using NewHorizons.Components.SizeControllers;
namespace NewHorizons.Builder.Body
{

View File

@ -4,6 +4,8 @@ using OWML.Utils;
using UnityEngine;
using NewHorizons.Utility;
using Logger = NewHorizons.Utility.Logger;
using NewHorizons.Components;
using NewHorizons.Components.SizeControllers;
namespace NewHorizons.Builder.Body
{
@ -74,22 +76,22 @@ namespace NewHorizons.Builder.Body
fluidVolume.SetValue("_radius", waterSize);
fluidVolume.SetValue("_layer", LayerMask.NameToLayer("BassicEffectVolume"));
/*
var fogGO = GameObject.Instantiate(GameObject.Find("GiantsDeep_Body/Sector_GD/Sector_GDInterior/Effects_GDInterior/OceanFog"), waterGO.transform);
fogGO.name = "OceanFog";
fogGO.transform.localPosition = Vector3.zero;
fogGO.transform.localScale = Vector3.one;
*/
if (module.Curve != null)
{
var levelController = waterGO.AddComponent<SandLevelController>();
var sizeController = waterGO.AddComponent<WaterSizeController>();
var curve = new AnimationCurve();
foreach (var pair in module.Curve)
{
curve.AddKey(new Keyframe(pair.Time, module.Size * pair.Value));
curve.AddKey(new Keyframe(pair.Time, pair.Value));
}
levelController._scaleCurve = curve;
sizeController.scaleCurve = curve;
sizeController.oceanFogMaterial = fogGO.GetComponent<MeshRenderer>().material;
sizeController.size = module.Size;
}
// TODO: make LOD work

View File

@ -5,16 +5,17 @@ using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components
namespace NewHorizons.Components.SizeControllers
{
public class SizeController : MonoBehaviour
{
public AnimationCurve scaleCurve;
public float CurrentScale { get; private set; }
public float size = 1f;
protected void FixedUpdate()
{
CurrentScale = scaleCurve.Evaluate(TimeLoop.GetMinutesElapsed());
CurrentScale = scaleCurve.Evaluate(TimeLoop.GetMinutesElapsed()) * size;
base.transform.localScale = new Vector3(CurrentScale, CurrentScale, CurrentScale);
}
}

View File

@ -6,7 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components
namespace NewHorizons.Components.SizeControllers
{
public class StarAtmosphereSizeController : SizeController
{

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components.SizeControllers
{
public class WaterSizeController : SizeController
{
public Material oceanFogMaterial;
//private const float oceanFogR1Ratio = 500f / 550f;
private const float oceanFogR1Ratio = 1f;
//private const float oceanFogR2Ratio = 210f / 550f;
private const float oceanFogR2Ratio = 0f;
protected new void FixedUpdate()
{
base.FixedUpdate();
if (oceanFogMaterial)
{
oceanFogMaterial.SetFloat("_Radius", oceanFogR1Ratio * CurrentScale);
oceanFogMaterial.SetFloat("_Radius2", oceanFogR2Ratio * CurrentScale);
}
}
}
}