Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / tileSetEditorCombination / right / TileSelected.cs
using Godot;

namespace UI.TileSetEditorCombination;

public partial class TileSelected : VBoxContainer, IUiNodeScript
{
    private TileSetEditorCombination.RightBg _rightBg;
    private UiGrid<TileSetEditorCombination.CellButton, ImportCombinationData> _grid;
    
    public void SetUiNode(IUiNode uiNode)
    {
        _rightBg = (TileSetEditorCombination.RightBg)uiNode;

        _grid = new UiGrid<TileSetEditorCombination.CellButton, ImportCombinationData>(_rightBg.L_ScrollContainer.L_CellButton, typeof(TileCell));
        _grid.SetCellOffset(new Vector2I(5, 5));
        _grid.SetAutoColumns(true);
        _grid.SetHorizontalExpand(true);
        
        _rightBg.UiPanel.AddEventListener(EventEnum.OnImportCombination, OnImportCombination);
        _rightBg.UiPanel.AddEventListener(EventEnum.OnRemoveCombination, OnRemoveCombination);
        _rightBg.UiPanel.AddEventListener(EventEnum.OnUpdateCombination, OnUpdateCombination);
    }

    /// <summary>
    /// 导入组合图块
    /// </summary>
    private void OnImportCombination(object obj)
    {
        if (obj is ImportCombinationData data)
        {
            _grid.Add(data);
            _grid.Sort();
        }
    }
    
    /// <summary>
    /// 移除组合图块
    /// </summary>
    private void OnRemoveCombination(object obj)
    {
        if (obj is ImportCombinationData data)
        {
            var uiCell = _grid.Find(c => c.Data.CombinationInfo.Id == data.CombinationInfo.Id);
            if (uiCell != null)
            {
                _grid.RemoveByIndex(uiCell.Index);
            }
        }
    }

    /// <summary>
    /// 修改组合图块
    /// </summary>
    private void OnUpdateCombination(object obj)
    {
        if (obj is ImportCombinationData data)
        {
            var uiCell = _grid.Find(c => c.Data.CombinationInfo.Id == data.CombinationInfo.Id);
            if (uiCell != null)
            {
                uiCell.SetData(data);
            }
        }
    }

    public void OnDestroy()
    {
        _grid.Destroy();
    }
    

    /// <summary>
    /// 改变TileSet纹理
    /// </summary>
    public void OnChangeTileSetTexture()
    {
        //_grid.RemoveAll();
        //刷新预览图
        _grid.ForEach(cell =>
        {
            cell.Data.UpdatePreviewTexture(_rightBg.UiPanel.EditorPanel.TextureImage);
        });
    }
}