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