Files
HX_MapEditor/Assets/Scripts/UI/UIMonsterPanel.cs

279 lines
9.1 KiB
C#
Raw Normal View History

2025-06-14 13:46:24 +08:00
using HxGame.Data;
using System;
using System.Collections;
using System.Collections.Generic;
2025-07-18 22:28:40 +08:00
using System.Linq;
2025-06-22 18:23:47 +08:00
using System.Threading;
2025-06-14 13:46:24 +08:00
using UnityEngine;
using UnityEngine.UI;
2025-07-18 22:28:40 +08:00
using static HxGame.Data.MonstersConfig;
2025-06-22 15:21:25 +08:00
using static System.Net.Mime.MediaTypeNames;
2025-06-14 13:46:24 +08:00
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
*
*/
public class UIMonsterPanel : MonoBehaviour
{
[HideInInspector]
public InputField curActiveInput;
[HideInInspector]
public List<string> curActiveList;
public Button btnClose;
public Button btnAddMonster;
public Button btnAddGroup;
public Button btnDeleteGroup;
#region MonsterInfo
public InputField txtMonsterID; //<2F><><EFBFBD><EFBFBD>ID
public InputField txtName; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Dropdown dropRefreshType; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRefreshTime; //ˢ<><CBA2>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>
public InputField txtCount; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRadius; //ˢ<>ַ<EFBFBD>Χ
public Dropdown dropPatrol; //Ѳ<><D1B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtPath; //Ѳ<><D1B2>·<EFBFBD><C2B7>
#endregion
public ScrollRect svMonsters;
public Transform itemParent;
public int itemIdx;
private UIMonsterItem _curMonsterItem;
2025-07-18 22:28:40 +08:00
public MonstersConfig monstersConfig = new();
2025-06-14 13:46:24 +08:00
private void Awake()
{
itemIdx = 0;
btnClose.onClick.AddListener(OnClickClose);
btnAddGroup.onClick.AddListener(OnAddGroup);
2025-06-22 15:21:25 +08:00
txtMonsterID.onEndEdit.AddListener(OnEditorMonsterId);
txtName.onEndEdit.AddListener(OnEditorMonsterName);
txtRadius.onEndEdit.AddListener(OnEditorMonsterRadius);
txtCount.onEndEdit.AddListener(OnEditorMonsterCount);
}
private void OnEditorMonsterCount(string arg0)
{
if (!int.TryParse(arg0, out var intValue))
{
UIWindow.Instance.ShowMessage("<22><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȷ");
return;
}
_curMonsterItem.monster.id = intValue;
_curMonsterItem.RefreshItem();
}
private void OnEditorMonsterRadius(string arg0)
{
if (!int.TryParse(arg0, out var intValue))
{
UIWindow.Instance.ShowMessage("<22><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȷ");
return;
}
_curMonsterItem.monster.radius = intValue;
_curMonsterItem.RefreshItem();
}
private void OnEditorMonsterName(string arg0)
{
if (_curMonsterItem == null) return;
_curMonsterItem.RefreshItem();
}
private void OnEditorMonsterId(string arg0)
{
if (_curMonsterItem == null) return;
if (!int.TryParse(arg0, out var intValue))
{
UIWindow.Instance.ShowMessage("<22><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȷ");
return;
}
_curMonsterItem.monster.id = intValue;
_curMonsterItem.RefreshItem();
2025-06-14 13:46:24 +08:00
}
private void OnClickClose()
{
UIWindow.Instance.uiEditMapConfig.togEditMonsters.isOn = false;
}
private void Cleanup()
{
txtMonsterID.text = string.Empty;
txtName.text = string.Empty;
txtRefreshTime.text = string.Empty;
txtCount.text = string.Empty;
txtRadius.text = string.Empty;
txtPath.text = string.Empty;
}
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><E9A3AC>item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
private void OnAddGroup()
{
if (_curMonsterItem == null)
return;
if(_curMonsterItem.groupId > 0)
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>ҳ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ҳ");
return;
}
2025-07-18 22:28:40 +08:00
var gropcfg = monstersConfig.monsterConfigs.Find((monster) => monster.itemIdx == _curMonsterItem.monster.itemIdx);
if (gropcfg == null) return;
int index = monstersConfig.monsterConfigs.IndexOf(gropcfg);
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index + 1, newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
prop.SetValue(newmonster, prop.GetValue(gropcfg));
2025-06-14 13:46:24 +08:00
}
2025-07-18 22:28:40 +08:00
newmonster.itemIdx = -1;
newmonster.groupId = gropcfg.itemIdx;
AddItem(newmonster);
2025-06-14 13:46:24 +08:00
}
public void AddItem()
{
Cleanup();
MonstersConfig.MonsterConfig monster = new MonstersConfig.MonsterConfig();
monster.itemIdx = ++itemIdx;
2025-07-18 22:28:40 +08:00
monster.groupId = -1;
monstersConfig.monsterConfigs.Insert(0, monster);
AddItem(monster);
2025-06-14 13:46:24 +08:00
}
public void LoadMonsterConfig(int mapId)
{
2025-07-18 22:28:40 +08:00
monstersConfig.ClearAll();
if (!monstersConfig.LoadXML(mapId))
2025-06-14 13:46:24 +08:00
return;
2025-07-18 22:28:40 +08:00
for (int i = 0; i < monstersConfig.monsterConfigs.Count; i++)
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
MonstersConfig.MonsterConfig monster = monstersConfig.monsterConfigs[i];
if (monster.itemIdx == -1) continue;
var itemMonster = AddItem(monster);
if (itemMonster == null) continue;
var groupList = monstersConfig.monsterConfigs.Where(item => item.groupId == monster.itemIdx).ToList();
foreach (var item in groupList)
{
AddItem(item);
}
2025-06-14 13:46:24 +08:00
}
}
2025-07-18 22:28:40 +08:00
public UIMonsterItem AddItem(MonstersConfig.MonsterConfig monster)
2025-06-14 13:46:24 +08:00
{
UnityEngine.Object obj = Resources.Load("Prefabs/monsterItem");
if (obj == null)
{
UIWindow.Instance.ShowMessage("monsterItem.prefabʧ<62><CAA7>");
2025-07-18 22:28:40 +08:00
return null;
2025-06-14 13:46:24 +08:00
}
2025-07-18 22:28:40 +08:00
var cfgindex = monstersConfig.monsterConfigs.IndexOf(monster);
itemIdx = Math.Max(monster.itemIdx, itemIdx);
2025-06-14 13:46:24 +08:00
GameObject go = Instantiate(obj) as GameObject; ;
go.transform.SetParent(itemParent, false);
2025-07-18 22:28:40 +08:00
go.transform.SetSiblingIndex(cfgindex);
2025-06-14 13:46:24 +08:00
UIMonsterItem item = go.transform.Find("monsterSubItem").GetComponent<UIMonsterItem>();
2025-07-18 22:28:40 +08:00
item.editCellType = MapManager.EditCellType.MonsterArea;
2025-06-14 13:46:24 +08:00
item.SetItem(monster);
item.OnClick = OnClickItem;
item.OnCopyItem = OnCopyItem;
_curMonsterItem = item;
2025-07-18 22:28:40 +08:00
return item;
2025-06-14 13:46:24 +08:00
}
public void OnClickItem(UIMonsterItem item)
{
//<2F>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ
Cleanup();
_curMonsterItem = item;
MonstersConfig.MonsterConfig monster = _curMonsterItem.monster;
txtMonsterID.text = monster.id.ToString();
dropRefreshType.value = (int)monster.createMode;
if (monster.createMode == CreateMonsterMode.Death)
txtRefreshTime.text = monster.delayTime.ToString();
else
txtRefreshTime.text = monster.strTime;
txtCount.text = monster.num.ToString();
txtRadius.text = monster.radius.ToString();
dropPatrol.value = (int)monster.patrolMode;
}
public void OnCopyItem(UIMonsterItem item)
{
2025-07-18 22:28:40 +08:00
var gropcfg = monstersConfig.monsterConfigs.Find((monster) => monster.itemIdx == item.monster.itemIdx);
if (gropcfg == null) return;
int index = monstersConfig.monsterConfigs.IndexOf(gropcfg);
if (item.monster.itemIdx == -1)
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index + 1, newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
prop.SetValue(newmonster, prop.GetValue(gropcfg));
}
newmonster.itemIdx = -1;
newmonster.groupId = gropcfg.itemIdx;
AddItem(newmonster);
2025-06-14 13:46:24 +08:00
}
2025-07-18 22:28:40 +08:00
else {
//<2F>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index,newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
prop.SetValue(newmonster, prop.GetValue(item.monster));
}
newmonster.itemIdx = ++itemIdx;
newmonster.groupId = -1;
AddItem(newmonster);
var grops = monstersConfig.monsterConfigs.FindAll((tt) => tt.groupId == item.monster.itemIdx);
foreach (var gropItem in grops)
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
MonsterConfig config = new MonsterConfig();
monstersConfig.monsterConfigs.Insert(++index, config);
foreach (var prop in typeof(MonsterConfig).GetFields())
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
prop.SetValue(config, prop.GetValue(gropItem));
2025-06-14 13:46:24 +08:00
}
2025-07-18 22:28:40 +08:00
config.groupId = gropItem.itemIdx;
config.itemIdx = -1;
AddItem(config);
2025-06-14 13:46:24 +08:00
}
}
2025-07-18 22:28:40 +08:00
}
2025-06-14 13:46:24 +08:00
2025-07-18 22:28:40 +08:00
public void SaveMonsterConfig()
{
MonstersConfig mc = new MonstersConfig();
2025-06-16 00:15:41 +08:00
int mapId = MapManager.Instance._curOpenMapId;
2025-06-14 13:46:24 +08:00
mc.SaveXML(mapId);
}
2025-07-18 22:28:40 +08:00
public void RemoveAllGrop(MonsterConfig config)
2025-06-14 13:46:24 +08:00
{
2025-07-18 22:28:40 +08:00
if (config.itemIdx == -1)
2025-06-14 13:46:24 +08:00
return;
2025-07-18 22:28:40 +08:00
foreach (Transform child in svMonsters.content)
{
UIMonsterItem item = child.GetComponentInChildren<UIMonsterItem>();
if (item != null && item.monster.groupId == config.itemIdx)
{
item.DestoryGrop();
}
}
2025-06-14 13:46:24 +08:00
}
public void RemoveAll()
{
int size = itemParent.childCount;
for (int i=0; i<size; i++)
{
DestroyImmediate(itemParent.GetChild(0).gameObject);
}
itemIdx = 0;
}
}