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. if (index == -1)
  80. {
  81. index = 0;
  82. }
  83. MapProjectManager.RefreshMapGroup();
  84. OnSearchGroupButtonClick();
  85. _groupGrid.SelectIndex = index;
  86. }
  87.  
  88. /// <summary>
  89. /// 选中地牢组
  90. /// </summary>
  91. public void SelectGroup(DungeonRoomGroup group)
  92. {
  93. EditorManager.SetSelectDungeonGroup(group);
  94. OnSearchRoomButtonClick();
  95. }
  96.  
  97. /// <summary>
  98. /// 选择地图并打开地图编辑器
  99. /// </summary>
  100. public void OpenSelectRoom(DungeonRoomSplit room)
  101. {
  102. HideUi();
  103. //创建地牢Ui
  104. var mapEditor = UiManager.Create_MapEditor();
  105. mapEditor.PrevUi = this;
  106. //加载地牢
  107. mapEditor.LoadMap(room);
  108. //打开Ui
  109. mapEditor.ShowUi();
  110. }
  111. //搜索组按钮点击
  112. private void OnSearchGroupButtonClick()
  113. {
  114. var select = _groupGrid.SelectIndex;
  115. //输入文本
  116. var text = S_GroupSearchInput.Instance.Text;
  117. if (!string.IsNullOrEmpty(text))
  118. {
  119. var str = text.Trim().ToLower();
  120. var list = new List<DungeonRoomGroup>();
  121. foreach (var valuePair in MapProjectManager.GroupMap)
  122. {
  123. if (valuePair.Value.GroupName.Trim().ToLower().Contains(str))
  124. {
  125. list.Add(valuePair.Value);
  126. }
  127. }
  128. _groupGrid.SetDataList(list.ToArray());
  129. }
  130. else
  131. {
  132. _groupGrid.SetDataList(MapProjectManager.GroupMap.Values.ToArray());
  133. }
  134.  
  135. _roomGrid.SelectIndex = select;
  136. }
  137.  
  138. //搜索房间按钮点击
  139. private void OnSearchRoomButtonClick()
  140. {
  141. if (EditorManager.SelectDungeonGroup != null)
  142. {
  143. //输入文本
  144. var text = S_RoomSearchInput.Instance.Text;
  145. //房间类型
  146. var roomType = S_RoomTypeButton.Instance.GetSelectedId();
  147.  
  148. IEnumerable<DungeonRoomSplit> result = EditorManager.SelectDungeonGroup.GetAllRoomList();
  149. //名称搜索
  150. if (!string.IsNullOrEmpty(text))
  151. {
  152. var queryText = text.Trim().ToLower();
  153. result = result.Where(split =>
  154. {
  155. return split.RoomInfo.RoomName.Trim().ToLower().Contains(queryText);
  156. });
  157. }
  158.  
  159. //类型搜索
  160. if (roomType > 0)
  161. {
  162. var type = (DungeonRoomType)(roomType - 1);
  163. result = result.Where(split => split.RoomInfo.RoomType == type);
  164. }
  165. _roomGrid.SetDataList(result.ToArray());
  166. }
  167. else
  168. {
  169. _roomGrid.RemoveAll();
  170. }
  171. }
  172.  
  173. //创建组按钮点击
  174. private void OnCreateGroupClick()
  175. {
  176. EditorWindowManager.ShowCreateGroup(CreateGroup);
  177. }
  178. //创建地牢房间按钮点击
  179. private void OnCreateRoomClick()
  180. {
  181. var groupName = EditorManager.SelectDungeonGroup != null ? EditorManager.SelectDungeonGroup.GroupName : null;
  182. EditorWindowManager.ShowCreateRoom(groupName, Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0), CreateRoom);
  183. }
  184. //编辑房间
  185. private void OnEditRoom()
  186. {
  187. var selectRoom = _roomGrid.SelectData;
  188. if (selectRoom == null)
  189. {
  190. EditorWindowManager.ShowTips("提示", "请选择需要编辑的房间!");
  191. }
  192. else
  193. {
  194. EditorWindowManager.ShowEditRoom(selectRoom, (room) =>
  195. {
  196. //保存房间数据
  197. MapProjectManager.SaveRoomInfo(room);
  198. OnSearchRoomButtonClick();
  199. });
  200. }
  201. }
  202. //删除房间
  203. private void OnDeleteRoom()
  204. {
  205. var selectRoom = _roomGrid.SelectData;
  206. if (selectRoom == null)
  207. {
  208. EditorWindowManager.ShowTips("提示", "请选择需要删除的房间!");
  209. }
  210. else
  211. {
  212. EditorWindowManager.ShowConfirm("提示", $"是否删除房间: {selectRoom.RoomInfo.RoomName}, 该操作无法撤销!", result =>
  213. {
  214. if (result)
  215. {
  216. //删除房间
  217. if (MapProjectManager.DeleteRoom(EditorManager.SelectDungeonGroup, selectRoom))
  218. {
  219. MapProjectManager.SaveGroupMap();
  220. OnSearchRoomButtonClick();
  221. }
  222. }
  223. });
  224. }
  225. }
  226.  
  227. //创建地牢组
  228. private void CreateGroup(DungeonRoomGroup group)
  229. {
  230. MapProjectManager.CreateGroup(group);
  231. }
  232. //创建房间
  233. private void CreateRoom(DungeonRoomSplit roomSplit)
  234. {
  235. MapProjectManager.CreateRoom(roomSplit);
  236. }
  237.  
  238. //创建地牢组完成
  239. private void OnCreateGroupFinish(object group)
  240. {
  241. OnSearchGroupButtonClick();
  242. }
  243.  
  244. //创建地牢房间完成
  245. private void OnCreateRoomFinish(object roomSplit)
  246. {
  247. OnSearchRoomButtonClick();
  248. }
  249. }