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 函数, 而是绑定 OnClick, 因为 Select 交给 MapEditorMapMarkPanel 处理了
  13. CellNode.L_WaveContainer.L_WaveButton.Instance.Pressed += OnClick;
  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]);
  30. }
  31. MarkGrid.SetDataList(array);
  32. //执行排序操作
  33. MarkGrid.Sort();
  34. }
  35.  
  36. public override void OnRefreshIndex()
  37. {
  38. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"第{Index + 1}波";
  39. }
  40.  
  41. public override void OnDestroy()
  42. {
  43. MarkGrid.Destroy();
  44. }
  45.  
  46. //添加标记
  47. private void OnAddMark()
  48. {
  49. //打开添加标记页面
  50. EditorWindowManager.ShowCreateMark(OnCreateMarkInfo);
  51. }
  52.  
  53. //创建的标记完成
  54. private void OnCreateMarkInfo(MarkInfo markInfo)
  55. {
  56. var preinstall = CellNode.UiPanel.GetSelectPreinstall();
  57. preinstall.WaveList[Index].Add(markInfo);
  58. MarkGrid.Add(new MapEditorMapMarkPanel.MarkCellData(this, markInfo));
  59. //添加标记工具
  60. EventManager.EmitEvent(EventEnum.OnCreateMark, markInfo);
  61. //选中最后一个
  62. //MarkGrid.SelectIndex
  63. MarkGrid.Click(MarkGrid.Count - 1);
  64. //执行排序操作
  65. MarkGrid.Sort();
  66. }
  67.  
  68. /// <summary>
  69. /// 展开/收起按钮点击
  70. /// </summary>
  71. public void OnExpandOrClose()
  72. {
  73. var marginContainer = CellNode.L_MarkContainer.Instance;
  74. var flag = !marginContainer.Visible;
  75. marginContainer.Visible = flag;
  76. CellNode.L_MarginContainer.Instance.Visible = flag;
  77. var textureButton = CellNode.L_WaveContainer.L_TextureButton.Instance;
  78. if (flag)
  79. {
  80. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Down_png);
  81. }
  82. else
  83. {
  84. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Right_png);
  85. }
  86. }
  87.  
  88. /// <summary>
  89. /// 是否展开
  90. /// </summary>
  91. public bool IsExpand()
  92. {
  93. return CellNode.L_MarkContainer.Instance.Visible;
  94. }
  95.  
  96. public override void OnClick()
  97. {
  98. CellNode.UiPanel.EditorTileMap.SelectWaveIndex = Index;
  99. CellNode.UiPanel.SetSelectCell(this, CellNode.L_WaveContainer.Instance, MapEditorMapMarkPanel.SelectToolType.Wave);
  100. }
  101.  
  102. public override void OnSelect()
  103. {
  104. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = true;
  105. }
  106.  
  107. public override void OnUnSelect()
  108. {
  109. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = false;
  110. }
  111. }