From e25cf1e00c6a544ac4489aac23036565411ecf09 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 18 Mar 2023 14:51:13 -0400 Subject: [PATCH] Fixes #514 Setting scale value to 0 should disable it --- NewHorizons/Builder/Body/FunnelBuilder.cs | 2 +- .../{ => SizeControllers}/FunnelController.cs | 13 ++-- .../SingularitySizeController.cs | 66 +++++++++++++++++-- .../SizeControllers/SizeController.cs | 52 ++++++++++++++- 4 files changed, 117 insertions(+), 16 deletions(-) rename NewHorizons/Components/{ => SizeControllers}/FunnelController.cs (71%) diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index aeeea881..d4c53360 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -1,10 +1,10 @@ using System.Runtime.Serialization; -using NewHorizons.Components; using NewHorizons.Utility; using UnityEngine; using Logger = NewHorizons.Utility.Logger; using NewHorizons.External.Modules.VariableSize; using NewHorizons.Components.Orbital; +using NewHorizons.Components.SizeControllers; namespace NewHorizons.Builder.Body { diff --git a/NewHorizons/Components/FunnelController.cs b/NewHorizons/Components/SizeControllers/FunnelController.cs similarity index 71% rename from NewHorizons/Components/FunnelController.cs rename to NewHorizons/Components/SizeControllers/FunnelController.cs index c0d39468..a4867408 100644 --- a/NewHorizons/Components/FunnelController.cs +++ b/NewHorizons/Components/SizeControllers/FunnelController.cs @@ -1,18 +1,19 @@ -using UnityEngine; -namespace NewHorizons.Components +using UnityEngine; +namespace NewHorizons.Components.SizeControllers { - public class FunnelController : MonoBehaviour + public class FunnelController : SizeController { - public AnimationCurve scaleCurve; public Transform target; public Transform anchor; - private void Update() + public override void FixedUpdate() { // Temporary solution that i will never get rid of transform.position = anchor.position; - float num = scaleCurve?.Evaluate(TimeLoop.GetMinutesElapsed()) ?? 1f; + UpdateScale(); + + float num = CurrentScale; var dist = (transform.position - target.position).magnitude; transform.localScale = new Vector3(num, num, dist / 500f); diff --git a/NewHorizons/Components/SizeControllers/SingularitySizeController.cs b/NewHorizons/Components/SizeControllers/SingularitySizeController.cs index 4633324a..52cb7d3e 100644 --- a/NewHorizons/Components/SizeControllers/SingularitySizeController.cs +++ b/NewHorizons/Components/SizeControllers/SingularitySizeController.cs @@ -1,9 +1,5 @@ using NewHorizons.Builder.Body; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using NewHorizons.Utility; using UnityEngine; namespace NewHorizons.Components.SizeControllers @@ -18,7 +14,7 @@ namespace NewHorizons.Components.SizeControllers public WhiteHoleFluidVolume fluidVolume; public WhiteHoleVolume volume; - protected new void FixedUpdate() + public override void FixedUpdate() { base.FixedUpdate(); @@ -56,5 +52,63 @@ namespace NewHorizons.Components.SizeControllers volume._radius = CurrentScale * innerScale; } } + + protected override void Vanish() + { + if (audioSource != null) + { + audioSource.gameObject.SetActive(false); + audioSource.Stop(); + } + + if (oneShotAudioSource != null) + { + oneShotAudioSource.gameObject.SetActive(false); + } + + if (sphereCollider != null) + { + sphereCollider.gameObject.SetActive(false); + } + + if (fluidVolume != null) + { + fluidVolume.gameObject.SetActive(false); + } + + if (volume != null) + { + volume.gameObject.SetActive(false); + } + } + + protected override void Appear() + { + if (audioSource != null) + { + audioSource.gameObject.SetActive(true); + Delay.FireOnNextUpdate(audioSource.Play); + } + + if (oneShotAudioSource != null) + { + oneShotAudioSource.gameObject.SetActive(true); + } + + if (sphereCollider != null) + { + sphereCollider.gameObject.SetActive(true); + } + + if (fluidVolume != null) + { + fluidVolume.gameObject.SetActive(true); + } + + if (volume != null) + { + volume.gameObject.SetActive(true); + } + } } } diff --git a/NewHorizons/Components/SizeControllers/SizeController.cs b/NewHorizons/Components/SizeControllers/SizeController.cs index 334f5a84..7684908b 100644 --- a/NewHorizons/Components/SizeControllers/SizeController.cs +++ b/NewHorizons/Components/SizeControllers/SizeController.cs @@ -1,25 +1,71 @@ using NewHorizons.Utility; using UnityEngine; + namespace NewHorizons.Components.SizeControllers { public class SizeController : MonoBehaviour { - public AnimationCurve scaleCurve { get; protected set; } + public AnimationCurve scaleCurve; public float CurrentScale { get; protected set; } public float size = 1f; - protected void FixedUpdate() + public void Awake() + { + UpdateScale(); + + if (CurrentScale == 0f) + { + Vanish(); + } + } + + protected void UpdateScale() { if(scaleCurve != null) { + var prevScale = CurrentScale; CurrentScale = scaleCurve.Evaluate(TimeLoop.GetMinutesElapsed()) * size; + + // #514 setting something's scale value to 0 should disable it + if (prevScale != CurrentScale) + { + if (CurrentScale == 0f) + { + Vanish(); + } + else if (prevScale == 0f) + { + Appear(); + } + } } else { CurrentScale = size; } + } - base.transform.localScale = Vector3.one * CurrentScale; + protected virtual void Vanish() + { + foreach (var child in gameObject.GetAllChildren()) + { + child.SetActive(false); + } + } + + protected virtual void Appear() + { + foreach (var child in gameObject.GetAllChildren()) + { + child.SetActive(true); + } + } + + public virtual void FixedUpdate() + { + UpdateScale(); + + transform.localScale = Vector3.one * CurrentScale; } public void SetScaleCurve(TimeValuePair[] curve)