Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / EditorWaveCell.cs
@小李xl 小李xl on 6 Jan 2024 5 KB 保存TileSet数据,开发中
  1. using System.Collections.Generic;
  2. using Godot;
  3. using UI.MapEditor;
  4.  
  5. namespace UI.MapEditorMapMark;
  6.  
  7. public class EditorWaveCell : UiCell<MapEditorMapMark.WaveItem, List<MarkInfo>>
  8. {
  9. /// <summary>
  10. /// 标记显示/隐藏状态
  11. /// </summary>
  12. public bool MarkVisible { get; private set; } = true;
  13. public UiGrid<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> MarkGrid;
  14. public override void OnInit()
  15. {
  16. //这里不绑定 Click 函数, 而是绑定 OnClickHandler, 因为 Select 交给 MapEditorMapMarkPanel 处理了
  17. CellNode.L_WaveContainer.L_WaveButton.Instance.Pressed += OnClickHandler;
  18. CellNode.L_WaveContainer.L_TextureButton.Instance.Pressed += OnExpandOrClose;
  19. CellNode.L_WaveContainer.L_WaveVisibleButton.Instance.Pressed += OnChangeMarkVisible;
  20. CellNode.L_MarginContainer.L_AddMarkButton.Instance.Pressed += OnAddMark;
  21.  
  22. CellNode.L_MarkContainer.L_MarkItem.Instance.SetHorizontalExpand(true);
  23. MarkGrid = new UiGrid<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData>(CellNode.L_MarkContainer.L_MarkItem, typeof(EditorMarkCell));
  24. MarkGrid.SetColumns(1);
  25. MarkGrid.SetHorizontalExpand(true);
  26. MarkGrid.SetCellOffset(new Vector2I(0, 5));
  27.  
  28. CellNode.Instance.CustomMinimumSize = Vector2.Zero;
  29. }
  30.  
  31. public override void OnSetData(List<MarkInfo> data)
  32. {
  33. var array = new MapEditorMapMarkPanel.MarkCellData[data.Count];
  34. for (var i = 0; i < data.Count; i++)
  35. {
  36. array[i] = new MapEditorMapMarkPanel.MarkCellData(this, data[i], Index == 0);
  37. }
  38. MarkGrid.SetDataList(array);
  39. //执行排序操作
  40. MarkGrid.Sort();
  41. if (!MarkVisible)
  42. {
  43. SetWaveVisible(true);
  44. }
  45. }
  46.  
  47. public override void OnRefreshIndex()
  48. {
  49. if (Index == 0)
  50. {
  51. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"提前加载波";
  52. }
  53. else
  54. {
  55. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"第{Index}波";
  56. }
  57. }
  58.  
  59. public override void OnDestroy()
  60. {
  61. MarkGrid.Destroy();
  62. }
  63.  
  64. //添加标记
  65. private void OnAddMark()
  66. {
  67. //打开添加标记页面
  68. EditorWindowManager.ShowCreateMark(CellNode.UiPanel.EditorTileMap.GetCenterPosition(), Index == 0, OnCreateMarkInfo);
  69. }
  70.  
  71. //创建的标记完成
  72. private void OnCreateMarkInfo(MarkInfo markInfo)
  73. {
  74. var preinstall = CellNode.UiPanel.GetSelectPreinstall();
  75. preinstall.WaveList[Index].Add(markInfo);
  76. MarkGrid.Add(new MapEditorMapMarkPanel.MarkCellData(this, markInfo, Index == 0));
  77. //添加标记工具
  78. EventManager.EmitEvent(EventEnum.OnCreateMark, markInfo);
  79. //选中最后一个
  80. //MarkGrid.SelectIndex
  81. MarkGrid.Click(MarkGrid.Count - 1);
  82. //执行排序操作
  83. MarkGrid.Sort();
  84. //如果当前波数隐藏, 则隐藏标记
  85. if (!MarkVisible)
  86. {
  87. EventManager.EmitEvent(EventEnum.OnSetMarkVisible, new MarkInfoVisibleData(markInfo, false));
  88. }
  89. //派发数据修改事件
  90. EventManager.EmitEvent(EventEnum.OnTileMapDirty);
  91. }
  92.  
  93. /// <summary>
  94. /// 展开/收起按钮点击
  95. /// </summary>
  96. public void OnExpandOrClose()
  97. {
  98. var marginContainer = CellNode.L_MarkContainer.Instance;
  99. var flag = !marginContainer.Visible;
  100. marginContainer.Visible = flag;
  101. CellNode.L_MarginContainer.Instance.Visible = flag;
  102. var textureButton = CellNode.L_WaveContainer.L_TextureButton.Instance;
  103. if (flag)
  104. {
  105. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Down_png);
  106. }
  107. else
  108. {
  109. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Right_png);
  110. }
  111. }
  112.  
  113. /// <summary>
  114. /// 点击显示/隐藏按钮
  115. /// </summary>
  116. public void OnChangeMarkVisible()
  117. {
  118. var val = !MarkVisible;
  119. SetWaveVisible(val);
  120.  
  121. //通知标记隐藏
  122. for (var i = 0; i < MarkGrid.Count; i++)
  123. {
  124. var markCellData = MarkGrid.GetCell(i).Data;
  125. EventManager.EmitEvent(EventEnum.OnSetMarkVisible, new MarkInfoVisibleData(markCellData.MarkInfo, val));
  126. }
  127. }
  128.  
  129. /// <summary>
  130. /// 设置 WaveVisibleButton 按钮显示的图标, 显示/隐藏
  131. /// </summary>
  132. public void SetWaveVisible(bool v)
  133. {
  134. MarkVisible = v;
  135. if (v)
  136. {
  137. CellNode.L_WaveContainer.L_WaveVisibleButton.Instance.Icon =
  138. ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Visible_png);
  139. CellNode.L_MarkContainer.Instance.Modulate = new Color(1, 1, 1);
  140. }
  141. else
  142. {
  143. CellNode.L_WaveContainer.L_WaveVisibleButton.Instance.Icon =
  144. ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Hide_png);
  145. CellNode.L_MarkContainer.Instance.Modulate = new Color(1, 1, 1, 0.3f);
  146. }
  147. }
  148.  
  149. /// <summary>
  150. /// 是否展开
  151. /// </summary>
  152. public bool IsExpand()
  153. {
  154. return CellNode.L_MarkContainer.Instance.Visible;
  155. }
  156.  
  157. public void OnClickHandler()
  158. {
  159. EditorTileMapManager.SetSelectWaveIndex(Index);
  160. CellNode.UiPanel.SetSelectCell(this, CellNode.L_WaveContainer.Instance, MapEditorMapMarkPanel.SelectToolType.Wave);
  161. //清除选中的标记
  162. EditorTileMapManager.SetSelectMark(null);
  163. }
  164.  
  165. public override void OnSelect()
  166. {
  167. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = true;
  168. }
  169.  
  170. public override void OnUnSelect()
  171. {
  172. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = false;
  173. }
  174. }