Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorManager.cs

using System.Collections.Generic;

public static class EditorManager
{
    /// <summary>
    /// 当前使用的地牢组
    /// </summary>
    public static DungeonRoomGroup SelectDungeonGroup { get; private set; }

    /// <summary>
    /// 当使用的地牢房间
    /// </summary>
    public static DungeonRoomSplit SelectRoom { get; private set; }

    /// <summary>
    /// 当前使用的预设索引
    /// </summary>
    public static int SelectPreinstallIndex { get; private set; } = -1;

    /// <summary>
    /// 当前使用的预设
    /// </summary>
    public static RoomPreinstallInfo SelectPreinstall { get; private set; }

    /// <summary>
    /// 当前选中的波索引
    /// </summary>
    public static int SelectWaveIndex { get; private set; } = -1;

    /// <summary>
    /// 当前选中的波
    /// </summary>
    public static List<MarkInfo> SelectWave { get; private set; }
    
    /// <summary>
    /// 当前选中的标记
    /// </summary>
    public static MarkInfo SelectMark { get; private set; }

    public static void SetSelectDungeonGroup(DungeonRoomGroup roomGroup)
    {
        if (SelectDungeonGroup != roomGroup)
        {
            SelectDungeonGroup = roomGroup;
            EventManager.EmitEvent(EventEnum.OnSelectGroup, SelectDungeonGroup);
        }
    }

    public static void SetSelectRoom(DungeonRoomSplit roomSplit)
    {
        if (SelectRoom != roomSplit)
        {
            SelectRoom = roomSplit;
            EventManager.EmitEvent(EventEnum.OnSelectRoom, SelectRoom);
        }
    }

    public static void SetSelectPreinstallIndex(int index)
    {
        if (SelectRoom == null)
        {
            if (SelectPreinstallIndex != -1)
            {
                SelectPreinstallIndex = -1;
                SelectPreinstall = null;
                EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
            }
        }
        else if (SelectPreinstallIndex != index)
        {
            if (index < 0 || SelectRoom.Preinstall == null || index >= SelectRoom.Preinstall.Count)
            {
                if (SelectPreinstallIndex != -1)
                {
                    SelectPreinstallIndex = -1;
                    SelectPreinstall = null;
                    EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
                }
            }
            else
            {
                if (SelectPreinstallIndex != index)
                {
                    SelectPreinstallIndex = index;
                    SelectPreinstall = SelectRoom.Preinstall[index];
                    EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
                }
            }
        }
    }

    public static void SetSelectWaveIndex(int index)
    {
        if (SelectPreinstall == null)
        {
            if (SelectWaveIndex != -1)
            {
                SelectWaveIndex = -1;
                SelectWave = null;
                EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
            }
        }
        else if (SelectWaveIndex != index)
        {
            if (index < 0 || SelectPreinstall.WaveList == null || index >= SelectPreinstall.WaveList.Count)
            {
                if (SelectWaveIndex != -1)
                {
                    SelectWaveIndex = -1;
                    SelectWave = null;
                    EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
                }
            }
            else
            {
                if (SelectWaveIndex != index)
                {
                    SelectWaveIndex = index;
                    SelectWave = SelectPreinstall.WaveList[index];
                    EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
                }
            }
        }
    }

    public static void SetSelectMark(MarkInfo markInfo)
    {
        if (SelectMark != markInfo)
        {
            SelectMark = markInfo;
            EventManager.EmitEvent(EventEnum.OnSelectMark, markInfo);
        }
    }
    
    /// <summary>
    /// 根据 RoomErrorType 枚举获取房间错误信息
    /// </summary>
    public static string GetRoomErrorTypeMessage(RoomErrorType errorType)
    {
        switch (errorType)
        {
            case RoomErrorType.None:
                return "";
            case RoomErrorType.TileError:
                return "房间地块存在绘制错误";
            case RoomErrorType.DoorAreaError:
                return "房间至少要有两个不同方向的门区域";
            case RoomErrorType.NoPreinstallError:
                return "房间没有预设";
        }

        return null;
    }
}