H_SafeExperienceDrivingSystem/U3D_DrivingSystem/Assets/UTS_PRO/Scripts/Traffic Light/TLGraphicsControl.cs

238 lines
5.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TLGraphicsControl : MonoBehaviour
{
private Material green, yellow, red, arrow;
[SerializeField]private bool greenOn, yellowOn, redOn, arrowOn;
private bool flickerGreen = false, flickerGreenCurrent = false;
private float flickerTime, flickerRate, flickerCurrent;
public TLGraphicsControl secondSide;
public Texture2D greenG, yellowG, redG, arrowG;
public MeshRenderer mshG, mshY, mshR, mshA;
public bool twoSided;
public bool hasArrow;
private void Awake()
{
green = mshG.materials[1];
if (mshY != null)
{
yellow = mshY.materials[1];
}
red = mshR.materials[1];
if (hasArrow)
{
arrow = mshA.materials[1];
}
}
private void Update()
{
if (flickerGreen)
{
flickerTime -= Time.deltaTime;
if (flickerTime < 0)
{
flickerGreen = false;
DisableGreen(hasArrow);
SemaphoreSimulator SS = GetComponentInParent<SemaphoreSimulator>();
if (mshY == null)
{
EnableRed();
if(SS.STAGE == 1)
{
SS.ResetSemaphore();
}
}
else
{
EnableYellow();
if (!SS.YELLOW_ON)
{
if(SS.STAGE == 0 || SS.STAGE == 1)
{
SS.YELLOW_ON = true;
}
}
}
}
flickerCurrent -= Time.deltaTime;
if (flickerCurrent < 0)
{
flickerCurrent = flickerRate;
flickerGreenCurrent = !flickerGreenCurrent;
if (flickerGreenCurrent)
{
green.EnableKeyword("_EMISSION");
if (hasArrow)
{
arrow.EnableKeyword("_EMISSION");
}
}
else
{
green.DisableKeyword("_EMISSION");
if (hasArrow)
{
arrow.DisableKeyword("_EMISSION");
}
}
}
}
}
public void EnableGreen(bool withArrow)
{
if (!greenOn)
{
green.EnableKeyword("_EMISSION");
green.SetTexture("_EmissionMap", greenG);
greenOn = true;
if (withArrow)
{
EnableArrow();
}
if (twoSided)
{
secondSide.EnableGreen(false);
}
}
}
public void EnableYellow()
{
if (!yellowOn)
{
yellow.EnableKeyword("_EMISSION");
yellow.SetTexture("_EmissionMap", yellowG);
yellowOn = true;
if (twoSided)
{
secondSide.EnableYellow();
}
}
}
public void EnableRed()
{
if (!redOn)
{
red.EnableKeyword("_EMISSION");
red.SetTexture("_EmissionMap", redG);
redOn = true;
if (twoSided)
{
secondSide.EnableRed();
}
}
}
public void EnableArrow()
{
if (!arrowOn && hasArrow)
{
arrow.EnableKeyword("_EMISSION");
arrow.SetTexture("_EmissionMap", arrowG);
arrowOn = true;
if (twoSided)
{
secondSide.EnableArrow();
}
}
}
public void DisableGreen(bool withArrow)
{
if (greenOn)
{
green.DisableKeyword("_EMISSION");
greenOn = false;
if (withArrow && hasArrow)
{
DisableArrow();
}
if (twoSided)
{
secondSide.DisableGreen(false);
}
}
}
public void DisableYellow()
{
if (yellowOn)
{
yellow.DisableKeyword("_EMISSION");
yellowOn = false;
if (twoSided)
{
secondSide.DisableYellow();
}
}
}
public void DisableRed()
{
if (redOn)
{
red.DisableKeyword("_EMISSION");
redOn = false;
if (twoSided)
{
secondSide.DisableRed();
}
}
}
public void DisableArrow()
{
if (arrowOn)
{
arrow.DisableKeyword("_EMISSION");
arrowOn = false;
if (twoSided)
{
secondSide.DisableArrow();
}
}
}
public void FlickerGreen(float time, float rate)
{
if (twoSided)
{
secondSide.FlickerGreen(time, rate);
}
flickerTime = time;
flickerRate = flickerCurrent = rate;
flickerGreen = true;
}
}