- using Godot;
-
- namespace UI.TileSetEditorTerrain;
-
- public class TerrainCell : UiCell<TileSetEditorTerrain.RightCell, byte>
- {
- /// <summary>
- /// 是否放置了图块
- /// </summary>
- public bool IsPutDownTexture { get; private set; }
-
- /// <summary>
- /// 图块在 Source 中的位置, 单位: 像素
- /// </summary>
- public Vector2I TextureCell { get; private set; }
-
- private TileSetEditorTerrainPanel _panel;
-
- public override void OnInit()
- {
- _panel = CellNode.UiPanel;
- CellNode.Instance.GuiInput += OnGuiInput;
- }
-
- public bool OnDropCell(MaskCell maskCell)
- {
- if (CellNode.Instance.IsMouseInRect())
- {
- OnDropData(maskCell);
- return true;
- }
-
- return false;
- }
-
- private void OnGuiInput(InputEvent @event)
- {
- if (@event is InputEventMouseButton mouseEvent)
- {
- if (mouseEvent.ButtonIndex == MouseButton.Right && mouseEvent.Pressed) //右键擦除图块
- {
- CellNode.Instance.AcceptEvent();
- var flag = IsPutDownTexture;
- ClearCell();
- if (flag)
- {
- SetTerrainBitData(null);
- }
- }
- }
- }
-
- /// <summary>
- /// 设置选择的Cell
- /// </summary>
- public void SetCell(Rect2I rect)
- {
- TextureCell = rect.Position;
- var sprite2D = CellNode.L_CellTexture.Instance;
- sprite2D.Texture = _panel.EditorPanel.Texture;
- sprite2D.RegionEnabled = true;
- sprite2D.RegionRect = rect;
- IsPutDownTexture = true;
- }
-
- /// <summary>
- /// 清除选中的cell
- /// </summary>
- public void ClearCell()
- {
- CellNode.L_CellTexture.Instance.Texture = null;
- IsPutDownTexture = false;
- }
-
- private void OnDropData(MaskCell maskCell)
- {
- SetCell(maskCell.Data);
- SetTerrainBitData(new []{ TextureCell.X, TextureCell.Y });
- }
-
- private void SetTerrainBitData(int[] cellData)
- {
- if (cellData == null)
- {
- _panel.EditorPanel.TileSetSourceInfo.Terrain.RemoveTerrainCell(Index, Data);
- }
- else
- {
- _panel.EditorPanel.TileSetSourceInfo.Terrain.SetTerrainCell(Index, Data, cellData);
- }
-
- EventManager.EmitEvent(EventEnum.OnTileSetDirty);
- }
- }