Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorMapMark / EditorMarkCell.cs
@小李xl 小李xl on 3 Feb 2024 3 KB 小修改
using System;
using Config;
using Godot;
using UI.MapEditor;

namespace UI.MapEditorMapMark;

public class EditorMarkCell : UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData>
{
    //上一次点击的时间
    private long _prevClickTime2 = -1;
    
    public override void OnInit()
    {
        //这里不绑定 Click 函数, 而是绑定 OnClickHandler, 因为 Select 交给 MapEditorMapMarkPanel 处理了
        CellNode.L_MarkButton.Instance.Pressed += OnClickHandler;
    }

    public override void OnSetData(MapEditorMapMarkPanel.MarkCellData data)
    {
        var textureRect = CellNode.L_MarkButton.L_MarkIcon.Instance;
        var text = "";
        //物体名称
        if (data.MarkInfo.MarkList != null && data.MarkInfo.MarkList.Count > 0)
        {
            var str = "";
            for (var i = 0; i < data.MarkInfo.MarkList.Count; i++)
            {
                var markInfoItem = data.MarkInfo.MarkList[i];
                if (i > 0)
                {
                    str += ",";
                }

                str += PreinstallMarkManager.GetMarkConfig(markInfoItem.Id).Name;
            }
            text += str;
        }
        else
        {
            if (data.MarkInfo.SpecialMarkType != SpecialMarkType.Normal)
            {
                text = PreinstallMarkManager.GetSpecialName(data.MarkInfo.SpecialMarkType);
            }
            else
            {
                text = "空";
            }
        }

        //延时时间
        if (data.Preloading)
        {
            text += "\n提前加载";
        }
        else
        {
            text += "\n" + data.MarkInfo.DelayTime + "秒";
        }
        
        //显示文本
        CellNode.L_MarkButton.Instance.Text = text;
        //显示图标
        textureRect.Texture = ResourceManager.GetMarkIcon(data.MarkInfo);
    }

    public void OnClickHandler()
    {
        EditorTileMapManager.SetSelectWaveIndex(Data.ParentCell.Index);
        CellNode.UiPanel.SetSelectCell(this, CellNode.Instance, MapEditorMapMarkPanel.SelectToolType.Mark);
        //选中标记
        EditorTileMapManager.SetSelectMark(Data.MarkInfo);
        
        //双击判定
        if (_prevClickTime2 >= 0)
        {
            var now = DateTime.Now.Ticks / 10000;
            if (now <= _prevClickTime2 + 500)
            {
                OnDoubleClickHandler();
            }

            _prevClickTime2 = now;
        }
        else
        {
            _prevClickTime2 = DateTime.Now.Ticks / 10000;
        }
    }

    public void OnDoubleClickHandler()
    {
        //双击聚焦标记
        var position = Data.MarkInfo.Position.AsVector2();
        CellNode.UiPanel.EditorTileMap.SetLookPosition(position);
    }

    public override void OnSelect()
    {
        CellNode.L_MarkButton.L_Select.Instance.Visible = true;
        //选中标记
        EditorTileMapManager.SetSelectMark(Data.MarkInfo);
    }

    public override void OnUnSelect()
    {
        CellNode.L_MarkButton.L_Select.Instance.Visible = false;
    }

    public override int OnSort(UiCell<MapEditorMapMark.MarkItem, MapEditorMapMarkPanel.MarkCellData> other)
    {
        if (Data.Preloading && other.Data.Preloading)
        {
            return 0;
        }
        else if (Data.Preloading)
        {
            return -1;
        }
        else if (other.Data.Preloading)
        {
            return 1;
        }
        return (int)(Data.MarkInfo.DelayTime * 1000 - other.Data.MarkInfo.DelayTime * 1000);
    }
}