using System.Collections; using System.Linq; using UnityEngine; public class StatusLED : ActionAnimator { public MeshRenderer LED_R; public MeshRenderer LED_O; public MeshRenderer LED_G; public Material mat_LED_R_On; public Material mat_LED_R_Off; public Material mat_LED_O_On; public Material mat_LED_O_Off; public Material mat_LED_G_On; public Material mat_LED_G_Off; Material currentOnMaterial; public override void AnimationEnd() { SetColor("End"); } public override void AnimationStart() { SetColor("Start"); } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { var leds = GetComponentsInChildren(); LED_R = leds.First(x => x.name.Equals(nameof(LED_R))); LED_O = leds.First(x => x.name.Equals(nameof(LED_O))); LED_G = leds.First(x => x.name.Equals(nameof(LED_G))); LED_R.sharedMaterial = mat_LED_R_Off; LED_G.sharedMaterial = mat_LED_G_Off; LED_O.sharedMaterial = mat_LED_O_Off; Invoke("Flicker", 1f); } bool isOn = false; public void Flicker() { if (currentOnMaterial == null) return; if (isOn == false) { isOn = true; currentOnMaterial.EnableKeyword("_Emission"); } else if (isOn == true) { isOn = false; currentOnMaterial.DisableKeyword("_Emission"); } } private void SetColor(string progStatus, string status = null) { LED_R.sharedMaterial = mat_LED_R_Off; LED_G.sharedMaterial = mat_LED_G_Off; LED_O.sharedMaterial = mat_LED_O_Off; switch (progStatus) { case "Start": LED_G.sharedMaterial = mat_LED_G_On; currentOnMaterial = LED_G.sharedMaterial; break; case "End": LED_O.sharedMaterial = mat_LED_O_On; currentOnMaterial = LED_O.sharedMaterial; break; default: LED_O.sharedMaterial = mat_LED_O_On; currentOnMaterial = LED_O.sharedMaterial; break; } } }