Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / DungeonRule.cs

/// <summary>
/// 用于自定义地牢房间生成规则
/// </summary>
public abstract class DungeonRule
{
    public DungeonGenerator Generator { get; }
    
    public DungeonConfig Config { get; }
    
    public SeedRandom Random { get; }

    public DungeonRoomGroup RoomGroup { get; }

    public DungeonRule(DungeonGenerator generator)
    {
        Generator = generator;
        Config = generator.Config;
        Random = generator.Random;
        RoomGroup = generator.RoomGroup;
    }

    /// <summary>
    /// 是否可以结束生成了
    /// </summary>
    public abstract bool CanOverGenerator();

    /// <summary>
    /// 获取指定房间类型与之相连的上一个房间对象
    /// </summary>
    public abstract RoomInfo GetConnectPrevRoom(RoomInfo prevRoomInfo, DungeonRoomType nextRoomType);
    
    /// <summary>
    /// 计算下一个房间类型
    /// </summary>
    public abstract DungeonRoomType GetNextRoomType(RoomInfo prevRoomInfo);

    /// <summary>
    /// 执行生成指定房间成功
    /// </summary>
    public abstract void GenerateRoomSuccess(RoomInfo prevRoomInfo, RoomInfo roomInfo);
    
    /// <summary>
    /// 执行生成指定类型房间失败
    /// </summary>
    public abstract void GenerateRoomFail(RoomInfo prevRoomInfo, DungeonRoomType roomType);
}