Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / MapEditorMapMarkPanel.cs
@小李xl 小李xl on 10 Aug 2023 5 KB 创建房间标记, 开发中
  1. using System.Collections.Generic;
  2. using Godot;
  3. using UI.MapEditor;
  4.  
  5. namespace UI.MapEditorMapMark;
  6.  
  7. public partial class MapEditorMapMarkPanel : MapEditorMapMark
  8. {
  9. public enum SelectToolType
  10. {
  11. None,
  12. Wave,
  13. Mark
  14. }
  15. /// <summary>
  16. /// 选中的cell选项
  17. /// </summary>
  18. public IUiCell SelectCell { get; private set; }
  19.  
  20. /// <summary>
  21. /// Cell 上的工具类型
  22. /// </summary>
  23. public SelectToolType ToolType { get; private set; } = SelectToolType.None;
  24. /// <summary>
  25. /// 编辑器Tile对象
  26. /// </summary>
  27. public EditorTileMap EditorTileMap { get; private set; }
  28. private UiGrid<WaveItem, List<MarkInfo>> _grid;
  29.  
  30. public override void OnCreateUi()
  31. {
  32. var editorPanel = (MapEditorPanel)ParentUi;
  33. EditorTileMap = editorPanel.S_TileMap.Instance;
  34.  
  35. S_DynamicTool.Instance.GetParent().RemoveChild(S_DynamicTool.Instance);
  36. S_DynamicTool.Instance.Visible = true;
  37. _grid = new UiGrid<WaveItem, List<MarkInfo>>(S_WaveItem, typeof(EditorWaveCell));
  38. _grid.SetCellOffset(new Vector2I(0, 10));
  39. _grid.SetColumns(1);
  40.  
  41. S_PreinstallOption.Instance.ItemSelected += OnItemSelected;
  42. S_AddPreinstall.Instance.Pressed += OnAddPreinstall;
  43. S_AddWaveButton.Instance.Pressed += OnAddWave;
  44. //S_Test.Instance.
  45. }
  46.  
  47. public override void OnShowUi()
  48. {
  49. RefreshPreinstallSelect();
  50. }
  51.  
  52. public override void OnDestroyUi()
  53. {
  54. _grid.Destroy();
  55. }
  56.  
  57. /// <summary>
  58. /// 获取当前选中的预设
  59. /// </summary>
  60. public RoomPreinstall GetSelectPreinstall()
  61. {
  62. var index = S_PreinstallOption.Instance.Selected;
  63. var preinstall = EditorTileMap.RoomSplit.Preinstall;
  64. if (index >= preinstall.Count)
  65. {
  66. return null;
  67. }
  68. return preinstall[index];
  69. }
  70.  
  71. /// <summary>
  72. /// 刷新预设下拉框
  73. /// </summary>
  74. public void RefreshPreinstallSelect(int index = -1)
  75. {
  76. var preinstall = EditorTileMap.RoomSplit.Preinstall;
  77. var optionButton = S_PreinstallOption.Instance;
  78. var selectIndex = index < 0 ? optionButton.Selected : index;
  79. optionButton.Clear();
  80. foreach (var item in preinstall)
  81. {
  82. if (item.WaveList == null)
  83. {
  84. item.WaveList = new List<List<MarkInfo>>();
  85. }
  86.  
  87. optionButton.AddItem($"{item.Name} ({item.Weight})");
  88. }
  89.  
  90. if (selectIndex == -1 && preinstall.Count > 0)
  91. {
  92. OnItemSelected(0);
  93. }
  94. else
  95. {
  96. OnItemSelected(selectIndex);
  97. }
  98. }
  99.  
  100. /// <summary>
  101. /// 下拉框选中项
  102. /// </summary>
  103. public void OnItemSelected(long index)
  104. {
  105. var preinstall = EditorTileMap.RoomSplit.Preinstall;
  106. if (index >= 0 && index <= preinstall.Count)
  107. {
  108. _grid.SetDataList(preinstall[(int)index].WaveList.ToArray());
  109. }
  110. else
  111. {
  112. _grid.RemoveAll();
  113. }
  114. }
  115. /// <summary>
  116. /// 选中 cell, 并设置显示的工具
  117. /// </summary>
  118. /// <param name="uiCell">选中 cell 对象</param>
  119. /// <param name="toolRoot">按钮工具绑定的父节点</param>
  120. /// <param name="toolType">选择工具类型</param>
  121. public void SetSelectCell(IUiCell uiCell, Node toolRoot, SelectToolType toolType)
  122. {
  123. if (SelectCell == uiCell)
  124. {
  125. return;
  126. }
  127.  
  128. if (uiCell == null)
  129. {
  130. RemoveSelectCell();
  131. return;
  132. }
  133.  
  134. var parent = S_DynamicTool.Instance.GetParent();
  135. if (parent != null)
  136. {
  137. parent.RemoveChild(S_DynamicTool.Instance);
  138. }
  139.  
  140. toolRoot.AddChild(S_DynamicTool.Instance);
  141. if (SelectCell != null)
  142. {
  143. SelectCell.OnUnSelect();
  144. }
  145. SelectCell = uiCell;
  146. ToolType = toolType;
  147. SelectCell.OnSelect();
  148. }
  149.  
  150. /// <summary>
  151. /// 移除选中的 cell 对象
  152. /// </summary>
  153. public void RemoveSelectCell()
  154. {
  155. if (SelectCell == null)
  156. {
  157. return;
  158. }
  159. var parent = S_DynamicTool.Instance.GetParent();
  160. if (parent != null)
  161. {
  162. parent.RemoveChild(S_DynamicTool.Instance);
  163. }
  164. SelectCell.OnUnSelect();
  165. SelectCell = null;
  166. }
  167.  
  168. /// <summary>
  169. /// 创建预设
  170. /// </summary>
  171. public void OnAddPreinstall()
  172. {
  173. var roomSplitPreinstall = EditorTileMap.RoomSplit.Preinstall;
  174. EditorWindowManager.ShowCreatePreinstall(roomSplitPreinstall, preinstall =>
  175. {
  176. roomSplitPreinstall.Add(preinstall);
  177. RefreshPreinstallSelect(roomSplitPreinstall.Count - 1);
  178. });
  179. }
  180.  
  181. /// <summary>
  182. /// 添加波数
  183. /// </summary>
  184. public void OnAddWave()
  185. {
  186. var index = S_PreinstallOption.Instance.Selected;
  187. if (index == -1)
  188. {
  189. EditorWindowManager.ShowTips("警告", "请先选择预设!");
  190. return;
  191. }
  192.  
  193. var preinstall = EditorTileMap.RoomSplit.Preinstall;
  194. if (index >= preinstall.Count)
  195. {
  196. EditorWindowManager.ShowTips("警告", "未知预设选项!");
  197. return;
  198. }
  199. var item = preinstall[index];
  200. var wave = new List<MarkInfo>();
  201. item.WaveList.Add(wave);
  202. _grid.Add(wave);
  203. }
  204. /// <summary>
  205. /// 编辑波数据
  206. /// </summary>
  207. public void OnEditWave()
  208. {
  209. }
  210.  
  211.  
  212. /// <summary>
  213. /// 删除波数据
  214. /// </summary>
  215. public void OnDeleteWave()
  216. {
  217. }
  218.  
  219. /// <summary>
  220. /// 添加标记
  221. /// </summary>
  222. public void OnAddMark()
  223. {
  224. }
  225. /// <summary>
  226. /// 编辑标记数据
  227. /// </summary>
  228. public void OnEditMark()
  229. {
  230. }
  231. /// <summary>
  232. /// 删除标记数据
  233. /// </summary>
  234. public void OnDeleteMark()
  235. {
  236. }
  237. }