Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorProject / MapEditorProjectPanel.cs
@lijincheng lijincheng on 25 Jul 2023 7 KB 调整部分 Ui 函数名称
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Godot;
  5. using UI.EditorWindow;
  6. using UI.MapEditorCreateGroup;
  7. using UI.MapEditorCreateRoom;
  8.  
  9. namespace UI.MapEditorProject;
  10.  
  11. public partial class MapEditorProjectPanel : MapEditorProject
  12. {
  13. /// <summary>
  14. /// 当前选中的组
  15. /// </summary>
  16. public DungeonRoomGroup SelectGroupInfo;
  17.  
  18. //当前显示的组数据
  19. private UiGrid<GroupButton, DungeonRoomGroup> _groupGrid;
  20. //当前显示的房间数据
  21. private UiGrid<RoomButton, DungeonRoomSplit> _roomGrid;
  22. private EventFactory _eventFactory;
  23.  
  24. public override void OnCreateUi()
  25. {
  26. //初始化枚举选项
  27. var roomTypes = Enum.GetValues<DungeonRoomType>();
  28. var optionButton = S_RoomTypeButton.Instance;
  29. optionButton.AddItem("全部", -1);
  30. for (var i = 0; i < roomTypes.Length; i++)
  31. {
  32. var dungeonRoomType = roomTypes[i];
  33. optionButton.AddItem(DungeonManager.DungeonRoomTypeToDescribeString(dungeonRoomType), (int)dungeonRoomType);
  34. }
  35.  
  36. _groupGrid = new UiGrid<GroupButton, DungeonRoomGroup>(S_GroupButton, typeof(GroupButtonCell));
  37. _groupGrid.SetCellOffset(new Vector2I(0, 2));
  38. _groupGrid.SetHorizontalExpand(true);
  39.  
  40. _roomGrid = new UiGrid<RoomButton, DungeonRoomSplit>(S_RoomButton, typeof(RoomButtonCell));
  41. _roomGrid.SetAutoColumns(true);
  42. _roomGrid.SetCellOffset(new Vector2I(10, 10));
  43. _roomGrid.SetHorizontalExpand(true);
  44. }
  45.  
  46. public override void OnShowUi()
  47. {
  48. S_GroupSearchButton.Instance.Pressed += OnSearchGroupButtonClick;
  49. S_RoomSearchButton.Instance.Pressed += OnSearchRoomButtonClick;
  50. S_RoomAddButton.Instance.Pressed += OnCreateRoomClick;
  51. S_GroupAddButton.Instance.Pressed += OnCreateGroupClick;
  52. RefreshGroup();
  53. _eventFactory = EventManager.CreateEventFactory();
  54. _eventFactory.AddEventListener(EventEnum.OnCreateGroupFinish, OnCreateGroupFinish);
  55. _eventFactory.AddEventListener(EventEnum.OnCreateRoomFinish, OnCreateRoomFinish);
  56. }
  57.  
  58. public override void OnHideUi()
  59. {
  60. S_GroupSearchButton.Instance.Pressed -= OnSearchGroupButtonClick;
  61. S_RoomSearchButton.Instance.Pressed -= OnSearchRoomButtonClick;
  62. S_RoomAddButton.Instance.Pressed -= OnCreateRoomClick;
  63. S_GroupAddButton.Instance.Pressed -= OnCreateGroupClick;
  64. _eventFactory.RemoveAllEventListener();
  65. }
  66.  
  67. public override void OnDestroyUi()
  68. {
  69. _groupGrid.Destroy();
  70. _groupGrid = null;
  71. _roomGrid.Destroy();
  72. _roomGrid = null;
  73. }
  74.  
  75. /// <summary>
  76. /// 刷新组数据
  77. /// </summary>
  78. public void RefreshGroup()
  79. {
  80. MapProjectManager.RefreshMapGroup();
  81. OnSearchGroupButtonClick();
  82. }
  83.  
  84. /// <summary>
  85. /// 选中地牢组
  86. /// </summary>
  87. public void SelectGroup(DungeonRoomGroup group)
  88. {
  89. SelectGroupInfo = group;
  90. OnSearchRoomButtonClick();
  91. }
  92.  
  93. /// <summary>
  94. /// 选择地图并打开地图编辑器
  95. /// </summary>
  96. public void SelectRoom(DungeonRoomSplit room)
  97. {
  98. HideUi();
  99. //打开地牢Ui
  100. var mapEditor = UiManager.Open_MapEditor();
  101. mapEditor.PrevUi = this;
  102. //加载地牢
  103. mapEditor.LoadMap(room);
  104. }
  105. //搜索组按钮点击
  106. private void OnSearchGroupButtonClick()
  107. {
  108. //输入文本
  109. var text = S_GroupSearchInput.Instance.Text;
  110. if (!string.IsNullOrEmpty(text))
  111. {
  112. var str = text.Trim().ToLower();
  113. var list = new List<DungeonRoomGroup>();
  114. foreach (var valuePair in MapProjectManager.GroupMap)
  115. {
  116. if (valuePair.Value.GroupName.Trim().ToLower().Contains(str))
  117. {
  118. list.Add(valuePair.Value);
  119. }
  120. }
  121. _groupGrid.SetDataList(list.ToArray());
  122. }
  123. else
  124. {
  125. _groupGrid.SetDataList(MapProjectManager.GroupMap.Values.ToArray());
  126. }
  127. }
  128.  
  129. //搜索房间按钮点击
  130. private void OnSearchRoomButtonClick()
  131. {
  132. if (SelectGroupInfo != null)
  133. {
  134. //输入文本
  135. var text = S_RoomSearchInput.Instance.Text;
  136. //房间类型
  137. var roomType = S_RoomTypeButton.Instance.GetSelectedId();
  138.  
  139. IEnumerable<DungeonRoomSplit> result = SelectGroupInfo.GetAllRoomList();
  140. //名称搜索
  141. if (!string.IsNullOrEmpty(text))
  142. {
  143. var queryText = text.Trim().ToLower();
  144. result = result.Where(split =>
  145. {
  146. return split.RoomInfo.RoomName.Trim().ToLower().Contains(queryText);
  147. });
  148. }
  149.  
  150. //类型搜索
  151. if (roomType > 0)
  152. {
  153. var type = (DungeonRoomType)roomType;
  154. result = result.Where(split => split.RoomInfo.RoomType == type);
  155. }
  156. _roomGrid.SetDataList(result.ToArray());
  157. }
  158. else
  159. {
  160. _roomGrid.RemoveAll();
  161. }
  162. }
  163.  
  164. //创建组按钮点击
  165. private void OnCreateGroupClick()
  166. {
  167. var window = UiManager.Open_EditorWindow();
  168. window.SetWindowTitle("创建地牢组");
  169. window.SetWindowSize(new Vector2I(700, 500));
  170. var body = window.OpenBody<MapEditorCreateGroupPanel>(UiManager.UiName.MapEditorCreateGroup);
  171. window.SetButtonList(
  172. new EditorWindowPanel.ButtonData("确定", () =>
  173. {
  174. //获取填写的数据, 并创建ui
  175. var groupInfo = body.GetGroupInfo();
  176. if (groupInfo != null)
  177. {
  178. window.CloseWindow();
  179. CreateGroup(groupInfo);
  180. }
  181. }),
  182. new EditorWindowPanel.ButtonData("取消", () =>
  183. {
  184. window.CloseWindow();
  185. })
  186. );
  187. }
  188. //创建地牢房间按钮点击
  189. private void OnCreateRoomClick()
  190. {
  191. var window = UiManager.Open_EditorWindow();
  192. window.SetWindowTitle("创建地牢房间");
  193. window.SetWindowSize(new Vector2I(700, 600));
  194. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiName.MapEditorCreateRoom);
  195. if (SelectGroupInfo != null)
  196. {
  197. body.SetSelectGroup(SelectGroupInfo.GroupName);
  198. }
  199. body.SetSelectType(Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0));
  200. window.SetButtonList(
  201. new EditorWindowPanel.ButtonData("确定", () =>
  202. {
  203. //获取填写的数据, 并创建ui
  204. var roomSplit = body.GetRoomInfo();
  205. if (roomSplit != null)
  206. {
  207. window.CloseWindow();
  208. CreateRoom(roomSplit);
  209. }
  210. }),
  211. new EditorWindowPanel.ButtonData("取消", () =>
  212. {
  213. window.CloseWindow();
  214. })
  215. );
  216. }
  217.  
  218. //创建地牢组
  219. private void CreateGroup(DungeonRoomGroup group)
  220. {
  221. MapProjectManager.CreateGroup(group);
  222. }
  223. //创建房间
  224. private void CreateRoom(DungeonRoomSplit roomSplit)
  225. {
  226. MapProjectManager.CreateRoom(roomSplit);
  227. }
  228.  
  229. //创建地牢组完成
  230. private void OnCreateGroupFinish(object group)
  231. {
  232. OnSearchGroupButtonClick();
  233. }
  234.  
  235. //创建地牢房间完成
  236. private void OnCreateRoomFinish(object roomSplit)
  237. {
  238. OnSearchRoomButtonClick();
  239. }
  240. }