Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / tileSetEditorSegment / TileSetEditorSegmentLeftBg.cs
@小李xl 小李xl on 13 Dec 2023 2 KB 制作图块Ui, 制作绘制网格
using Godot;

namespace UI.TileSetEditorSegment;

public partial class TileSetEditorSegmentLeftBg : ColorRect, IUiNodeScript
{
    private TileSetEditorSegment.LeftBg _leftBg;
    private DragBinder _dragBinder;
    
    public void SetUiNode(IUiNode uiNode)
    {
        _leftBg = (TileSetEditorSegment.LeftBg)uiNode;
        _dragBinder = DragUiManager.BindDrag(this, OnDrag);
        Resized += OnLeftBgResize;
    }

    public void OnDestroy()
    {
        _dragBinder.UnBind();
    }

    private void OnDrag(DragState state, Vector2 pos)
    {
        if (state == DragState.DragMove)
        {
            var p = _leftBg.L_TileTexture.Instance.Position + pos;
            _leftBg.L_TileTexture.Instance.Position = p;
            _leftBg.L_Grid.Instance.Material.SetShaderMaterialParameter(ShaderParamNames.Offset, -p);
        }
    }

    public override void _Input(InputEvent @event)
    {
        if (@event is InputEventMouseButton mouseButton)
        {
            if (_leftBg.UiPanel.IsOpen)
            {
                if (mouseButton.ButtonIndex == MouseButton.WheelDown)
                {
                    if (GetGlobalRect().HasPoint(mouseButton.GlobalPosition))
                    {
                        //缩小
                        var scale = _leftBg.L_TileTexture.Instance.Scale;
                        scale = new Vector2(Mathf.Max(0.1f, scale.X / 1.1f), Mathf.Max(0.1f, scale.Y / 1.1f));
                        _leftBg.L_TileTexture.Instance.Scale = scale;
                        OnLeftBgResize();
                    }
                }
                else if (mouseButton.ButtonIndex == MouseButton.WheelUp)
                {
                    if (GetGlobalRect().HasPoint(mouseButton.GlobalPosition))
                    {
                        //放大
                        var scale = _leftBg.L_TileTexture.Instance.Scale;
                        scale = new Vector2(Mathf.Min(20f, scale.X * 1.1f), Mathf.Min(20f, scale.Y * 1.1f));
                        _leftBg.L_TileTexture.Instance.Scale = scale;
                        OnLeftBgResize();
                    }
                }
            }
        }
    }

    /// <summary>
    /// 当前Ui被显示出来时调用
    /// </summary>
    public void OnShow()
    {
        //背景颜色
       Color = _leftBg.UiPanel.EditorPanel.BgColor;
       OnLeftBgResize();
    }
    
    //背景宽度变化
    private void OnLeftBgResize()
    {
        var sprite = _leftBg.L_TileTexture.Instance;
        sprite.Texture = _leftBg.UiPanel.EditorPanel.Texture;
        var colorRect = _leftBg.L_Grid.Instance;
        colorRect.Material.SetShaderMaterialParameter(ShaderParamNames.Size, Size);
        colorRect.Material.SetShaderMaterialParameter(ShaderParamNames.GridSize, GameConfig.TileCellSize * sprite.Scale.X);
        
    }
}