Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorProject / MapEditorProjectPanel.cs
@小李xl 小李xl on 10 Aug 2023 5 KB 创建房间标记, 开发中
  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. /// <summary>
  11. /// 当前选中的组
  12. /// </summary>
  13. public DungeonRoomGroup SelectGroupInfo;
  14.  
  15. //当前显示的组数据
  16. private UiGrid<GroupButton, DungeonRoomGroup> _groupGrid;
  17. //当前显示的房间数据
  18. private UiGrid<RoomButton, DungeonRoomSplit> _roomGrid;
  19. private EventFactory _eventFactory;
  20.  
  21. public override void OnCreateUi()
  22. {
  23. //初始化枚举选项
  24. var roomTypes = Enum.GetValues<DungeonRoomType>();
  25. var optionButton = S_RoomTypeButton.Instance;
  26. optionButton.AddItem("全部", 0);
  27. for (var i = 0; i < roomTypes.Length; i++)
  28. {
  29. var dungeonRoomType = roomTypes[i];
  30. optionButton.AddItem(DungeonManager.DungeonRoomTypeToDescribeString(dungeonRoomType), (int)dungeonRoomType + 1);
  31. }
  32.  
  33. _groupGrid = new UiGrid<GroupButton, DungeonRoomGroup>(S_GroupButton, typeof(GroupButtonCell));
  34. _groupGrid.SetCellOffset(new Vector2I(0, 2));
  35. _groupGrid.SetHorizontalExpand(true);
  36.  
  37. _roomGrid = new UiGrid<RoomButton, DungeonRoomSplit>(S_RoomButton, typeof(RoomButtonCell));
  38. _roomGrid.SetAutoColumns(true);
  39. _roomGrid.SetCellOffset(new Vector2I(10, 10));
  40. _roomGrid.SetHorizontalExpand(true);
  41.  
  42. if (PrevUi != null)
  43. {
  44. S_Back.Instance.Visible = true;
  45. S_Back.Instance.Pressed += OpenPrevUi;
  46. }
  47. else
  48. {
  49. S_Back.Instance.Visible = false;
  50. }
  51. S_GroupSearchButton.Instance.Pressed += OnSearchGroupButtonClick;
  52. S_RoomSearchButton.Instance.Pressed += OnSearchRoomButtonClick;
  53. S_RoomAddButton.Instance.Pressed += OnCreateRoomClick;
  54. S_GroupAddButton.Instance.Pressed += OnCreateGroupClick;
  55. }
  56.  
  57. public override void OnShowUi()
  58. {
  59. RefreshGroup();
  60. _eventFactory = EventManager.CreateEventFactory();
  61. _eventFactory.AddEventListener(EventEnum.OnCreateGroupFinish, OnCreateGroupFinish);
  62. _eventFactory.AddEventListener(EventEnum.OnCreateRoomFinish, OnCreateRoomFinish);
  63. }
  64.  
  65. public override void OnHideUi()
  66. {
  67. _eventFactory.RemoveAllEventListener();
  68. }
  69.  
  70. public override void OnDestroyUi()
  71. {
  72. _groupGrid.Destroy();
  73. _groupGrid = null;
  74. _roomGrid.Destroy();
  75. _roomGrid = null;
  76. }
  77.  
  78. /// <summary>
  79. /// 刷新组数据
  80. /// </summary>
  81. public void RefreshGroup()
  82. {
  83. MapProjectManager.RefreshMapGroup();
  84. OnSearchGroupButtonClick();
  85. }
  86.  
  87. /// <summary>
  88. /// 选中地牢组
  89. /// </summary>
  90. public void SelectGroup(DungeonRoomGroup group)
  91. {
  92. SelectGroupInfo = group;
  93. OnSearchRoomButtonClick();
  94. }
  95.  
  96. /// <summary>
  97. /// 选择地图并打开地图编辑器
  98. /// </summary>
  99. public void SelectRoom(DungeonRoomSplit room)
  100. {
  101. HideUi();
  102. //创建地牢Ui
  103. var mapEditor = UiManager.Create_MapEditor();
  104. mapEditor.PrevUi = this;
  105. //加载地牢
  106. mapEditor.LoadMap(room);
  107. //打开Ui
  108. mapEditor.ShowUi();
  109. }
  110. //搜索组按钮点击
  111. private void OnSearchGroupButtonClick()
  112. {
  113. //输入文本
  114. var text = S_GroupSearchInput.Instance.Text;
  115. if (!string.IsNullOrEmpty(text))
  116. {
  117. var str = text.Trim().ToLower();
  118. var list = new List<DungeonRoomGroup>();
  119. foreach (var valuePair in MapProjectManager.GroupMap)
  120. {
  121. if (valuePair.Value.GroupName.Trim().ToLower().Contains(str))
  122. {
  123. list.Add(valuePair.Value);
  124. }
  125. }
  126. _groupGrid.SetDataList(list.ToArray());
  127. }
  128. else
  129. {
  130. _groupGrid.SetDataList(MapProjectManager.GroupMap.Values.ToArray());
  131. }
  132. }
  133.  
  134. //搜索房间按钮点击
  135. private void OnSearchRoomButtonClick()
  136. {
  137. if (SelectGroupInfo != null)
  138. {
  139. //输入文本
  140. var text = S_RoomSearchInput.Instance.Text;
  141. //房间类型
  142. var roomType = S_RoomTypeButton.Instance.GetSelectedId();
  143.  
  144. IEnumerable<DungeonRoomSplit> result = SelectGroupInfo.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 = SelectGroupInfo != null ? SelectGroupInfo.GroupName : null;
  178. EditorWindowManager.ShowCreateRoom(groupName, Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0), CreateRoom);
  179. }
  180.  
  181. //创建地牢组
  182. private void CreateGroup(DungeonRoomGroup group)
  183. {
  184. MapProjectManager.CreateGroup(group);
  185. }
  186. //创建房间
  187. private void CreateRoom(DungeonRoomSplit roomSplit)
  188. {
  189. MapProjectManager.CreateRoom(roomSplit);
  190. }
  191.  
  192. //创建地牢组完成
  193. private void OnCreateGroupFinish(object group)
  194. {
  195. OnSearchGroupButtonClick();
  196. }
  197.  
  198. //创建地牢房间完成
  199. private void OnCreateRoomFinish(object roomSplit)
  200. {
  201. OnSearchRoomButtonClick();
  202. }
  203. }