using Godot; namespace UI.TileSetEditorTerrain; public class MaskCell : UiCell<TileSetEditorTerrain.BottomCell, Rect2I> { /// <summary> /// 已经赋值并连接的TerrainCell /// </summary> public TerrainCell ConnectTerrainCell { get; private set; } /// <summary> /// 是否使用 /// </summary> public bool UseFlag { get; private set; } /// <summary> /// 鼠标是否悬停 /// </summary> public bool Hover { get; set; } private TextureRect _textureRect; private TileSetEditorTerrainPanel _panel; private float _startA; public override void OnInit() { _startA = CellNode.Instance.Color.A; _panel = CellNode.UiPanel; _textureRect = _panel.S_BottomBg.L_TileTexture.Instance; CellNode.Instance.Draw += Draw; } public override void OnDisable() { SetUseFlag(false); SetConnectTerrainCell(null); } public override void Process(float delta) { CellNode.Instance.QueueRedraw(); } /// <summary> /// 设置连接的Cell /// </summary> public void SetConnectTerrainCell(TerrainCell terrainCell) { if (terrainCell == null) { if (ConnectTerrainCell != null) { ConnectTerrainCell.ConnectMaskCell = null; } ConnectTerrainCell = null; } else if (ConnectTerrainCell != terrainCell) { ConnectTerrainCell = terrainCell; terrainCell.ConnectMaskCell = this; } } /// <summary> /// 设置是否使用 /// </summary> public void SetUseFlag(bool flag) { UseFlag = flag; CellNode.Instance.Color = new Color(0, 0, 0, flag ? 0 : _startA); } private void Draw() { if (Hover || (ConnectTerrainCell != null && ConnectTerrainCell.Hover)) { CellNode.Instance.DrawRect( new Rect2(Vector2.Zero, CellNode.Instance.Size), new Color(0, 1, 0, 0.3f) ); } //选中时绘制轮廓 if (ConnectTerrainCell != null) //存在连接的Cell { var width = 2f / _textureRect.Scale.X; CellNode.Instance.DrawRect( new Rect2(Vector2.Zero + new Vector2(width / 2f, width / 2f), CellNode.Instance.Size - new Vector2(width, width)), new Color(0, 1, 0, 0.6f), false, width ); } else if (UseFlag) { var width = 2f / _textureRect.Scale.X; CellNode.Instance.DrawRect( new Rect2(Vector2.Zero + new Vector2(width / 2f, width / 2f), CellNode.Instance.Size - new Vector2(width, width)), new Color(1, 1, 1, 0.6f), false, width ); } } }