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.
337 lines
11 KiB
337 lines
11 KiB
using AX.MessageSystem; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.UI; |
|
|
|
public class FloorsPanelManager : MonoBehaviour |
|
{ |
|
public Transform NeiParent; |
|
public Transform WaiParent; |
|
public List<FloorMessage> AllNei;//存储所有楼层内层信息 |
|
public List<FloorMessage> AllWai;//存储所有楼层的外层信息 |
|
public Transform FloorBtnsParentPanel;//所有楼层按钮显示的父对象 |
|
private GameObject FloorBtnPrefab; |
|
private ToggleGroup ParentToggleGroup; |
|
private Button OutBtn; |
|
private Button InBtn; |
|
public Scrollbar scrollbar; |
|
private List<UIFloor> ParentArea = new List<UIFloor>(); |
|
void Start() |
|
{ |
|
if (AreaNameDic.type==SceneType.chemicalBuilding) |
|
{ |
|
gameObject.SetActive(false); |
|
return; |
|
} |
|
if (FloorBtnPrefab == null) |
|
{ |
|
FloorBtnPrefab = Resources.Load("UI/FloorItem") as GameObject; |
|
} |
|
Initialization(); |
|
OutBtn = GetComponent<UIMoveManager>().MoveOut; |
|
InBtn = GetComponent<UIMoveManager>().MoveIn; |
|
scrollbar = transform.Find("Scroll View/Scrollbar Vertical").GetComponent<Scrollbar>(); |
|
scrollbar.onValueChanged.AddListener(scrollbar_valueChanged); |
|
OutBtn.onClick.AddListener(OutBtn_Click); |
|
InBtn.onClick.AddListener(InBtn_Click); |
|
MessageDispatcher.AddListener("ReplayFrame", ReplayFrameFloors); |
|
MessageDispatcher.AddListener("ReplayEvent", ReplayEventFloors); |
|
MessageDispatcher.AddListener("ToolsOn", ToolsOnChanged); |
|
} |
|
|
|
private void scrollbar_valueChanged(float value) |
|
{ |
|
GlobalVariable.FloorsScrollBarValue = value; |
|
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) |
|
{ |
|
var eventData = new EventData(); |
|
eventData.time = RecordManager.Instance.RecordTimer; |
|
eventData.cloneObjType = CloneObjType.None; |
|
eventData.eventType = RecordEventType.FloorsScrollBar; |
|
eventData.json = scrollbar.value.ToString(); |
|
|
|
RecordManager.Instance.jsonData.eventDataList.Add(eventData); |
|
} |
|
} |
|
|
|
private void InBtn_Click() |
|
{ |
|
GlobalVariable.FloorsOn = true; |
|
AddRecord(GlobalVariable.FloorsOn); |
|
MessageDispatcher.SendMessage("FloorsOn"); |
|
} |
|
|
|
private void OutBtn_Click() |
|
{ |
|
GlobalVariable.FloorsOn = false; |
|
AddRecord(GlobalVariable.FloorsOn); |
|
//foreach (Transform item in FloorBtnsParentPanel) |
|
//{ |
|
// if (item.GetComponent<UIFloor>().floorNum == 0) |
|
// { |
|
// if (item.GetComponent<Toggle>().isOn) |
|
// { |
|
// item.GetComponent<Toggle>().isOn = false; |
|
// } |
|
// } |
|
//} |
|
} |
|
|
|
private void AddRecord(bool IsOn) |
|
{ |
|
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) |
|
{ |
|
var eventData = new EventData(); |
|
eventData.time = RecordManager.Instance.RecordTimer; |
|
eventData.cloneObjType = CloneObjType.None; |
|
eventData.eventType = RecordEventType.FloorsOn; |
|
eventData.json = IsOn.ToString(); |
|
|
|
RecordManager.Instance.jsonData.eventDataList.Add(eventData); |
|
} |
|
} |
|
|
|
private void OnDestroy() |
|
{ |
|
MessageDispatcher.RemoveListener("ReplayFrame", ReplayFrameFloors); |
|
MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventFloors); |
|
MessageDispatcher.RemoveListener("ToolsOn", ToolsOnChanged); |
|
} |
|
private void ToolsOnChanged(IMessage obj) |
|
{ |
|
if (GlobalVariable.FloorsOn) |
|
{ |
|
OutBtn_Click(); |
|
GetComponent<UIMoveManager>().MoveOut_Click(); |
|
} |
|
} |
|
|
|
private void ReplayEventFloors(IMessage obj) |
|
{ |
|
var eventData = (EventData)obj.Data; |
|
if (eventData.eventType == RecordEventType.FloorsOn) |
|
{ |
|
bool IsOn = bool.Parse(eventData.json); |
|
if (IsOn) |
|
{ |
|
InBtn_Click(); |
|
GetComponent<UIMoveManager>().MoveIn_Click(); |
|
} |
|
else |
|
{ |
|
OutBtn_Click(); |
|
GetComponent<UIMoveManager>().MoveOut_Click(); |
|
} |
|
} |
|
else if (eventData.eventType == RecordEventType.FloorsScrollBar) |
|
{ |
|
scrollbar.value = float.Parse(eventData.json); |
|
} |
|
else if (eventData.eventType == RecordEventType.UIFloor) |
|
{ |
|
FloorData data = JsonUtility.FromJson<FloorData>(eventData.json); |
|
Setting(data); |
|
} |
|
} |
|
|
|
private void ReplayFrameFloors(IMessage obj) |
|
{ |
|
var objectData = (ObjectData)obj.Data; |
|
if (objectData.cloneObjType == CloneObjType.FloorsOn) |
|
{ |
|
bool IsOn = bool.Parse(objectData.json); |
|
if (IsOn) |
|
{ |
|
if (GlobalVariable.FloorsOn == false) |
|
{ |
|
InBtn_Click(); |
|
GetComponent<UIMoveManager>().MoveIn_Click(); |
|
} |
|
} |
|
else |
|
{ |
|
if (GlobalVariable.FloorsOn == true) |
|
{ |
|
OutBtn_Click(); |
|
GetComponent<UIMoveManager>().MoveOut_Click(); |
|
} |
|
} |
|
} |
|
else if (objectData.cloneObjType == CloneObjType.FloorsScrollBar) |
|
{ |
|
scrollbar.value = float.Parse(objectData.json); |
|
} |
|
else if (objectData.cloneObjType == CloneObjType.UIFloor) |
|
{ |
|
FloorData data = JsonUtility.FromJson<FloorData>(objectData.json); |
|
Setting(data); |
|
} |
|
} |
|
|
|
private void Setting(FloorData data) |
|
{ |
|
if (data.buildNum == null || data.isOn == false) |
|
{ |
|
foreach (var item in ParentArea) |
|
{ |
|
if (item.GetComponent<Toggle>().isOn) |
|
{ |
|
item.GetComponent<Toggle>().isOn = false; |
|
} |
|
} |
|
return; |
|
} |
|
UIFloor parent = null; |
|
foreach (var item in ParentArea) |
|
{ |
|
if (item.GetComponent<Toggle>().isOn) |
|
{ |
|
item.GetComponent<Toggle>().isOn = false; |
|
} |
|
if (item.buildNum == data.buildNum) |
|
parent = item; |
|
} |
|
if (Mathf.Abs(data.floorNum) == 0) |
|
{ |
|
parent.GetComponent<Toggle>().isOn = true; |
|
} |
|
else |
|
{ |
|
parent.GetComponent<Toggle>().isOn = true; |
|
foreach (var item in parent.MyChildFloors) |
|
{ |
|
if (item.GetComponent<UIFloor>().floorNum == data.floorNum |
|
&& item.GetComponent<UIFloor>().interlayerNum == data.interlayerNum) |
|
{ |
|
item.GetComponent<Toggle>().isOn = true; |
|
} |
|
} |
|
} |
|
} |
|
|
|
private void Initialization()//初始化数据信息 |
|
{ |
|
NeiParent = GameObject.Find("Scene").transform.Find("ShiNei"); |
|
WaiParent = GameObject.Find("Scene").transform.Find("ZhuTi"); |
|
foreach (Transform item in FloorBtnsParentPanel) |
|
{ |
|
Destroy(item.gameObject); |
|
} |
|
if (GetComponent<ToggleGroup>()) |
|
ParentToggleGroup = GetComponent<ToggleGroup>(); |
|
else |
|
ParentToggleGroup = gameObject.AddComponent<ToggleGroup>(); |
|
|
|
ParentToggleGroup.allowSwitchOff = true; |
|
|
|
var MaxNumNei = NeiParent.transform.childCount; |
|
for (int i = 0; i < MaxNumNei; i++) |
|
{ |
|
Transform child = NeiParent.GetChild(i); |
|
GameObject floorBtnParent = Instantiate(FloorBtnPrefab, FloorBtnsParentPanel); |
|
ToggleGroup floorBtnParentGroup = floorBtnParent.AddComponent<ToggleGroup>(); |
|
floorBtnParentGroup.allowSwitchOff = true; |
|
UIFloor floorParent = floorBtnParent.GetComponent<UIFloor>(); |
|
floorParent.GetComponent<Toggle>().group = ParentToggleGroup; |
|
int length = child.name.IndexOf("ShiNei"); |
|
string name = child.name.Substring(0, length); |
|
floorParent.MyText.text = AreaNameDic.GetAreaName(name); |
|
floorParent.buildNum = name; |
|
floorParent.floorNum = 0; |
|
floorParent.interlayerNum = 0; |
|
floorParent.HasChild.SetActive(true); |
|
floorParent.floorsPanelManager = this; |
|
floorParent.MyTarget = GetAreaTargetManager.Instance.GetTarget(name); |
|
ParentArea.Add(floorParent); |
|
var childNum = child.transform.childCount; |
|
for (int j = 0; j < childNum; j++) |
|
{ |
|
Transform childchild = child.GetChild(j); |
|
GameObject floorBtn = Instantiate(FloorBtnPrefab, FloorBtnsParentPanel); |
|
UIFloor floor = floorBtn.GetComponent<UIFloor>(); |
|
floor.GetComponent<Toggle>().group = floorBtnParentGroup; |
|
|
|
FloorMessage msg = childchild.GetComponent<FloorMessage>(); |
|
floor.MyTarget = GetTarget(childchild); |
|
floor.buildNum = msg.buildNum; |
|
floor.buildNum = msg.buildNum; |
|
floor.floorNum = msg.floorNum; |
|
floor.interlayerNum = msg.interlayerNum; |
|
floor.MyText.text = GetName(floor.floorNum, floor.interlayerNum); |
|
floor.floorsPanelManager = this; |
|
floorBtn.gameObject.SetActive(false); |
|
floorParent.MyChildFloors.Add(floorBtn.transform); |
|
if (msg != null) |
|
AllNei.Add(msg); |
|
} |
|
} |
|
var MaxNumWai = WaiParent.childCount; |
|
for (int i = 0; i < MaxNumWai; i++) |
|
{ |
|
Transform child = WaiParent.GetChild(i); |
|
|
|
var childNum = child.transform.childCount; |
|
for (int j = 0; j < childNum; j++) |
|
{ |
|
Transform childchild = child.GetChild(j); |
|
FloorMessage msg = childchild.GetComponent<FloorMessage>(); |
|
if (msg != null) |
|
AllWai.Add(msg); |
|
} |
|
} |
|
} |
|
Transform GetTarget(Transform parent) |
|
{ |
|
Transform target = null; |
|
if (parent.childCount <= 4) |
|
{ |
|
Transform child = parent.GetChild(0); |
|
int count = child.childCount; |
|
for (int i = 0; i < count; i++) |
|
{ |
|
Transform t = child.GetChild(i); |
|
if (t.name.ToUpper().Contains("_FLOOR") || t.name.ToUpper().Contains("-FLOOR")) |
|
{ |
|
target = t; |
|
break; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
int count = parent.childCount; |
|
for (int i = 0; i < count; i++) |
|
{ |
|
Transform t = parent.GetChild(i); |
|
if (t.name.ToUpper().Contains("_FLOOR")) |
|
{ |
|
target = t; |
|
break; |
|
} |
|
} |
|
} |
|
return target; |
|
} |
|
private string GetName(int floorNum, int interlayerNum) |
|
{ |
|
string result = ""; |
|
if (floorNum < 0) |
|
{ |
|
result += "B"; |
|
floorNum = -floorNum; |
|
} |
|
else |
|
{ |
|
result += "F"; |
|
} |
|
result += floorNum.ToString(); |
|
if (interlayerNum > 0) |
|
{ |
|
result += "M"; |
|
result += interlayerNum.ToString(); |
|
} |
|
return result; |
|
} |
|
}
|
|
|