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