-
- /// <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>
- /// 获取指定房间类型与之相连的上一个房间对象, prevRoom 可能为 null
- /// </summary>
- public abstract RoomInfo GetConnectPrevRoom(RoomInfo prevRoom, DungeonRoomType nextRoomType);
-
- /// <summary>
- /// 计算下一个房间类型, prevRoom 可能为 null
- /// </summary>
- public abstract DungeonRoomType GetNextRoomType(RoomInfo prevRoom);
-
- /// <summary>
- /// 执行生成指定房间成功, prevRoom 可能为 null
- /// </summary>
- public abstract void GenerateRoomSuccess(RoomInfo prevRoom, RoomInfo roomInfo);
-
- /// <summary>
- /// 执行生成指定类型房间失败, prevRoom 可能为 null
- /// </summary>
- public abstract void GenerateRoomFail(RoomInfo prevRoom, DungeonRoomType roomType);
-
- //-------------------------- 下面的函数 prevRoom 一定不会为 null --------------------------
-
- /// <summary>
- /// 获取下一个房间的方向, prevRoom 一定不为 null
- /// </summary>
- public abstract RoomDirection GetNextRoomDoorDirection(RoomInfo prevRoom, DungeonRoomType roomType);
-
- /// <summary>
- /// 获取下一个房间的间隔距离, prevRoom 一定不为 null
- /// </summary>
- public abstract int GetNextRoomInterval(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
-
- /// <summary>
- /// 获取下一个房间相对于当前房间的原点偏移 (单位: 格), prevRoom 一定不为 null
- /// </summary>
- public abstract int GetNextRoomOffset(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
- }