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_AutoCheckInput.Instance.ButtonPressed = preinstallInfo.AutoFill;
        S_WeightInput.Instance.Value = preinstallInfo.Weight;
        S_RemarkInput.Instance.Text = preinstallInfo.Remark;
    }

    /// <summary>
    /// 填完数据后创建数据进行验证并创建数据对象, 如果验证失败, 则返回null
    /// </summary>
    public RoomPreinstallInfo GetRoomPreinstall(List<RoomPreinstallInfo> roomPreinstalls)
    {
        RoomPreinstallInfo data;
        if (_roomPreinstallInfo != null) //编辑数据
        {
            data = _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.AutoFill = S_AutoCheckInput.Instance.ButtonPressed;
            data.Remark = S_RemarkInput.Instance.Text;
            data.Weight = (int)S_WeightInput.Instance.Value;
        }
        else //创建数据
        {
            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);
            if (index >= 0)
            {
                EditorWindowManager.ShowTips("错误", "当前房间已经存在预设名称'" + data.Name + "', 请使用其他名称!");
                return null;
            }

            data.AutoFill = S_AutoCheckInput.Instance.ButtonPressed;
            data.Remark = S_RemarkInput.Instance.Text;
            data.Weight = (int)S_WeightInput.Instance.Value;
            //预加载波
            data.InitWaveList();
            //初始化特殊标记
            data.InitSpecialMark(_roomType);
        }
        return data;
    }
}