Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreatePreinstall / MapEditorCreatePreinstallPanel.cs
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Godot;

namespace UI.MapEditorCreatePreinstall;

public partial class MapEditorCreatePreinstallPanel : MapEditorCreatePreinstall
{
    private RoomPreinstallInfo _roomPreinstallInfo;
    private DungeonRoomType _roomType;

    /// <summary>
    /// 初始化房间预设数据, 用于创建预设
    /// </summary>
    public void InitData(DungeonRoomType roomType)
    {
        _roomType = roomType;
    }
    
    /// <summary>
    /// 初始化房间预设数据, 用于编辑预设
    /// </summary>
    public void InitData(DungeonRoomType roomType, RoomPreinstallInfo preinstallInfo)
    {
        InitData(roomType);
        _roomPreinstallInfo = preinstallInfo;
        S_PreinstallNameInput.Instance.Text = preinstallInfo.Name;
        S_WeightInput.Instance.Value = preinstallInfo.Weight;
        S_RemarkInput.Instance.Text = preinstallInfo.Remark;
    }

    /// <summary>
    /// 填完数据后创建数据进行验证并创建数据对象, 如果验证失败, 则返回null
    /// </summary>
    public RoomPreinstallInfo GetRoomPreinstall(List<RoomPreinstallInfo> roomPreinstalls)
    {
        var data = new RoomPreinstallInfo();
        data.Name = S_PreinstallNameInput.Instance.Text;
        //检查名称是否合规
        if (string.IsNullOrEmpty(data.Name))
        {
            EditorWindowManager.ShowTips("错误", "预设名称不能为空!");
            return null;
        }

        var index = roomPreinstalls.FindIndex(preinstall => preinstall.Name == data.Name && preinstall != _roomPreinstallInfo);
        if (index >= 0)
        {
            EditorWindowManager.ShowTips("错误", "当前房间已经存在预设名称'" + data.Name + "', 请使用其他名称!");
            return null;
        }

        data.Remark = S_RemarkInput.Instance.Text;
        data.Weight = (int)S_WeightInput.Instance.Value;
        if (_roomPreinstallInfo != null) //编辑数据
        {
            data.WaveList = _roomPreinstallInfo.WaveList;
        }
        else //创建数据
        {
            //预加载波
            data.InitWaveList();
            CreateSpecialMark(data.WaveList);
        }

        return data;
    }

    //创建特殊标记
    private void CreateSpecialMark(List<List<MarkInfo>> dataWaveList)
    {
        if (_roomType == DungeonRoomType.Inlet) //初始房间
        {
            var preloading = dataWaveList[0];
            //玩家标记
            var markInfo = new MarkInfo();
            markInfo.Position = new SerializeVector2();
            markInfo.Size = new SerializeVector2();
            markInfo.SpecialMarkType = SpecialMarkType.BirthPoint;
            markInfo.MarkList = new List<MarkInfoItem>();
            preloading.Add(markInfo);
        }
    }
}