Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / EditorWaveCell.cs
  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. public UiGrid<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> MarkGrid;
  10. public override void OnInit()
  11. {
  12. //这里不绑定 Click 函数, 而是绑定 OnClickHandler, 因为 Select 交给 MapEditorMapMarkPanel 处理了
  13. CellNode.L_WaveContainer.L_WaveButton.Instance.Pressed += OnClickHandler;
  14. CellNode.L_WaveContainer.L_TextureButton.Instance.Pressed += OnExpandOrClose;
  15. CellNode.L_MarginContainer.L_AddMarkButton.Instance.Pressed += OnAddMark;
  16.  
  17. CellNode.L_MarkContainer.L_MarkItem.Instance.SetHorizontalExpand(true);
  18. MarkGrid = new UiGrid<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData>(CellNode.L_MarkContainer.L_MarkItem, typeof(EditorMarkCell));
  19. MarkGrid.SetColumns(1);
  20. MarkGrid.SetHorizontalExpand(true);
  21. MarkGrid.SetCellOffset(new Vector2I(0, 5));
  22. }
  23.  
  24. public override void OnSetData(List<MarkInfo> data)
  25. {
  26. var array = new MapEditorMapMarkPanel.MarkCellData[data.Count];
  27. for (var i = 0; i < data.Count; i++)
  28. {
  29. array[i] = new MapEditorMapMarkPanel.MarkCellData(this, data[i], Index == 0);
  30. }
  31. MarkGrid.SetDataList(array);
  32. //执行排序操作
  33. MarkGrid.Sort();
  34. }
  35.  
  36. public override void OnRefreshIndex()
  37. {
  38. if (Index == 0)
  39. {
  40. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"提前加载波";
  41. }
  42. else
  43. {
  44. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"第{Index}波";
  45. }
  46. }
  47.  
  48. public override void OnDestroy()
  49. {
  50. MarkGrid.Destroy();
  51. }
  52.  
  53. //添加标记
  54. private void OnAddMark()
  55. {
  56. //打开添加标记页面
  57. EditorWindowManager.ShowCreateMark(CellNode.UiPanel.EditorTileMap.GetCenterPosition(), Index == 0, OnCreateMarkInfo);
  58. }
  59.  
  60. //创建的标记完成
  61. private void OnCreateMarkInfo(MarkInfo markInfo)
  62. {
  63. var preinstall = CellNode.UiPanel.GetSelectPreinstall();
  64. preinstall.WaveList[Index].Add(markInfo);
  65. MarkGrid.Add(new MapEditorMapMarkPanel.MarkCellData(this, markInfo, Index == 0));
  66. //添加标记工具
  67. EventManager.EmitEvent(EventEnum.OnCreateMark, markInfo);
  68. //选中最后一个
  69. //MarkGrid.SelectIndex
  70. MarkGrid.Click(MarkGrid.Count - 1);
  71. //执行排序操作
  72. MarkGrid.Sort();
  73. //派发数据修改事件
  74. EventManager.EmitEvent(EventEnum.OnEditorDirty);
  75. }
  76.  
  77. /// <summary>
  78. /// 展开/收起按钮点击
  79. /// </summary>
  80. public void OnExpandOrClose()
  81. {
  82. var marginContainer = CellNode.L_MarkContainer.Instance;
  83. var flag = !marginContainer.Visible;
  84. marginContainer.Visible = flag;
  85. CellNode.L_MarginContainer.Instance.Visible = flag;
  86. var textureButton = CellNode.L_WaveContainer.L_TextureButton.Instance;
  87. if (flag)
  88. {
  89. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Down_png);
  90. }
  91. else
  92. {
  93. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Right_png);
  94. }
  95. }
  96.  
  97. /// <summary>
  98. /// 是否展开
  99. /// </summary>
  100. public bool IsExpand()
  101. {
  102. return CellNode.L_MarkContainer.Instance.Visible;
  103. }
  104.  
  105. public void OnClickHandler()
  106. {
  107. EditorManager.SetSelectWaveIndex(Index);
  108. CellNode.UiPanel.SetSelectCell(this, CellNode.L_WaveContainer.Instance, MapEditorMapMarkPanel.SelectToolType.Wave);
  109. //清除选中的标记
  110. EditorManager.SetSelectMark(null);
  111. }
  112.  
  113. public override void OnSelect()
  114. {
  115. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = true;
  116. }
  117.  
  118. public override void OnUnSelect()
  119. {
  120. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = false;
  121. }
  122. }