using NewHorizons.Components.SizeControllers; using NewHorizons.Handlers; using NewHorizons.Utility; using System.Collections.Generic; using UnityEngine; namespace NewHorizons.Components { public class NHProxy : ProxyPlanet { public string astroName; public GameObject _star; private Renderer[] _starRenderers; private TessellatedRenderer[] _starTessellatedRenderers; private ParticleSystemRenderer[] _starParticleRenderers; private SolarFlareEmitter _solarFlareEmitter; public CloudLightningGenerator _lightningGenerator; public Renderer _topClouds; public NHSupernovaPlanetEffectController _supernovaPlanetEffectController; public StellarRemnantProxy _stellarRemnant; public float _baseRealObjectDiameter; public override void Awake() { ProxyHandler.RegisterProxy(this); base.Awake(); _mieCurveMaxVal = 0.1f; _mieCurve = AnimationCurve.EaseInOut(0.0011f, 1, 1, 0); _fogCurve = AnimationCurve.Linear(0, 1, 1, 0); // The star part cant be disabled like the rest and we have to manually disable the renderers // Else it can stop the supernova effect mid way through if (_star == null) _star = GetComponentInChildren()?.gameObject; if (_star != null) { _starRenderers = _star.GetComponentsInChildren(); _starTessellatedRenderers = _star.GetComponentsInChildren(); _starParticleRenderers = _star.GetComponentsInChildren(); _solarFlareEmitter = _star.GetComponentInChildren(); } if (_lightningGenerator == null) _lightningGenerator = GetComponentInChildren(); if (_supernovaPlanetEffectController == null) _supernovaPlanetEffectController = GetComponentInChildren(); // Start off _outOfRange = false; ToggleRendering(false); } public override void OnDestroy() { ProxyHandler.UnregisterProxy(this); base.OnDestroy(); } public override void Initialize() { AstroObject astroObject = AstroObjectLocator.GetAstroObject(astroName); _realObjectTransform = astroObject.transform; if (_atmosphere != null) { _hasAtmosphere = true; _atmosphereMaterial = new Material(_atmosphere.sharedMaterial); _baseAtmoMatShellInnerRadius = _atmosphereMaterial.GetFloat(propID_AtmoInnerRadius); _baseAtmoMatShellOuterRadius = _atmosphereMaterial.GetFloat(propID_AtmoOuterRadius); _atmosphere.sharedMaterial = _atmosphereMaterial; } if (_fog != null) { _hasFog = true; _fogMaterial = new Material(_fog.sharedMaterial); _fogMaterial.SetFloat(propID_LODFade, 1f); _fog.sharedMaterial = _fogMaterial; } } public override void Update() { if (_stellarRemnant != null) { if (_stellarRemnant.IsActiveAndEnabled()) { _realObjectDiameter = _stellarRemnant._realObjectDiameter; if (!_stellarRemnant.IsRenderingOn()) ToggleRendering(_outOfRange); } else { _realObjectDiameter = _baseRealObjectDiameter; if (_stellarRemnant.IsRenderingOn()) ToggleRendering(_outOfRange); } } base.Update(); } public override void ToggleRendering(bool on) { if (_stellarRemnant != null) { _stellarRemnant.ToggleRendering(on); on = on && !_stellarRemnant.IsActiveAndEnabled(); } base.ToggleRendering(on); foreach (Transform child in transform) { if (child.gameObject == _star) continue; if (child.gameObject == _stellarRemnant?.gameObject) continue; child.gameObject.SetActive(on); } if (_star != null) { if (_solarFlareEmitter != null) { _solarFlareEmitter.gameObject.SetActive(on); } foreach (var renderer in _starRenderers) { renderer.enabled = on; } foreach (var renderer in _starTessellatedRenderers) { renderer.enabled = on; } foreach (var renderer in _starParticleRenderers) { renderer.enabled = on; } } if (_topClouds != null) { _topClouds.enabled = on; } if (_lightningGenerator != null) { _lightningGenerator.enabled = on; } if (_supernovaPlanetEffectController != null) { if (on) _supernovaPlanetEffectController.Enable(); else _supernovaPlanetEffectController.Disable(); } } public override void UpdateScale(float scaleMultiplier, float viewDistance) { if (_stellarRemnant != null) _stellarRemnant.UpdateScale(scaleMultiplier, viewDistance); base.UpdateScale(scaleMultiplier, viewDistance); } } }