Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditor / TileView / EditorTileMap.cs
@lijincheng lijincheng on 11 Jul 2023 1 KB 绘制cell功能
using Godot;

namespace UI.MapEditor;

public partial class EditorTileMap : TileMap
{
    private Vector2 _mousePosition;
    private Vector2I _mouseCellPosition;

    public override void _Process(double delta)
    {
        var position = GetLocalMousePosition();
        _mouseCellPosition = new Vector2I(
            (int)(position.X / GameConfig.TileCellSize),
            (int)(position.Y / GameConfig.TileCellSize)
        );
        _mousePosition = new Vector2(
            _mouseCellPosition.X * GameConfig.TileCellSize,
            _mouseCellPosition.Y * GameConfig.TileCellSize
        );

        if (Input.IsMouseButtonPressed(MouseButton.Left))
        {
            SetCell(GameConfig.FloorMapLayer, _mouseCellPosition, 0, new Vector2I(0,8));
        }
    }

    public override void _Draw()
    {
        DrawRect(new Rect2(_mousePosition, GameConfig.TileCellSize, GameConfig.TileCellSize), Colors.Wheat, false);
    }

    public override void _Input(InputEvent @event)
    {
        if (@event is InputEventMouseButton mouseButton)
        {
            if (mouseButton.ButtonIndex == MouseButton.WheelDown)
            {
                //缩小
                Shrink();
            }
            else if (mouseButton.ButtonIndex == MouseButton.WheelUp)
            {
                //放大
                Magnify();
            }
        }
    }

    //缩小
    private void Shrink()
    {
        var scale = Scale / 1.1f;
        if (scale.LengthSquared() >= 0.5f)
        {
            Scale = scale;
        }
        else
        {
            GD.Print("太小了");
        }
    }
    //放大
    private void Magnify()
    {
        var scale = Scale * 1.1f;
        if (scale.LengthSquared() <= 2000)
        {
            Scale = scale;
        }
        else
        {
            GD.Print("太大了");
        }
    }
}