Files
Simulation/Assets/Scripts/ActionAnimator/StatusLED.cs
2025-07-18 13:28:19 +09:00

89 lines
2.2 KiB
C#

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<MeshRenderer>();
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;
}
}
}