using System; using System.Collections.Generic; using System.Linq; using Godot; using UI.EditorWindow; using UI.MapEditorCreateGroup; using UI.MapEditorCreateRoom; namespace UI.MapEditorProject; public partial class MapEditorProjectPanel : MapEditorProject { /// <summary> /// 当前选中的组 /// </summary> public DungeonRoomGroup SelectGroupInfo; //当前显示的组数据 private UiGrid<GroupButton, DungeonRoomGroup> _groupGrid; //当前显示的房间数据 private UiGrid<RoomButton, DungeonRoomSplit> _roomGrid; private EventFactory _eventFactory; public override void OnCreateUi() { //初始化枚举选项 var roomTypes = Enum.GetValues<DungeonRoomType>(); var optionButton = S_RoomTypeButton.Instance; optionButton.AddItem("全部", -1); for (var i = 0; i < roomTypes.Length; i++) { var dungeonRoomType = roomTypes[i]; optionButton.AddItem(DungeonManager.DungeonRoomTypeToDescribeString(dungeonRoomType), (int)dungeonRoomType); } _groupGrid = new UiGrid<GroupButton, DungeonRoomGroup>(S_GroupButton, typeof(GroupButtonCell)); _groupGrid.SetCellOffset(new Vector2I(0, 2)); _groupGrid.SetHorizontalExpand(true); _roomGrid = new UiGrid<RoomButton, DungeonRoomSplit>(S_RoomButton, typeof(RoomButtonCell)); _roomGrid.SetAutoColumns(true); _roomGrid.SetCellOffset(new Vector2I(10, 10)); _roomGrid.SetHorizontalExpand(true); } public override void OnShowUi() { S_GroupSearchButton.Instance.Pressed += OnSearchGroupButtonClick; S_RoomSearchButton.Instance.Pressed += OnSearchRoomButtonClick; S_RoomAddButton.Instance.Pressed += OnCreateRoomClick; S_GroupAddButton.Instance.Pressed += OnCreateGroupClick; RefreshGroup(); _eventFactory = EventManager.CreateEventFactory(); _eventFactory.AddEventListener(EventEnum.OnCreateGroupFinish, OnCreateGroupFinish); _eventFactory.AddEventListener(EventEnum.OnCreateRoomFinish, OnCreateRoomFinish); } public override void OnHideUi() { S_GroupSearchButton.Instance.Pressed -= OnSearchGroupButtonClick; S_RoomSearchButton.Instance.Pressed -= OnSearchRoomButtonClick; S_RoomAddButton.Instance.Pressed -= OnCreateRoomClick; S_GroupAddButton.Instance.Pressed -= OnCreateGroupClick; _eventFactory.RemoveAllEventListener(); } public override void OnDestroyUi() { _groupGrid.Destroy(); _groupGrid = null; _roomGrid.Destroy(); _roomGrid = null; } /// <summary> /// 刷新组数据 /// </summary> public void RefreshGroup() { MapProjectManager.RefreshMapGroup(); OnSearchGroupButtonClick(); } /// <summary> /// 选中地牢组 /// </summary> public void SelectGroup(DungeonRoomGroup group) { SelectGroupInfo = group; OnSearchRoomButtonClick(); } /// <summary> /// 选择地图并打开地图编辑器 /// </summary> public void SelectRoom(DungeonRoomSplit room) { HideUi(); //打开地牢Ui var mapEditor = UiManager.Open_MapEditor(); mapEditor.PrevUi = this; //加载地牢 mapEditor.LoadMap(room); } //搜索组按钮点击 private void OnSearchGroupButtonClick() { //输入文本 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()); } } //搜索房间按钮点击 private void OnSearchRoomButtonClick() { if (SelectGroupInfo != null) { //输入文本 var text = S_RoomSearchInput.Instance.Text; //房间类型 var roomType = S_RoomTypeButton.Instance.GetSelectedId(); IEnumerable<DungeonRoomSplit> result = SelectGroupInfo.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; result = result.Where(split => split.RoomInfo.RoomType == type); } _roomGrid.SetDataList(result.ToArray()); } else { _roomGrid.RemoveAll(); } } //创建组按钮点击 private void OnCreateGroupClick() { var window = UiManager.Open_EditorWindow(); window.SetWindowTitle("创建地牢组"); window.SetWindowSize(new Vector2I(700, 500)); var body = window.OpenBody<MapEditorCreateGroupPanel>(UiManager.UiName.MapEditorCreateGroup); window.SetButtonList( new EditorWindowPanel.ButtonData("确定", () => { //获取填写的数据, 并创建ui var groupInfo = body.GetGroupInfo(); if (groupInfo != null) { window.CloseWindow(); CreateGroup(groupInfo); } }), new EditorWindowPanel.ButtonData("取消", () => { window.CloseWindow(); }) ); } //创建地牢房间按钮点击 private void OnCreateRoomClick() { var window = UiManager.Open_EditorWindow(); window.SetWindowTitle("创建地牢房间"); window.SetWindowSize(new Vector2I(700, 600)); var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiName.MapEditorCreateRoom); if (SelectGroupInfo != null) { body.SetSelectGroup(SelectGroupInfo.GroupName); } body.SetSelectType(Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0)); window.SetButtonList( new EditorWindowPanel.ButtonData("确定", () => { //获取填写的数据, 并创建ui var roomSplit = body.GetRoomInfo(); if (roomSplit != null) { window.CloseWindow(); CreateRoom(roomSplit); } }), new EditorWindowPanel.ButtonData("取消", () => { window.CloseWindow(); }) ); } //创建地牢组 private void CreateGroup(DungeonRoomGroup group) { MapProjectManager.CreateGroup(group); } //创建房间 private void CreateRoom(DungeonRoomSplit roomSplit) { MapProjectManager.CreateRoom(roomSplit); } //创建地牢组完成 private void OnCreateGroupFinish(object group) { OnSearchGroupButtonClick(); } //创建地牢房间完成 private void OnCreateRoomFinish(object roomSplit) { OnSearchRoomButtonClick(); } }