Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / EditorWaveCell.cs
@小李xl 小李xl on 19 Aug 2023 3 KB 创建房间标记, 开发中
  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.  
  34. public override void OnRefreshIndex()
  35. {
  36. CellNode.L_WaveContainer.L_WaveButton.Instance.Text = $"第{Index + 1}波";
  37. }
  38.  
  39. public override void OnDestroy()
  40. {
  41. MarkGrid.Destroy();
  42. }
  43.  
  44. //添加标记
  45. private void OnAddMark()
  46. {
  47. //打开添加标记页面
  48. EditorWindowManager.ShowCreateMark(OnCreateMarkInfo);
  49. }
  50.  
  51. //创建的标记完成
  52. private void OnCreateMarkInfo(MarkInfo markInfo)
  53. {
  54. var preinstall = CellNode.UiPanel.GetSelectPreinstall();
  55. preinstall.WaveList[Index].Add(markInfo);
  56. MarkGrid.Add(new MapEditorMapMarkPanel.MarkCellData(this, markInfo));
  57. //添加标记工具
  58. EventManager.EmitEvent(EventEnum.OnCreateMark, markInfo);
  59. //选中最后一个
  60. //MarkGrid.SelectIndex
  61. MarkGrid.Click(MarkGrid.Count - 1);
  62. }
  63.  
  64. /// <summary>
  65. /// 展开/收起按钮点击
  66. /// </summary>
  67. public void OnExpandOrClose()
  68. {
  69. var marginContainer = CellNode.L_MarkContainer.Instance;
  70. var flag = !marginContainer.Visible;
  71. marginContainer.Visible = flag;
  72. CellNode.L_MarginContainer.Instance.Visible = flag;
  73. var textureButton = CellNode.L_WaveContainer.L_TextureButton.Instance;
  74. if (flag)
  75. {
  76. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Down_png);
  77. }
  78. else
  79. {
  80. textureButton.TextureNormal = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Right_png);
  81. }
  82. }
  83.  
  84. /// <summary>
  85. /// 是否展开
  86. /// </summary>
  87. public bool IsExpand()
  88. {
  89. return CellNode.L_MarkContainer.Instance.Visible;
  90. }
  91.  
  92. public override void OnClick()
  93. {
  94. CellNode.UiPanel.EditorTileMap.SelectWaveIndex = Index;
  95. //派发选中波数事件
  96. EventManager.EmitEvent(EventEnum.OnSelectWave, Index);
  97. CellNode.UiPanel.SetSelectCell(this, CellNode.L_WaveContainer.Instance, MapEditorMapMarkPanel.SelectToolType.Wave);
  98. }
  99.  
  100. public override void OnSelect()
  101. {
  102. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = true;
  103. }
  104.  
  105. public override void OnUnSelect()
  106. {
  107. CellNode.L_WaveContainer.L_WaveButton.L_Select.Instance.Visible = false;
  108. }
  109. }