Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorSelectObject / MapEditorSelectObjectPanel.cs
@小李xl 小李xl on 25 Jan 2024 4 KB 物体添加稀有度配置

using System;
using System.Collections.Generic;
using System.Linq;
using Config;
using Godot;

namespace UI.MapEditorSelectObject;

public partial class MapEditorSelectObjectPanel : MapEditorSelectObject
{
    /// <summary>
    /// 双击选中物体事件
    /// </summary>
    public event Action<ExcelConfig.ActivityBase> SelectObjectEvent;
    
    public class TypeButtonData
    {
        /// <summary>
        /// 类型名称
        /// </summary>
        public string Name;
        /// <summary>
        /// 类型值
        /// </summary>
        public ActivityType Type;

        public TypeButtonData(string name, ActivityType type)
        {
            Name = name;
            Type = type;
        }
    }
    //类型网格组件
    private UiGrid<TypeButton, TypeButtonData> _typeGrid;
    //物体网格组件
    private UiGrid<ObjectButton, ExcelConfig.ActivityBase> _objectGrid;
    //允许出现在该面板中的物体类型
    private ActivityType[] _typeArray = new[] { ActivityType.Enemy, ActivityType.Weapon, ActivityType.Prop };
    
    public override void OnCreateUi()
    {
        S_Search.Instance.Pressed += OnSearch;
        
        _typeGrid = new UiGrid<TypeButton, TypeButtonData>(S_TypeButton, typeof(TypeButtonCell));
        _typeGrid.SetColumns(1);
        _typeGrid.SetHorizontalExpand(true);
        _typeGrid.SetCellOffset(new Vector2I(0, 5));
        
        _objectGrid = new UiGrid<ObjectButton, ExcelConfig.ActivityBase>(S_ObjectButton, typeof(ObjectButtonCell));
        _objectGrid.SetAutoColumns(true);
        _objectGrid.SetHorizontalExpand(true);
        _objectGrid.SetCellOffset(new Vector2I(10, 10));
    }

    public override void OnDestroyUi()
    {
        _typeGrid.Destroy();
        _objectGrid.Destroy();
    }

    /// <summary>
    /// 设置显示的物体类型
    /// </summary>
    public void SetShowType(ActivityType activityType)
    {
        _typeGrid.RemoveAll();
        if (activityType == ActivityType.None)
        {
            _typeGrid.Add(new TypeButtonData("所有", ActivityType.None));
            _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Weapon), ActivityType.Weapon));
            _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Prop), ActivityType.Prop));
            _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(ActivityType.Enemy), ActivityType.Enemy));
        }
        else
        {
            _typeGrid.Add(new TypeButtonData(ActivityId.GetTypeName(activityType), activityType));
        }
        _typeGrid.SelectIndex = 0;
    }

    /// <summary>
    /// 搜索对象
    /// </summary>
    public void OnSearch()
    {
        //类型
        ActivityType type;
        //名称
        var name = S_LineEdit.Instance.Text;
        var buttonData = _typeGrid.GetData(_typeGrid.SelectIndex);
        if (buttonData != null)
        {
            type = buttonData.Type;
        }
        else
        {
            type = ActivityType.None;
        }

        //搜索结果
        var arr = new List<ExcelConfig.ActivityBase>();
        switch (type)
        {
            //全部类型
            case ActivityType.None:
                arr.Add(PreinstallMarkManager.RandomEnemy);
                arr.Add(PreinstallMarkManager.RandomProp);
                arr.Add(PreinstallMarkManager.RandomWeapon);
                break;
            //随机武器
            case ActivityType.Weapon:
                arr.Add(PreinstallMarkManager.RandomWeapon);
                break;
            //随机道具
            case ActivityType.Prop:
                arr.Add(PreinstallMarkManager.RandomProp);
                break;
            //随机敌人
            case ActivityType.Enemy:
                arr.Add(PreinstallMarkManager.RandomEnemy);
                break;
        }
        foreach (var o in ExcelConfig.ActivityBase_List)
        {
            if (o.ShowInMapEditor &&
                (string.IsNullOrEmpty(name) || o.Name.Contains(name) || o.Id.Contains(name)) &&
                (type == ActivityType.None ? _typeArray.Contains(o.Type) : o.Type == type))
            {
                arr.Add(o);
            }
        }
        
        _objectGrid.SetDataList(arr.ToArray());
    }

    /// <summary>
    /// 选中对象
    /// </summary>
    public void SelectCell(ExcelConfig.ActivityBase activityObject)
    {
        if (SelectObjectEvent != null)
        {
            SelectObjectEvent(activityObject);
        }
    }

    /// <summary>
    /// 获取选中的数据
    /// </summary>
    public ExcelConfig.ActivityBase GetSelectData()
    {
        return _objectGrid.SelectData;
    }
}