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. /// <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. var select = _groupGrid.SelectIndex;
  114. //输入文本
  115. var text = S_GroupSearchInput.Instance.Text;
  116. if (!string.IsNullOrEmpty(text))
  117. {
  118. var str = text.Trim().ToLower();
  119. var list = new List<DungeonRoomGroup>();
  120. foreach (var valuePair in MapProjectManager.GroupMap)
  121. {
  122. if (valuePair.Value.GroupName.Trim().ToLower().Contains(str))
  123. {
  124. list.Add(valuePair.Value);
  125. }
  126. }
  127. _groupGrid.SetDataList(list.ToArray());
  128. }
  129. else
  130. {
  131. _groupGrid.SetDataList(MapProjectManager.GroupMap.Values.ToArray());
  132. }
  133.  
  134. _roomGrid.SelectIndex = select;
  135. }
  136.  
  137. //搜索房间按钮点击
  138. private void OnSearchRoomButtonClick()
  139. {
  140. if (SelectGroupInfo != null)
  141. {
  142. //输入文本
  143. var text = S_RoomSearchInput.Instance.Text;
  144. //房间类型
  145. var roomType = S_RoomTypeButton.Instance.GetSelectedId();
  146.  
  147. IEnumerable<DungeonRoomSplit> result = SelectGroupInfo.GetAllRoomList();
  148. //名称搜索
  149. if (!string.IsNullOrEmpty(text))
  150. {
  151. var queryText = text.Trim().ToLower();
  152. result = result.Where(split =>
  153. {
  154. return split.RoomInfo.RoomName.Trim().ToLower().Contains(queryText);
  155. });
  156. }
  157.  
  158. //类型搜索
  159. if (roomType > 0)
  160. {
  161. var type = (DungeonRoomType)(roomType - 1);
  162. result = result.Where(split => split.RoomInfo.RoomType == type);
  163. }
  164. _roomGrid.SetDataList(result.ToArray());
  165. }
  166. else
  167. {
  168. _roomGrid.RemoveAll();
  169. }
  170. }
  171.  
  172. //创建组按钮点击
  173. private void OnCreateGroupClick()
  174. {
  175. EditorWindowManager.ShowCreateGroup(CreateGroup);
  176. }
  177. //创建地牢房间按钮点击
  178. private void OnCreateRoomClick()
  179. {
  180. var groupName = SelectGroupInfo != null ? SelectGroupInfo.GroupName : null;
  181. EditorWindowManager.ShowCreateRoom(groupName, Mathf.Max(S_RoomTypeButton.Instance.Selected - 1, 0), CreateRoom);
  182. }
  183.  
  184. //创建地牢组
  185. private void CreateGroup(DungeonRoomGroup group)
  186. {
  187. MapProjectManager.CreateGroup(group);
  188. }
  189. //创建房间
  190. private void CreateRoom(DungeonRoomSplit roomSplit)
  191. {
  192. MapProjectManager.CreateRoom(roomSplit);
  193. }
  194.  
  195. //创建地牢组完成
  196. private void OnCreateGroupFinish(object group)
  197. {
  198. OnSearchGroupButtonClick();
  199. }
  200.  
  201. //创建地牢房间完成
  202. private void OnCreateRoomFinish(object roomSplit)
  203. {
  204. OnSearchRoomButtonClick();
  205. }
  206. }