using UnityEngine;
using UnityEngine.UI;
///
/// 交通灯功能设置
///
public class TraficLightSet : MonoBehaviour
{
public Sprite upTImg, downTImg, leftTImg, rightTImg,crossRoadImg;
public TraficTimeSet upSet, downSet, leftSet, rightSet;
[Header("UI组件")]
public Button setOverBtn;
public Image roadBGImg;
public GameObject lightUIPrefab;
public GameObject lightModelPrefab;
private TraficLightPut currentPut;
private void Start()
{
setOverBtn.onClick.AddListener(CheckSet);
}
///
/// 检查设置是否完成
///
private void CheckSet()
{
PutTraficLight();
this.gameObject.SetActive(false);
}
///
/// 放置红绿灯模型和UI
///
private void PutTraficLight()
{
switch (currentPut.traficType)
{
case TraficRoadType.十:
int num = 4;
GameObject[] group = new GameObject[num];
TraficLightUI[] uiGroup = new TraficLightUI[num];
for (int i = 0; i < num; i++)
{
GameObject go = GameObject.Instantiate(lightModelPrefab);
group[i] = go;
GameObject ui = GameObject.Instantiate(lightUIPrefab);
uiGroup[i] = ui.GetComponent();
uiGroup[i].collider = group[i].GetComponent();
}
group[0].transform.position = currentPut.upPoint;
group[1].transform.position = currentPut.downPoint;
group[2].transform.position = currentPut.leftPoint;
group[3].transform.position = currentPut.rightPoint;
//转向设置
group[2].transform.eulerAngles = new Vector3(group[2].transform.eulerAngles.x,90, group[2].transform.eulerAngles.z);
group[3].transform.eulerAngles = new Vector3(group[3].transform.eulerAngles.x, 90, group[3].transform.eulerAngles.z);
float random = Random.Range(0f, 1f);
bool isGreen = random > 0.5f ? true : false;
uiGroup[0].Init(isGreen,upSet, currentPut.upPoint,LightDir.up, uiGroup[2]);//上
uiGroup[1].Init(isGreen, downSet, currentPut.downPoint,LightDir.down, uiGroup[3]);//下
uiGroup[2].Init(!isGreen, leftSet, currentPut.leftPoint,LightDir.left, uiGroup[0]);//左
uiGroup[3].Init(!isGreen, rightSet, currentPut.rightPoint,LightDir.right, uiGroup[1]);//右
break;
case TraficRoadType.leftT:
int numLT = 3;
GameObject[] groupLT = new GameObject[numLT];
TraficLightUI[] uiGroupLT = new TraficLightUI[numLT];
for (int i = 0; i < numLT; i++)
{
GameObject go = GameObject.Instantiate(lightModelPrefab);
groupLT[i] = go;
GameObject ui = GameObject.Instantiate(lightUIPrefab);
uiGroupLT[i] = ui.GetComponent();
uiGroupLT[i].collider = groupLT[i].GetComponent();
}
groupLT[0].transform.position = currentPut.upPoint;
groupLT[1].transform.position = currentPut.downPoint;
groupLT[2].transform.position = currentPut.leftPoint;
//转向设置
groupLT[2].transform.eulerAngles = new Vector3(groupLT[2].transform.eulerAngles.x, 90, groupLT[2].transform.eulerAngles.z);
float randomLT = Random.Range(0f, 1f);
bool isGreenLT = randomLT > 0.5f ? true : false;
uiGroupLT[0].Init(isGreenLT, upSet, currentPut.upPoint, LightDir.up, uiGroupLT[2]);//上
uiGroupLT[1].Init(isGreenLT, downSet, currentPut.downPoint, LightDir.down,null,uiGroupLT[0]);//下
uiGroupLT[2].Init(!isGreenLT, leftSet, currentPut.leftPoint, LightDir.left, uiGroupLT[0],null);//左
break;
case TraficRoadType.rightT:
int numRT = 3;
GameObject[] groupRT = new GameObject[numRT];
TraficLightUI[] uiGroupRT = new TraficLightUI[numRT];
for (int i = 0; i < numRT; i++)
{
GameObject go = GameObject.Instantiate(lightModelPrefab);
groupRT[i] = go;
GameObject ui = GameObject.Instantiate(lightUIPrefab);
uiGroupRT[i] = ui.GetComponent();
uiGroupRT[i].collider = groupRT[i].GetComponent();
}
groupRT[0].transform.position = currentPut.upPoint;
groupRT[1].transform.position = currentPut.downPoint;
groupRT[2].transform.position = currentPut.rightPoint;
//转向设置
groupRT[2].transform.eulerAngles = new Vector3(groupRT[2].transform.eulerAngles.x, 90, groupRT[2].transform.eulerAngles.z);
float randomRT = Random.Range(0f, 1f);
bool isGreenRT = randomRT > 0.5f ? true : false;
uiGroupRT[0].Init(isGreenRT, upSet, currentPut.upPoint, LightDir.up, uiGroupRT[2]);//上
uiGroupRT[1].Init(isGreenRT, downSet, currentPut.downPoint, LightDir.down,null, uiGroupRT[0]);//下
uiGroupRT[2].Init(!isGreenRT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupRT[0]);//右
break;
case TraficRoadType.upT:
int numUT = 3;
GameObject[] groupUT = new GameObject[numUT];
TraficLightUI[] uiGroupUT = new TraficLightUI[numUT];
for (int i = 0; i < numUT; i++)
{
GameObject go = GameObject.Instantiate(lightModelPrefab);
groupUT[i] = go;
GameObject ui = GameObject.Instantiate(lightUIPrefab);
uiGroupUT[i] = ui.GetComponent();
uiGroupUT[i].collider = groupUT[i].GetComponent();
}
groupUT[0].transform.position = currentPut.upPoint;
groupUT[1].transform.position = currentPut.leftPoint;
groupUT[2].transform.position = currentPut.rightPoint;
//转向设置
groupUT[2].transform.eulerAngles = new Vector3(groupUT[2].transform.eulerAngles.x, 90, groupUT[2].transform.eulerAngles.z);
groupUT[1].transform.eulerAngles = new Vector3(groupUT[1].transform.eulerAngles.x, 90, groupUT[1].transform.eulerAngles.z);
float randomUT = Random.Range(0f, 1f);
bool isGreenUT = randomUT > 0.5f ? true : false;
uiGroupUT[0].Init(isGreenUT, upSet, currentPut.upPoint, LightDir.up, uiGroupUT[2]);//上
uiGroupUT[1].Init(isGreenUT, leftSet, currentPut.leftPoint, LightDir.left,null, uiGroupUT[2]);//zuo
uiGroupUT[2].Init(!isGreenUT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupUT[0]);//右
break;
case TraficRoadType.downT:
int numDT = 3;
GameObject[] groupDT = new GameObject[numDT];
TraficLightUI[] uiGroupDT = new TraficLightUI[numDT];
for (int i = 0; i < numDT; i++)
{
GameObject go = GameObject.Instantiate(lightModelPrefab);
groupDT[i] = go;
GameObject ui = GameObject.Instantiate(lightUIPrefab);
uiGroupDT[i] = ui.GetComponent();
uiGroupDT[i].collider = groupDT[i].GetComponent();
}
groupDT[0].transform.position = currentPut.downPoint;
groupDT[1].transform.position = currentPut.leftPoint;
groupDT[2].transform.position = currentPut.rightPoint;
//转向设置
groupDT[2].transform.eulerAngles = new Vector3(groupDT[2].transform.eulerAngles.x, 90, groupDT[2].transform.eulerAngles.z);
groupDT[1].transform.eulerAngles = new Vector3(groupDT[1].transform.eulerAngles.x, 90, groupDT[1].transform.eulerAngles.z);
float randomDT = Random.Range(0f, 1f);
bool isGreenDT = randomDT > 0.5f ? true : false;
uiGroupDT[0].Init(isGreenDT, downSet, currentPut.downPoint, LightDir.down, uiGroupDT[2]);
uiGroupDT[1].Init(isGreenDT, leftSet, currentPut.leftPoint, LightDir.left, null, uiGroupDT[2]);
uiGroupDT[2].Init(!isGreenDT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupDT[0]);
break;
}
currentPut.gridInfo.isPlaceLight = true;
Debug.Log(currentPut.name + "交通灯:"+ currentPut.gridInfo.isPlaceLight);
}
public void ShowTraficSetPanel(TraficRoadType type,TraficLightPut put)
{
switch (type)
{
case TraficRoadType.十:
upSet.gameObject.SetActive(true);
downSet.gameObject.SetActive(true);
leftSet.gameObject.SetActive(true);
rightSet.gameObject.SetActive(true);
upSet.SetPaterner(downSet);
leftSet.SetPaterner(rightSet);
//道路背景图设置
roadBGImg.sprite = crossRoadImg;
break;
case TraficRoadType.leftT:
upSet.gameObject.SetActive(true);
downSet.gameObject.SetActive(true);
leftSet.gameObject.SetActive(true);
rightSet.gameObject.SetActive(false);
upSet.SetPaterner(downSet);
//道路背景图设置
roadBGImg.sprite = leftTImg;
break;
case TraficRoadType.rightT:
upSet.gameObject.SetActive(true);
downSet.gameObject.SetActive(true);
leftSet.gameObject.SetActive(false);
rightSet.gameObject.SetActive(true);
upSet.SetPaterner(downSet);
//道路背景图设置
roadBGImg.sprite = rightTImg;
break;
case TraficRoadType.upT:
upSet.gameObject.SetActive(false);
downSet.gameObject.SetActive(true);
leftSet.gameObject.SetActive(true);
rightSet.gameObject.SetActive(true);
leftSet.SetPaterner(rightSet);
//道路背景图设置
roadBGImg.sprite = leftTImg;
break;
case TraficRoadType.downT:
upSet.gameObject.SetActive(false);
downSet.gameObject.SetActive(true);
leftSet.gameObject.SetActive(true);
rightSet.gameObject.SetActive(true);
leftSet.SetPaterner(rightSet);
//道路背景图设置
roadBGImg.sprite = downTImg;
break;
}
//反馈完成设置
this.gameObject.SetActive(true);
currentPut = put;
}
}