- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Godot;
- using UI.MapEditor;
-
- namespace UI.MapEditorProject;
-
- public partial class MapEditorProjectPanel : MapEditorProject
- {
- /// <summary>
- /// 当前显示的组数据
- /// </summary>
- public UiGrid<GroupButton, DungeonRoomGroup> GroupGrid { get; private set; }
-
- /// <summary>
- /// 当前显示的房间数据
- /// </summary>
- public UiGrid<RoomButton, DungeonRoomSplit> RoomGrid { get; private set; }
-
- private EventFactory _eventFactory;
-
- public override void OnCreateUi()
- {
- //初始化枚举选项
- var roomTypes = Enum.GetValues<DungeonRoomType>();
- var optionButton = S_RoomTypeButton.Instance;
- optionButton.AddItem("全部", 0);
- for (var i = 0; i < roomTypes.Length; i++)
- {
- var dungeonRoomType = roomTypes[i];
- if (dungeonRoomType == DungeonRoomType.None) continue;
- optionButton.AddItem(DungeonManager.DungeonRoomTypeToDescribeString(dungeonRoomType),
- (int)dungeonRoomType + 1);
- }
-
- GroupGrid = new UiGrid<MapEditorProject.GroupButton, DungeonRoomGroup>(S_GroupButton, typeof(GroupButtonCell));
- GroupGrid.SetCellOffset(new Vector2I(0, 2));
- GroupGrid.SetHorizontalExpand(true);
-
- RoomGrid = new UiGrid<MapEditorProject.RoomButton, DungeonRoomSplit>(S_RoomButton, typeof(RoomButtonCell));
- RoomGrid.SetAutoColumns(true);
- RoomGrid.SetCellOffset(new Vector2I(10, 10));
- RoomGrid.SetHorizontalExpand(true);
-
- S_GroupSearchButton.Instance.Pressed += OnSearchGroupButtonClick;
- S_GroupEditButton.Instance.Pressed += OnEditGroup;
- S_GroupAddButton.Instance.Pressed += OnCreateGroupClick;
- S_GroupDeleteButton.Instance.Pressed += OnDeleteGroup;
-
- S_RoomSearchButton.Instance.Pressed += OnSearchRoomButtonClick;
- S_RoomAddButton.Instance.Pressed += OnCreateRoomClick;
- S_RoomEditButton.Instance.Pressed += OnEditRoom;
- S_RoomDeleteButton.Instance.Pressed += OnDeleteRoom;
-
- _eventFactory = EventManager.CreateEventFactory();
- _eventFactory.AddEventListener(EventEnum.OnCreateGroupFinish, OnCreateGroupFinish);
- _eventFactory.AddEventListener(EventEnum.OnDeleteGroupFinish, OnDeleteGroupFinish);
- _eventFactory.AddEventListener(EventEnum.OnCreateRoomFinish, OnCreateRoomFinish);
- }
-
- public override void OnShowUi()
- {
- RefreshGroup();
- OnSearchRoomButtonClick();
- }
-
- public override void OnDestroyUi()
- {
- _eventFactory.RemoveAllEventListener();
- _eventFactory = null;
- GroupGrid.Destroy();
- GroupGrid = null;
-
- RoomGrid.Destroy();
- RoomGrid = null;
- }
-
- /// <summary>
- /// 刷新组数据
- /// </summary>
- public void RefreshGroup()
- {
- MapProjectManager.RefreshMapGroup();
- OnSearchGroupButtonClick();
- }
-
- /// <summary>
- /// 选中地牢组
- /// </summary>
- public void SelectGroup(DungeonRoomGroup group)
- {
- EditorTileMapManager.SetSelectDungeonGroup(group);
- OnSearchRoomButtonClick();
- }
-
- /// <summary>
- /// 选择地图并打开地图编辑器
- /// </summary>
- public void OpenSelectRoom(DungeonRoomSplit room, TileSetSplit tileSetSplit)
- {
- //创建地牢Ui
- var mapEditor = ParentUi.OpenNextUi<MapEditorPanel>(UiManager.UiNames.MapEditor);
- //加载地牢
- mapEditor.LoadMap(room, tileSetSplit);
- }
-
- //搜索组按钮点击
- private void OnSearchGroupButtonClick()
- {
- var select = GroupGrid.SelectIndex;
- if (select < 0)
- {
- select = 0;
- }
-
- //输入文本
- var text = S_GroupSearchInput.Instance.Text;
- if (!string.IsNullOrEmpty(text))
- {
- var str = text.Trim().ToLower();
- var list = new List<DungeonRoomGroup>();
- foreach (var valuePair in MapProjectManager.GroupMap)
- {
- if (valuePair.Value.GroupName.Trim().ToLower().Contains(str))
- {
- list.Add(valuePair.Value);
- }
- }
-
- GroupGrid.SetDataList(list.ToArray());
- }
- else
- {
- GroupGrid.SetDataList(MapProjectManager.GroupMap.Values.ToArray());
- }
-
- GroupGrid.SelectIndex = select;
- }
-
- //搜索房间按钮点击
- private void OnSearchRoomButtonClick()
- {
- if (EditorTileMapManager.SelectDungeonGroup != null)
- {
- //输入文本
- var text = S_RoomSearchInput.Instance.Text;
- //房间类型
- var roomType = S_RoomTypeButton.Instance.GetSelectedId();
-
- IEnumerable<DungeonRoomSplit> result = EditorTileMapManager.SelectDungeonGroup.GetAllRoomList();
-
- //名称搜索
- if (!string.IsNullOrEmpty(text))
- {
- var queryText = text.Trim().ToLower();
- result = result.Where(split =>
- {
- return split.RoomInfo.RoomName.Trim().ToLower().Contains(queryText);
- });
- }
-
- //类型搜索
- if (roomType > 0)
- {
- var type = (DungeonRoomType)(roomType - 1);
- result = result.Where(split => split.RoomInfo.RoomType == type);
- }
-
- RoomGrid.SetDataList(result.ToArray());
- }
- else
- {
- RoomGrid.RemoveAll();
- }
- }
-
- //创建组按钮点击
- private void OnCreateGroupClick()
- {
- EditorWindowManager.ShowCreateGroup(CreateGroup);
- }
-
- //编辑组按钮点击
- private void OnEditGroup()
- {
- if (GroupGrid.SelectIndex != -1)
- {
- EditorWindowManager.ShowEditGroup(GroupGrid.SelectData, EditGroup);
- }
- else
- {
- EditorWindowManager.ShowTips("提示", "请选择需要编辑的组!");
- }
- }
-
- //删除组按钮点击
- private void OnDeleteGroup()
- {
- if (GroupGrid.SelectIndex != -1)
- {
- EditorWindowManager.ShowDelayConfirm("提示", "确定删除该组吗?\n该操作不可取消!", 5, DeleteGroup);
- }
- else
- {
- EditorWindowManager.ShowTips("提示", "请选择需要删除的组!");
- }
- }
-
- //创建地牢房间按钮点击
- private void OnCreateRoomClick()
- {
- var groupName = EditorTileMapManager.SelectDungeonGroup != null
- ? EditorTileMapManager.SelectDungeonGroup.GroupName
- : null;
- EditorWindowManager.ShowCreateRoom(groupName, Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0), CreateRoom);
- }
-
-
- //编辑房间
- private void OnEditRoom()
- {
- var selectRoom = RoomGrid.SelectData;
- if (selectRoom == null)
- {
- EditorWindowManager.ShowTips("提示", "请选择需要编辑的房间!");
- }
- else
- {
- EditorWindowManager.ShowEditRoom(selectRoom, (room) =>
- {
- //保存房间数据
- MapProjectManager.SaveRoomInfo(room);
- OnSearchRoomButtonClick();
- });
- }
- }
-
- //删除房间
- private void OnDeleteRoom()
- {
- var selectRoom = RoomGrid.SelectData;
- if (selectRoom == null)
- {
- EditorWindowManager.ShowTips("提示", "请选择需要删除的房间!");
- }
- else
- {
- EditorWindowManager.ShowDelayConfirm("提示", $"是否删除房间: {selectRoom.RoomInfo.RoomName}, 该操作无法撤销!", 3, result =>
- {
- if (result)
- {
- //删除房间
- if (MapProjectManager.DeleteRoom(EditorTileMapManager.SelectDungeonGroup, selectRoom))
- {
- MapProjectManager.SaveGroupMap();
- OnSearchRoomButtonClick();
- }
- }
- });
- }
- }
-
- //创建地牢组
- private void CreateGroup(DungeonRoomGroup group)
- {
- MapProjectManager.CreateGroup(group);
- }
-
- //编辑地牢组
- private void EditGroup(DungeonRoomGroup group)
- {
- MapProjectManager.SaveGroupMap();
- }
-
- //删除地牢组
- private void DeleteGroup(bool v)
- {
- if (v)
- {
- MapProjectManager.DeleteGroup(GroupGrid.SelectData.GroupName);
- }
- }
-
- //创建房间
- private void CreateRoom(DungeonRoomSplit roomSplit)
- {
- MapProjectManager.CreateRoom(roomSplit);
- }
-
- //创建地牢组完成
- private void OnCreateGroupFinish(object group)
- {
- OnSearchGroupButtonClick();
- }
-
- //删除地牢组完成
- private void OnDeleteGroupFinish(object group)
- {
- OnSearchGroupButtonClick();
- }
-
- //创建地牢房间完成
- private void OnCreateRoomFinish(object roomSplit)
- {
- OnSearchRoomButtonClick();
- }
- }