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.

215 lines
6.4 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace BuildSystem
{
public class SetPanel : MonoBehaviour
{
GridUI grid;
PlaceObject_SO placeObject;
public Image img;
public Transform road;
public Transform[] dir;
public GameObject cansetPre;
public GameObject notsetPre;
public GameObject roadPre;
public Button close;
public Button sure;
private void Awake()
{
close.onClick.AddListener(() => {
gameObject.SetActive(false);
});
sure.onClick.AddListener(SetData);
}
public void Init(GridUI grid, PlaceObject_SO placeObject_SO, Sprite sprite)
{
this.grid = grid;
placeObject = placeObject_SO;
this.img.sprite = sprite;
CreatePanel();
}
void CreatePanel()
{
List<Toggle> jilu = new List<Toggle>();
//
int roadID = 1;
for (int i = 0; i < placeObject.roadGoInfo.Count; i++)
{
object[] curRoadGoInfo = placeObject.roadGoInfo[i];
//判断该车道是否存在
bool flag = false;
foreach (object o in curRoadGoInfo)
{
if (o != null)
{
flag = true;
break;
}
}
//对存在车道的道路进行ui创建
if (flag)
{
GameObject text = Instantiate(roadPre, road);
text.GetComponent<Text>().text = roadID.ToString();
int nonullnumber = 0;
jilu.Clear();
for (int l = 0; l < curRoadGoInfo.Length; l++)
{
int transID = 0;
if (i < 3) { //-2 <0 +4
transID = l - 2;
if (transID < 0)
{
transID += 4;
}
}
else if (i < 6) //+3 >0 -4
{
transID = 3 + l;
if (transID > 3)
{
transID -= 4;
}
}
else if (i < 9)
{
transID = l;
}
else
{
transID = l + 1;
if (transID > 3)
{
transID -= 4;
}
}
if (curRoadGoInfo[transID] == null)
{
Instantiate(notsetPre, dir[l]);
}
else
{
nonullnumber++;
GameObject toggle = Instantiate(cansetPre, dir[l]);
toggle.GetComponent<Toggle>().isOn = (bool)curRoadGoInfo[transID];
jilu.Add(toggle.GetComponent<Toggle>());
}
}
if (nonullnumber == 1) {
jilu[0].interactable = false;
}
jilu.Clear();
roadID++;
}
}
}
void SetData()
{
int roadID = 0;
for(int i=0;i< placeObject.roadGoInfo.Count;i++)
{
object[] curRoadGoInfo = placeObject.roadGoInfo[i];
//判断车道是否存在
bool flag = false;
foreach (object o in curRoadGoInfo)
{
if (o != null)
{
flag = true;
break;
}
}
if (flag)
{
for (int d = 0; d < 4; d++)
{
int transID = 0;
if (i < 3)
{ //-2 <0 +4
transID = d + 2;
if (transID > 03)
{
transID -= 4;
}
}
else if (i < 6) //+3 >0 -4
{
transID = d + 1;
if (transID > 3)
{
transID -= 4;
}
}
else if (i < 9)
{
transID = d;
}
else
{
transID = d - 1;
if (transID < 0)
{
transID += 4;
}
}
if (dir[transID].GetChild(roadID).GetComponent<Toggle>())
{
curRoadGoInfo[d] = dir[transID].GetChild(roadID).GetComponent<Toggle>().isOn;
}
else
{
curRoadGoInfo[d] = null;
}
}
roadID++;
}
}
grid.SetData(placeObject.roadGoInfo);
}
private void OnDisable()
{
//清空之前设置的显示
for (int t = 0; t < road.childCount; t++)
{
Destroy(road.GetChild(t).gameObject);
}
foreach (Transform trans in dir)
{
for (int t = 0; t < trans.childCount; t++)
{
Destroy(trans.GetChild(t).gameObject);
}
}
BuildSystemManager.Instance.isCanPlace = true;
}
private void OnEnable()
{
BuildSystemManager.Instance.isCanPlace = false;
}
}
}