You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
2.7 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public enum LightDir
{
up,
down,
left,
right
}
/// <summary>
/// 红绿灯UI
/// </summary>
public class TraficLightUI : MonoBehaviour
{
public Sprite red, yellow, green;
public Transform _target;
[SerializeField]
private float redTime, yellowTime, greenTime;
private bool _isRed, _isGreen, _isYellow = false;
private Image image;
[SerializeField]
private float timer = 0f;
private TraficLightUI _elseDirLight;
public void Init(bool isGreen, TraficTimeSet set, Transform target, LightDir dir,TraficLightUI elseDirLight)
{
image = GetComponent<Image>();
transform.SetParent(GameObject.Find("Canvas").transform);
redTime = set.redTime;
yellowTime = set.yellowTime;
greenTime = set.greenTime;
if (isGreen)
{
_isGreen = true;
image.sprite = green;
}
else
{
_isRed = true;
image.sprite = red;
}
_target = target;
//UI方向调整
switch (dir)
{
case LightDir.up:
break;
case LightDir.down:
break;
case LightDir.left:
break;
case LightDir.right:
break;
}
_elseDirLight = elseDirLight;
}
private void Update()
{
LightChange();
ZoneUI();
}
/// <summary>
/// 红绿灯切换
/// </summary>
private void LightChange()
{
if (_isGreen)
{
timer += Time.deltaTime* TraficLightManager.Instance.traficLightTimeScale;
if (timer >= greenTime)
{
_isYellow = true;
image.sprite = yellow;
_isGreen = false;
timer = 0f;
}
}
else if (_isYellow)
{
timer += Time.deltaTime* TraficLightManager.Instance.traficLightTimeScale;
if (timer >= yellowTime)
{
_isRed = true;
image.sprite = red;
_isYellow = false;
timer = 0f;
//让另一方向的灯绿
_elseDirLight._isGreen = true;
_elseDirLight.image.sprite = _elseDirLight.green;
}
}
}
/// <summary>
/// 屏幕坐标跟随3D空间
/// </summary>
private void ZoneUI()
{
if (_target != null)
{
Vector3 screenPos = Camera.main.WorldToScreenPoint(_target.position);
this.transform.position = screenPos;
}
}
}