diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index be915a32..183a6a29 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -84,15 +84,37 @@ namespace NewHorizons.Builder.Body { materials[i].SetColor("_FogColor", module.Tint.ToColor()); } - materials[i].renderQueue = 2990; } - - proxyGO.GetComponentInChildren().materials = materials; - geoGO.GetComponentInChildren().materials = materials; - //TODO: Material inside + // Proxy + var proxyExterior = proxyGO.transform.Find("SandColumn_Exterior (1)"); + proxyExterior.name = "WaterColumn_Exterior"; + var proxyExteriorMR = proxyExterior.GetComponent(); + 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(); + 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(); + 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(); + geoInteriorMR.material = materials[1]; + geoInteriorMR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + */ break; case FunnelType.LAVA: diff --git a/NewHorizons/Builder/Body/RingBuilder.cs b/NewHorizons/Builder/Body/RingBuilder.cs index ef48e136..eae02589 100644 --- a/NewHorizons/Builder/Body/RingBuilder.cs +++ b/NewHorizons/Builder/Body/RingBuilder.cs @@ -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 { diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index c18daaa5..e53c2918 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -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 { diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index 52a37a01..c6cc0711 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -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(); + var sizeController = waterGO.AddComponent(); 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().material; + sizeController.size = module.Size; } // TODO: make LOD work diff --git a/NewHorizons/Components/SizeController.cs b/NewHorizons/Components/SizeControllers/SizeController.cs similarity index 83% rename from NewHorizons/Components/SizeController.cs rename to NewHorizons/Components/SizeControllers/SizeController.cs index 1aa23e27..4a071a2f 100644 --- a/NewHorizons/Components/SizeController.cs +++ b/NewHorizons/Components/SizeControllers/SizeController.cs @@ -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); } } diff --git a/NewHorizons/Components/StarAtmosphereSizeController.cs b/NewHorizons/Components/SizeControllers/StarAtmosphereSizeController.cs similarity index 95% rename from NewHorizons/Components/StarAtmosphereSizeController.cs rename to NewHorizons/Components/SizeControllers/StarAtmosphereSizeController.cs index c68b8f71..be295f0b 100644 --- a/NewHorizons/Components/StarAtmosphereSizeController.cs +++ b/NewHorizons/Components/SizeControllers/StarAtmosphereSizeController.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using UnityEngine; -namespace NewHorizons.Components +namespace NewHorizons.Components.SizeControllers { public class StarAtmosphereSizeController : SizeController { diff --git a/NewHorizons/Components/SizeControllers/WaterSizeController.cs b/NewHorizons/Components/SizeControllers/WaterSizeController.cs new file mode 100644 index 00000000..adac5fd0 --- /dev/null +++ b/NewHorizons/Components/SizeControllers/WaterSizeController.cs @@ -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); + } + } + } +}