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.
272 lines
11 KiB
272 lines
11 KiB
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// 交通灯功能设置
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查设置是否完成
|
|
/// </summary>
|
|
private void CheckSet()
|
|
{
|
|
|
|
PutTraficLight();
|
|
this.gameObject.SetActive(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 放置红绿灯模型和UI
|
|
/// </summary>
|
|
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<TraficLightUI>();
|
|
|
|
uiGroup[i].collider = group[i].GetComponent<Collider>();
|
|
}
|
|
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<TraficLightUI>();
|
|
|
|
uiGroupLT[i].collider = groupLT[i].GetComponent<Collider>();
|
|
}
|
|
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<TraficLightUI>();
|
|
|
|
uiGroupRT[i].collider = groupRT[i].GetComponent<Collider>();
|
|
}
|
|
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<TraficLightUI>();
|
|
|
|
uiGroupUT[i].collider = groupUT[i].GetComponent<Collider>();
|
|
}
|
|
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<TraficLightUI>();
|
|
uiGroupDT[i].collider = groupDT[i].GetComponent<Collider>();
|
|
}
|
|
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;
|
|
|
|
|
|
}
|
|
}
|