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].SetColor("_FogColor", module.Tint.ToColor());
} }
materials[i].renderQueue = 2990;
} }
proxyGO.GetComponentInChildren<MeshRenderer>().materials = materials; // Proxy
geoGO.GetComponentInChildren<MeshRenderer>().materials = materials; 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: Material inside /*
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;
*/
//TODO: do the effect in water effect // 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; break;
case FunnelType.LAVA: case FunnelType.LAVA:

View File

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

View File

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

View File

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

View File

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

View File

@ -6,7 +6,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
namespace NewHorizons.Components namespace NewHorizons.Components.SizeControllers
{ {
public class StarAtmosphereSizeController : SizeController 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);
}
}
}
}