using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using UnityEngine; using UnityEngine.UI; using AX.MessageSystem; using System; public class FirstNodeManager : MonoBehaviour { public Button addButton; public Button deleteButton; public Button editorButton; public Transform itemParent; public GameObject nodeWindow; private GameObject itemPrefab; private List list; public static FirstNodeObject selectNode; void Awake() { MessageDispatcher.AddListener("DataInitializationComplete", SetItemUI); } // Use this for initialization void Start() { addButton.onClick.AddListener(AddNodeWindow); deleteButton.onClick.AddListener(DeleteNodeWindow); editorButton.onClick.AddListener(EditorNodeWindow); itemPrefab = Resources.Load("UI/FirstNodeItem") as GameObject; //list = DisasterManager.firstNodeObjects; MessageDispatcher.AddListener("PlayStatusChanged", SetUIByPlayStatus); SetUI(); } private void SetItemUI(IMessage obj) { if (itemPrefab==null) { itemPrefab = Resources.Load("UI/FirstNodeItem") as GameObject; } list = DisasterManager.firstNodeObjects; DrawItem(); } private void OnDestroy() { MessageDispatcher.RemoveListener("PlayStatusChanged", SetUIByPlayStatus); MessageDispatcher.RemoveListener("DataInitializationComplete", SetItemUI); } // Update is called once per frame void Update() { } /// /// 初始化第一节点UI /// private void DrawItem() { selectNode = null; foreach (Transform item in itemParent) { Destroy(item.gameObject); } for (int i = 0; i < list.Count; i++) { AddNodeItem(list[i], i); } } private void AddNodeWindow() { nodeWindow.SetActive(true); var node = new FirstNodeObject(); node.nodeID = -1; nodeWindow.GetComponent().SetWindow(node); } private void DeleteNodeWindow() { if (selectNode == null) { return; } ResourceLoadWindow.Instance.LoadTipWindow("确定删除该一级节点?", DeleteNode, null); } private void EditorNodeWindow() { if (selectNode == null) { return; } nodeWindow.SetActive(true); nodeWindow.GetComponent().SetWindow(selectNode); } /// /// 新增一级节点 /// /// public void AddNode(FirstNodeObject node) { if (node.nodeName == "") { ResourceLoadWindow.Instance.LoadTextHintWindow("节点名不能为空", 0.5f); return; } //查看有没有相同名称 if (CheckSameName(node.nodeName, node.nodeID)) { ResourceLoadWindow.Instance.LoadTextHintWindow("已有相同名称", 0.5f); return; } if (list.Count >= 12) { ResourceLoadWindow.Instance.LoadTextHintWindow("不能再生成一级目录", 0.5f); return; } node.nodeID = GetNextID(); list.Add(node); AddNodeItem(node, list.Count - 1);//UI中添加 AddXml(node);//xml文件中添加 nodeWindow.SetActive(false); } private void AddNodeItem(FirstNodeObject obj, int index) { GameObject item = Instantiate(itemPrefab, itemParent) as GameObject; item.GetComponent().group = itemParent.GetComponent(); item.GetComponent().SetItem(obj, index); } private void AddXml(FirstNodeObject obj) { string filepath = DisasterManager.GetNodeListXML(); if (File.Exists(filepath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); XmlNode nodes = xmlDoc.SelectSingleNode("NodeList/FirstNode/Nodes"); XmlElement node = xmlDoc.CreateElement("Node"); node.SetAttribute("ID", obj.nodeID.ToString()); node.SetAttribute("Name", obj.nodeName); nodes.AppendChild(node); xmlDoc.Save(filepath); } } /// /// 删除一级节点 /// private void DeleteNode() { int index = 0; foreach (Transform item in itemParent) { var msg = item.GetComponent(); if (msg.obj == selectNode) { index = msg.index; Destroy(item.gameObject); break; } } DeleteXml(selectNode);//xml文件中删除 list.Remove(selectNode); selectNode = null; MessageDispatcher.SendMessage("DeleteFirstNode", index);//删除后需改变其他节点显示索引值 } private void DeleteXml(FirstNodeObject obj) { string filepath = DisasterManager.GetNodeListXML(); if (File.Exists(filepath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); XmlNode nodes = xmlDoc.SelectSingleNode("NodeList/FirstNode/Nodes"); XmlNodeList nodeList = nodes.ChildNodes; for (int i = 0; i < nodeList.Count; i++) { var node = nodeList[i] as XmlElement; if (node.GetAttribute("ID") == obj.nodeID.ToString()) { nodes.RemoveChild(node); break; } } xmlDoc.Save(filepath); } } /// /// 编辑一级节点 /// /// public void EditorNode(FirstNodeObject node) { if (node.nodeName == "") { ResourceLoadWindow.Instance.LoadTextHintWindow("节点名不能为空", 0.5f); return; } //查看有没有相同名称 if (CheckSameName(node.nodeName, node.nodeID)) { ResourceLoadWindow.Instance.LoadTextHintWindow("已有相同名称", 0.5f); return; } EditorNodeItem(node);//UI中修改 EditorXML(node);//xml文件中修改 nodeWindow.SetActive(false); } private void EditorNodeItem(FirstNodeObject obj) { foreach (Transform item in itemParent) { var msg = item.GetComponent(); if (msg.obj.nodeID == obj.nodeID) { msg.SetUI(); break; } } } private void EditorXML(FirstNodeObject obj) { string filepath = DisasterManager.GetNodeListXML(); if (File.Exists(filepath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); XmlNode nodes = xmlDoc.SelectSingleNode("NodeList/FirstNode/Nodes"); XmlNodeList nodeList = nodes.ChildNodes; for (int i = 0; i < nodeList.Count; i++) { var node = nodeList[i] as XmlElement; if (node.GetAttribute("ID") == obj.nodeID.ToString()) { node.SetAttribute("Name", obj.nodeName.ToString()); break; } } xmlDoc.Save(filepath); } } private void SetUI() { if (DisasterManager.editorRight) { addButton.gameObject.SetActive(true); deleteButton.gameObject.SetActive(true); editorButton.gameObject.SetActive(true); } else { addButton.gameObject.SetActive(false); deleteButton.gameObject.SetActive(false); editorButton.gameObject.SetActive(false); } } private void SetUIByPlayStatus(IMessage data) { if (DisasterManager.editorRight) { var playStatus = ReplaySetting.PlayStatus; if (playStatus == PlayStatus.normal) { addButton.gameObject.SetActive(true); deleteButton.gameObject.SetActive(true); editorButton.gameObject.SetActive(true); } else if (playStatus == PlayStatus.isEditor) { addButton.gameObject.SetActive(false); deleteButton.gameObject.SetActive(false); editorButton.gameObject.SetActive(false); } else if (playStatus == PlayStatus.isReplay) { addButton.gameObject.SetActive(false); deleteButton.gameObject.SetActive(false); editorButton.gameObject.SetActive(false); } } else { addButton.gameObject.SetActive(false); deleteButton.gameObject.SetActive(false); editorButton.gameObject.SetActive(false); } } /// /// 检查是否重名 /// /// /// private bool CheckSameName(string name, int id) { foreach (var node in list) { if (node.nodeName == name) { if (node.nodeID == id)//ID相同代表同一个节点 { continue; } return true; } } return false; } /// /// 从xml文件中获取自增主键 /// /// public int GetNextID() { int result = 0; string filepath = DisasterManager.GetNodeListXML(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); XmlNode nextID = xmlDoc.SelectSingleNode("NodeList/FirstNode/NextID"); result = int.Parse(nextID.InnerText); nextID.InnerText = (result + 1).ToString(); xmlDoc.Save(filepath); return result; } public static string ToChinese(int Num) { string Number = ""; switch (Num) { case 0: Number = "一"; break; case 1: Number = "二"; break; case 2: Number = "三"; break; case 3: Number = "四"; break; case 4: Number = "五"; break; case 5: Number = "六"; break; case 6: Number = "七"; break; case 7: Number = "八"; break; case 8: Number = "九"; break; case 9: Number = "十"; break; case 10: Number = "十一"; break; case 11: Number = "十二"; break; } return Number; } }