using HxGame.Data; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; public class UIEditMapConfig : MonoBehaviour { public InputField txtMapName; //地图名称 public InputField txtEnterLv; //进入等级 public InputField txtReturnMapId; //回城地图ID public InputField txtReturnMapCellPoint; //回城坐标 //模式 public Toggle togModePK; //PK public Toggle togModeSZ; //氏族 public Toggle togModeTeam; //团队 public Toggle togModeLJ; //练级 public Toggle togModeCZ; //城战 //使用、掉落 public Toggle togDeadFall; //是否死亡掉落 public Toggle togUseRandom; //能否使用随机卷 public Toggle togUseUnderground; //能否使用地城 public Toggle togUseBack; //能否使用回城 public Toggle togUseItem; //能否使用药品 public Toggle togFuBen; //是否副本地图 public Toggle togEditRelives; public Toggle togEditTeleports; public Toggle togEditMonsters; public Toggle togEditNPCs; public Toggle togEditAudioTriggers; public Toggle togEditTriggers; public Toggle togEditConditions; public Toggle togEditFuBen; public Toggle togEditJuBao; // Start is called before the first frame update void Start() { AddInputNameClickEvent(txtReturnMapCellPoint); //AddInputNameClickEvent(txtReliveMapCellPoint); } public void Cleanup() { txtMapName.text = string.Empty; txtEnterLv.text = string.Empty; txtReturnMapId.text = string.Empty; txtReturnMapCellPoint.text = string.Empty; togModePK.isOn = false; togModeSZ.isOn = false; togModeTeam.isOn = false; togModeLJ.isOn = false; togModeCZ.isOn = false; togDeadFall.isOn = false; togUseRandom.isOn = false; togUseUnderground.isOn = false; togUseBack.isOn = false; togUseItem.isOn = false; togFuBen.isOn = false; togEditRelives.isOn = false; togEditTeleports.isOn = false; togEditMonsters.isOn = false; togEditNPCs.isOn = false; togEditAudioTriggers.isOn = false; togEditTriggers.isOn = false; togEditConditions.isOn = false; togEditFuBen.isOn = false; togEditJuBao.isOn = false; UIWindow.Instance.uiRelivesPanel.RemoveAll(); UIWindow.Instance.uiTeleportPanel.RemoveAll(); UIWindow.Instance.uiAudioTriggerPanel.RemoveAll(); UIWindow.Instance.uiSellAreasPanel.RemoveAll(); UIWindow.Instance.uiMonstersPanel.RemoveAll(); UIWindow.Instance.uiNpcsPanel.RemoveAll(); UIWindow.Instance.uiTriggersPanel.RemoveAll(); UIWindow.Instance.uiConditionsPanel.RemoveAll(); UIWindow.Instance.uiFuBensPanel.RemoveAll(); UIWindow.Instance.uiJuBaosPanel.RemoveAll(); } private void AddInputNameClickEvent(InputField input) //可以在Awake中调用 { var eventTrigger = input.gameObject.AddComponent(); UnityAction selectEvent = OnInputFieldClicked; EventTrigger.Entry onClick = new EventTrigger.Entry() { eventID = EventTriggerType.PointerClick }; onClick.callback.AddListener(selectEvent); eventTrigger.triggers.Add(onClick); } private void OnInputFieldClicked(BaseEventData data) { } public void OnEditTeleportToggle() { if (togEditTeleports.isOn) { UIWindow.Instance.uiTeleportPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.TeleportCell); } else { UIWindow.Instance.uiTeleportPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.TeleportCell); } } public void OnEditRelivesToggle() { if (togEditRelives.isOn) { UIWindow.Instance.uiRelivesPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.ReliveCell); } else { UIWindow.Instance.uiRelivesPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.ReliveCell); } } public void OnEditMonsterToggle() { if (togEditMonsters.isOn) { UIWindow.Instance.uiMonstersPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.MonsterArea); } else { UIWindow.Instance.uiMonstersPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.MonsterArea); } } public void OnEditNpcToggle() { if (togEditNPCs.isOn) { UIWindow.Instance.uiNpcsPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.NpcCell); } else { UIWindow.Instance.uiNpcsPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.NpcCell); } } public void OnEditAudioTriggerToggle() { if(togEditAudioTriggers.isOn) { UIWindow.Instance.uiAudioTriggerPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.AudioTrigger); } else { UIWindow.Instance.uiAudioTriggerPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.AudioTrigger); } } public void OnTriggerToggle() { if (togEditTriggers.isOn) { UIWindow.Instance.uiTriggersPanel.gameObject.SetActive(true); MapManager.Instance.ShowSpecialPoint(MapManager.EditCellType.TriggerCell); } else { UIWindow.Instance.uiTriggersPanel.gameObject.SetActive(false); MapManager.Instance?.HideSpecialPoint(MapManager.EditCellType.TriggerCell); } } public void OnConditionToggle() { if (togEditConditions.isOn) UIWindow.Instance.uiConditionsPanel.gameObject.SetActive(true); else UIWindow.Instance.uiConditionsPanel.gameObject.SetActive(false); } public void OnFuBenToggle() { if (togEditFuBen.isOn) UIWindow.Instance.uiFuBensPanel.gameObject.SetActive(true); else UIWindow.Instance.uiFuBensPanel.gameObject.SetActive(false); } public void OnJuBaoToggle() { if (togEditJuBao.isOn) UIWindow.Instance.uiJuBaosPanel.gameObject.SetActive(true); else UIWindow.Instance.uiJuBaosPanel.gameObject.SetActive(false); } bool CheckValid() { if (string.IsNullOrEmpty(txtMapName.text)) { UIWindow.Instance.ShowMessage("请填写地图名称"); return false; } if (string.IsNullOrEmpty(txtEnterLv.text)) { UIWindow.Instance.ShowMessage("请填写进入地图等级"); return false; } if (string.IsNullOrEmpty(txtReturnMapId.text)) { UIWindow.Instance.ShowMessage("请填写回城地图ID"); return false; } if (string.IsNullOrEmpty(txtReturnMapCellPoint.text)) { UIWindow.Instance.ShowMessage("请填写回城地图坐标"); return false; } string[] tmp = txtReturnMapCellPoint.text.Split(','); if (tmp.Length != 2) { UIWindow.Instance.ShowMessage("回城坐标 错误"); return false; } //if (string.IsNullOrEmpty(txtReliveMapId.text)) //{ // UIWindow.Instance.ShowMessage("请填写复活地图ID"); // return false; //} //if (string.IsNullOrEmpty(txtReliveMapCellPoint.text)) //{ // UIWindow.Instance.ShowMessage("请填写复活地图坐标"); // return false; //} //tmp = txtReliveMapCellPoint.text.Split(','); //if (tmp.Length != 2) //{ // UIWindow.Instance.ShowMessage("复活坐标 错误"); // return false; //} return true; } public void SaveMapConfig() { if (!CheckValid()) return; MapConfig mc = new MapConfig(); mc.mapName = txtMapName.text; mc.enterLv = Convert.ToInt32(txtEnterLv.text); mc.returnMapId = Convert.ToInt32(txtReturnMapId.text); string[] tmp = txtReturnMapCellPoint.text.Split(','); int x = Convert.ToInt32(tmp[0]); int y = Convert.ToInt32(tmp[1]); mc.returnMapCellPoint = new Vector2Int(x, y); if (togModePK.isOn) mc.roleMode |= RoleMode.PK; if (togModeSZ.isOn) mc.roleMode |= RoleMode.ShiZu; if (togModeTeam.isOn) mc.roleMode |= RoleMode.Team; if (togModeLJ.isOn) mc.roleMode |= RoleMode.LianJi; if (togModeCZ.isOn) mc.roleMode |= RoleMode.ChengZhan; if (togUseRandom.isOn) mc.useMode |= UseMode.UseRandom; if (togUseUnderground.isOn) mc.useMode |= UseMode.UseUnderground; if (togUseBack.isOn) mc.useMode |= UseMode.UseBack; if (togUseItem.isOn) mc.useMode |= UseMode.UseItem; if (togFuBen.isOn) mc.useMode |= UseMode.FuBen; mc.deadFall = togDeadFall.isOn; //传送点 Transform trans = UIWindow.Instance.uiTeleportPanel.itemParent; for(int i=0; i(); if (!item.CheckValid()) return; MapConfig.TeleportConfig tel = new MapConfig.TeleportConfig(); tmp = item.txtPos.text.Split(','); if (tmp.Length != 2) return; x = Convert.ToInt32(tmp[0]); y = Convert.ToInt32(tmp[1]); tel.pos = new Vector2Int(x, y); tel.nextMapId = Convert.ToInt32(item.txtNextMapID.text); tmp = item.txtNextMapPos.text.Split(','); if (tmp.Length != 2) return; x = Convert.ToInt32(tmp[0]); y = Convert.ToInt32(tmp[1]); tel.nextMapPos = new Vector2Int(x, y); mc.teleportConfigs.Add(tel); } //复活点 trans = UIWindow.Instance.uiRelivesPanel.itemParent; for (int i = 0; i < trans.childCount; i++) { UIReliveItem item = trans.GetChild(i).GetComponent(); if (!item.CheckValid()) return; MapConfig.ReliveConfig relive = new MapConfig.ReliveConfig(); relive.reliveType = (ReliveType)item.dropType.value; relive.mapId = Convert.ToInt32(item.txtMapId.text); tmp = item.txtPos.text.Split(','); if (tmp.Length != 2) return; x = Convert.ToInt32(tmp[0]); y = Convert.ToInt32(tmp[1]); relive.pos = new Vector2Int(x, y); relive.radius = Convert.ToInt32(item.txtRadius.text); mc.relivesConfig.Add(relive); } //摆摊区 trans = UIWindow.Instance.uiSellAreasPanel.itemParent; for (int i = 0; i < trans.childCount; i++) { UISellAreaItem item = trans.GetChild(i).GetComponent(); if (!item.CheckValid()) return; MapConfig.AreaConfig sellArea = new MapConfig.AreaConfig(); tmp = item.txtPos.text.Split(','); if (tmp.Length != 2) return; x = Convert.ToInt32(tmp[0]); y = Convert.ToInt32(tmp[1]); sellArea.pos = new Vector2Int(x, y); sellArea.radius = Convert.ToInt32(item.txtRadius.text); mc.sellAreasConfig.Add(sellArea); } //音效触发 trans = UIWindow.Instance.uiAudioTriggerPanel.itemParent; for (int i = 0; i < trans.childCount; i++) { UIAudioTriggerItem item = trans.GetChild(i).GetComponent(); if (!item.CheckValid()) return; MapConfig.AudioTriggerConfig audioTrigger = new MapConfig.AudioTriggerConfig(); tmp = item.txtPos.text.Split(','); if (tmp.Length != 2) return; x = Convert.ToInt32(tmp[0]); y = Convert.ToInt32(tmp[1]); audioTrigger.pos = new Vector2Int(x, y); audioTrigger.radius = Convert.ToInt32(item.txtRadius.text); audioTrigger.name = item.txtName.text; mc.audioTriggersConfig.Add(audioTrigger); } //进入条件 trans = UIWindow.Instance.uiConditionsPanel.itemParent; for (int i = 0; i < trans.childCount; i++) { UIConditionItem item = trans.GetChild(i).GetComponent(); if (!item.CheckValid()) return; var config = new MapConfig.ConditionConfig(); config.mode = (ConditionMode)item.dropMode.value; config.level = Convert.ToInt32(item.txtLevel.text); config.itemId = Convert.ToInt32(item.txtItemID.text); config.money = Convert.ToInt32(item.txtMoney.text); config.time = Convert.ToInt32(item.txtTime.text); mc.conditionsConfig.Add(config); } mc.SaveXML(MapManager.Instance._curOpenMapId); } public void LoadMapConfig(int mapId) { MapConfig mc = new MapConfig(); if (!mc.LoadXML(mapId)) return; txtMapName.text = mc.mapName; txtEnterLv.text = mc.enterLv.ToString(); txtReturnMapId.text = mc.returnMapId.ToString(); txtReturnMapCellPoint.text = $"{mc.returnMapCellPoint.x},{mc.returnMapCellPoint.y}"; if ((mc.roleMode & RoleMode.PK) != 0) togModePK.isOn = true; if ((mc.roleMode & RoleMode.ShiZu) != 0) togModeSZ.isOn = true; if ((mc.roleMode & RoleMode.Team) != 0) togModeTeam.isOn = true; if ((mc.roleMode & RoleMode.LianJi) != 0) togModeLJ.isOn = true; if ((mc.roleMode & RoleMode.ChengZhan) != 0) togModeCZ.isOn = true; if ((mc.useMode & UseMode.UseRandom) != 0) togUseRandom.isOn = true; if ((mc.useMode & UseMode.UseUnderground) != 0) togUseUnderground.isOn = true; if ((mc.useMode & UseMode.UseBack) != 0) togUseBack.isOn = true; if ((mc.useMode & UseMode.UseItem) != 0) togUseItem.isOn = true; if ((mc.useMode & UseMode.FuBen) != 0) togFuBen.isOn = true; //传送点 for (int i=0; i< mc.teleportConfigs.Count; i++) { MapConfig.TeleportConfig rc = mc.teleportConfigs[i]; UIWindow.Instance.uiTeleportPanel.AddItem(rc.pos, rc.nextMapId, rc.nextMapPos); } //复活点 for (int i = 0; i < mc.relivesConfig.Count; i++) { MapConfig.ReliveConfig rc = mc.relivesConfig[i]; UIWindow.Instance.uiRelivesPanel.AddItem((int)rc.reliveType, rc.mapId, rc.pos, rc.radius, mapId); } //摆摊区 for (int i = 0; i < mc.sellAreasConfig.Count; i++) { MapConfig.AreaConfig ac = mc.sellAreasConfig[i]; UIWindow.Instance.uiSellAreasPanel.AddItem(ac.pos, ac.radius); } //音效触发 for (int i = 0; i < mc.audioTriggersConfig.Count; i++) { MapConfig.AudioTriggerConfig ac = mc.audioTriggersConfig[i]; UIWindow.Instance.uiAudioTriggerPanel.AddItem(ac.pos, ac.radius, ac.name); } //进入条件 for (int i = 0; i < mc.conditionsConfig.Count; i++) { MapConfig.ConditionConfig cc = mc.conditionsConfig[i]; UIWindow.Instance.uiConditionsPanel.AddItem(cc); } } private void OnDisable() { togEditRelives.isOn = false; togEditTeleports.isOn = false; togEditMonsters.isOn = false; togEditNPCs.isOn = false; togEditAudioTriggers.isOn = false; togEditTriggers.isOn = false; togEditConditions.isOn = false; togEditFuBen.isOn = false; togEditJuBao.isOn = false; } }