using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using UnityEngine; namespace HxGame.Data { //触发模式 public enum TriggerMode { KillMonster, //击杀怪物 UseItem, //使用道具 Task, //完成任务 Npc, //交互NPC } public class TriggerConfig { public TriggerMode mode; //触发模式 public Vector2Int pos; //中心 public int radius; //半径 public int eventId; //事件id } public class TriggersConfig { public List triggersConfig = new List(); public void SaveXML(int mapId) { string path = PathUtil.GetXmlPath(mapId, "TriggersConfig"); string tmp = path.Substring(0, path.LastIndexOf('/')); if (!Directory.Exists(tmp)) Directory.CreateDirectory(tmp); if (File.Exists(path)) File.Delete(path); XmlDocument xml = new XmlDocument(); XmlDeclaration node = xml.CreateXmlDeclaration("1.0", "utf-8", "no"); xml.AppendChild(node); XmlElement Root = xml.CreateElement("config"); xml.AppendChild(Root); XmlElement xmlSettings = xml.CreateElement("Settings");//节点Settings xml.DocumentElement.AppendChild(xmlSettings); xmlSettings.SetAttribute("mapID", mapId.ToString()); XmlElement triggers = xml.CreateElement("Triggers");//节点Settings xml.DocumentElement.AppendChild(triggers); SaveTriggers(xml, triggers); xml.Save(path); UIWindow.Instance.ShowMessage("保存触发点配置成功"); } private void SaveTriggers(XmlDocument xml, XmlElement xmlElement) { XmlElement child = null; for (int i = 0; i < triggersConfig.Count; i++) { child = xml.CreateElement("Trigger"); child.SetAttribute("mode", ((int)triggersConfig[i].mode).ToString()); child.SetAttribute("indexX", triggersConfig[i].pos.x.ToString()); child.SetAttribute("indexY", triggersConfig[i].pos.y.ToString()); child.SetAttribute("radius", triggersConfig[i].radius.ToString()); child.SetAttribute("eventId", triggersConfig[i].eventId.ToString()); xmlElement.AppendChild(child); } } public bool LoadXML(int mapId) { string path = PathUtil.GetXmlPath(mapId, "TriggersConfig"); if (!File.Exists(path)) { UIWindow.Instance.ShowMessage("没有找到触发点配置文件"); return false; } XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(path); XmlNode xmlRoot = xmlDocument.SelectSingleNode("config"); XmlNode xmlSettings = xmlRoot.SelectSingleNode("Settings"); int id = Convert.ToInt32(xmlSettings.Attributes.GetNamedItem("mapID").Value); if (id != mapId) { UIWindow.Instance.ShowMessage("地图ID错误,请检查NpcsConfig配置文件"); return false; } XmlNode triggers = xmlRoot.SelectSingleNode("Triggers"); LoadTriggers(triggers); return true; } private void LoadTriggers(XmlNode xmlNodes) { if (xmlNodes == null) return; XmlNode xmlNode = null; XmlNodeList xmlNodeList = xmlNodes.ChildNodes; int x, y; for (int i = 0; i < xmlNodeList.Count; i++) { xmlNode = xmlNodeList.Item(i); if (xmlNode.Name != "Trigger") continue; var t = new TriggerConfig(); t.mode = (TriggerMode)Convert.ToInt32(xmlNode.Attributes.GetNamedItem("mode").Value); x = Convert.ToInt32(xmlNode.Attributes.GetNamedItem("indexX").Value); y = Convert.ToInt32(xmlNode.Attributes.GetNamedItem("indexY").Value); t.pos = new Vector2Int(x, y); t.radius = Convert.ToInt32(xmlNode.Attributes.GetNamedItem("radius").Value); t.eventId = Convert.ToInt32(xmlNode.Attributes.GetNamedItem("eventId").Value); triggersConfig.Add(t); } } } }