Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / tileSetEditorTerrain / down / MaskCell.cs
  1. using Godot;
  2.  
  3. namespace UI.TileSetEditorTerrain;
  4.  
  5. public class MaskCell : UiCell<TileSetEditorTerrain.BottomCell, Rect2I>
  6. {
  7. /// <summary>
  8. /// 已经赋值并连接的TerrainCell
  9. /// </summary>
  10. public TerrainCell ConnectTerrainCell { get; private set; }
  11. /// <summary>
  12. /// 是否使用
  13. /// </summary>
  14. public bool UseFlag { get; private set; }
  15. /// <summary>
  16. /// 鼠标是否悬停
  17. /// </summary>
  18. public bool Hover { get; set; }
  19. private TextureRect _textureRect;
  20. private TileSetEditorTerrainPanel _panel;
  21. private float _startA;
  22.  
  23. public override void OnInit()
  24. {
  25. _startA = CellNode.Instance.Color.A;
  26. _panel = CellNode.UiPanel;
  27. _textureRect = _panel.S_BottomBg.L_TileTexture.Instance;
  28. CellNode.Instance.Draw += Draw;
  29. }
  30.  
  31. public override void OnDisable()
  32. {
  33. SetUseFlag(false);
  34. SetConnectTerrainCell(null);
  35. }
  36.  
  37. public override void Process(float delta)
  38. {
  39. CellNode.Instance.QueueRedraw();
  40. }
  41.  
  42. /// <summary>
  43. /// 设置连接的Cell
  44. /// </summary>
  45. public void SetConnectTerrainCell(TerrainCell terrainCell)
  46. {
  47. if (terrainCell == null)
  48. {
  49. if (ConnectTerrainCell != null)
  50. {
  51. ConnectTerrainCell.ConnectMaskCell = null;
  52. }
  53. ConnectTerrainCell = null;
  54. }
  55. else if (ConnectTerrainCell != terrainCell)
  56. {
  57. ConnectTerrainCell = terrainCell;
  58. terrainCell.ConnectMaskCell = this;
  59. }
  60. }
  61. /// <summary>
  62. /// 设置是否使用
  63. /// </summary>
  64. public void SetUseFlag(bool flag)
  65. {
  66. UseFlag = flag;
  67. CellNode.Instance.Color = new Color(0, 0, 0, flag ? 0 : _startA);
  68. }
  69.  
  70. private void Draw()
  71. {
  72. if (Hover || (ConnectTerrainCell != null && ConnectTerrainCell.Hover))
  73. {
  74. CellNode.Instance.DrawRect(
  75. new Rect2(Vector2.Zero, CellNode.Instance.Size),
  76. new Color(0, 1, 0, 0.3f)
  77. );
  78. }
  79. //选中时绘制轮廓
  80. if (ConnectTerrainCell != null) //存在连接的Cell
  81. {
  82. var width = 2f / _textureRect.Scale.X;
  83. CellNode.Instance.DrawRect(
  84. new Rect2(Vector2.Zero + new Vector2(width / 2f, width / 2f), CellNode.Instance.Size - new Vector2(width, width)),
  85. new Color(0, 1, 0, 0.6f), false, width
  86. );
  87. }
  88. else if (UseFlag)
  89. {
  90. var width = 2f / _textureRect.Scale.X;
  91. CellNode.Instance.DrawRect(
  92. new Rect2(Vector2.Zero + new Vector2(width / 2f, width / 2f), CellNode.Instance.Size - new Vector2(width, width)),
  93. new Color(1, 1, 1, 0.6f), false, width
  94. );
  95. }
  96. }
  97. }