using System.Collections; using System.Collections.Generic; using UnityEngine; public class SaturnDeath : MonoBehaviour { [Header("Текстури тропосфери (BaseMap)")] public Texture2D tropo100; public Texture2D tropo70; public Texture2D tropo50; public Texture2D tropo30; public Texture2D tropo0; public Texture2D deadTexture; [Header("Текстури тропосфери (BaseMap2)")] public Texture2D tropo100B; public Texture2D tropo70B; public Texture2D tropo50B; public Texture2D tropo30B; public Texture2D tropo0B; public Texture2D deadTextureB; [Header("Текстури кілець")] public Texture2D rings100; public Texture2D rings70; public Texture2D rings50; public Texture2D rings30; public Texture2D rings0; [Header("Кільця")] public Renderer ringsRenderer; [Range(0f, 1f)] public float troposphereLevel = 1f; public float stratosphereLevel = 1f; public float thermosphereLevel = 1f; public float exosphereLevel = 1f; private Renderer _planetRenderer; private Material _planetMat; private Material _ringsMat; private Texture2D _originalTexture; private Texture2D _originalTexture2; private Texture2D _originalRingsTexture; void Start() { _planetRenderer = GetComponent(); if (_planetRenderer == null) _planetRenderer = GetComponentInChildren(); if (_planetRenderer != null) { _planetMat = _planetRenderer.material; _originalTexture = (Texture2D)_planetMat.GetTexture("_BaseMap"); _originalTexture2 = (Texture2D)_planetMat.GetTexture("_BaseMap2"); } if (ringsRenderer != null) { _ringsMat = ringsRenderer.material; _originalRingsTexture = (Texture2D)_ringsMat.GetTexture("_BaseMap"); } } public void ResetTexture() { troposphereLevel = 1f; stratosphereLevel = 1f; thermosphereLevel = 1f; exosphereLevel = 1f; if (_planetMat != null) { if (_originalTexture != null) _planetMat.SetTexture("_BaseMap", _originalTexture); if (_originalTexture2 != null) _planetMat.SetTexture("_BaseMap2", _originalTexture2); } if (_ringsMat != null && _originalRingsTexture != null) _ringsMat.SetTexture("_BaseMap", _originalRingsTexture); } void Update() { if (_planetMat == null) return; UpdatePlanetTexture(); UpdateRingsTexture(); } void UpdatePlanetTexture() { float worst = Mathf.Min(troposphereLevel, stratosphereLevel, thermosphereLevel, exosphereLevel); if (worst >= 1f) { if (_originalTexture != null) _planetMat.SetTexture("_BaseMap", _originalTexture); if (_originalTexture2 != null) _planetMat.SetTexture("_BaseMap2", _originalTexture2); return; } Texture2D tex = worst <= 0f ? deadTexture : GetPlanetTexture(worst); Texture2D tex2 = worst <= 0f ? deadTextureB : GetPlanetTexture2(worst); if (tex != null) _planetMat.SetTexture("_BaseMap", tex); if (tex2 != null) _planetMat.SetTexture("_BaseMap2", tex2); } void UpdateRingsTexture() { if (_ringsMat == null) return; float worst = Mathf.Min(troposphereLevel, stratosphereLevel, thermosphereLevel, exosphereLevel); if (worst >= 1f) { if (_originalRingsTexture != null) _ringsMat.SetTexture("_BaseMap", _originalRingsTexture); return; } Texture2D tex = worst <= 0f ? rings0 : GetRingsTexture(worst); if (tex != null) _ringsMat.SetTexture("_BaseMap", tex); } Texture2D GetPlanetTexture(float level) { if (level >= 0.7f) return tropo100; else if (level >= 0.5f) return tropo70; else if (level >= 0.3f) return tropo50; else if (level > 0f) return tropo30; else return tropo0; } Texture2D GetPlanetTexture2(float level) { if (level >= 0.7f) return tropo100B; else if (level >= 0.5f) return tropo70B; else if (level >= 0.3f) return tropo50B; else if (level > 0f) return tropo30B; else return tropo0B; } Texture2D GetRingsTexture(float level) { if (level >= 0.7f) return rings100; else if (level >= 0.5f) return rings70; else if (level >= 0.3f) return rings50; else if (level > 0f) return rings30; else return rings0; } }