This repository has been archived on 2026-01-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Frontec/Assets/Scripts/WSH/TrafficLight.cs
jmaniuvc 2936c48466 Frontec
2025-02-24 12:12:52 +09:00

89 lines
2.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
public enum TrafficState
{
Normal,
Warning,
Error,
}
namespace WSH
{
public class TrafficLight : MonoBehaviour
{
public Light red;
public Light green;
public Light yellow;
public Light currentTraffic;
private void Awake()
{
var lights = GetComponentsInChildren<Light>();
red = lights.Where(l => l.name.Equals("R")).First();
green = lights.Where(l => l.name.Equals("G")).First();
yellow = lights.Where(l => l.name.Equals("Y")).First();
red.gameObject.SetActive(false);
green.gameObject.SetActive(false);
yellow.gameObject.SetActive(false);
SetState(TrafficState.Normal);
}
public void SetState(TrafficState state)
{
if (currentTraffic != null)
currentTraffic.gameObject.SetActive(false);
switch (state)
{
case TrafficState.Normal:
currentTraffic = green;
break;
case TrafficState.Warning:
currentTraffic = yellow;
break;
case TrafficState.Error:
currentTraffic = red;
break;
}
currentTraffic.gameObject.SetActive(true);
StopAllCoroutines();
LightAnim();
}
public float speed;
void LightAnim()
{
var light = currentTraffic.GetComponent<HDAdditionalLightData>();
StopAllCoroutines();
StartCoroutine(LightVolumetricOn(light));
}
IEnumerator LightVolumetricOn(HDAdditionalLightData light)
{
float prevDimmer = light.volumetricDimmer;
while (prevDimmer < 16f)
{
prevDimmer = light.volumetricDimmer;
float newDimmer;
newDimmer = prevDimmer + (Time.deltaTime * speed);
light.SetLightDimmer(light.lightDimmer, newDimmer);
yield return null;
}
StartCoroutine(LightVolumetricOff(light));
}
IEnumerator LightVolumetricOff(HDAdditionalLightData light)
{
float prevDimmer = light.volumetricDimmer;
while (prevDimmer > 0f)
{
prevDimmer = light.volumetricDimmer;
float newDimmer;
newDimmer = prevDimmer - (Time.deltaTime * speed);
light.SetLightDimmer(light.lightDimmer, newDimmer);
yield return null;
}
StartCoroutine(LightVolumetricOn(light));
}
}
}