Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / DungeonRule.cs
@小李xl 小李xl on 25 Jan 2024 2 KB 自定义房间生成规则, 完成
  1.  
  2. /// <summary>
  3. /// 用于自定义地牢房间生成规则
  4. /// </summary>
  5. public abstract class DungeonRule
  6. {
  7. public DungeonGenerator Generator { get; }
  8. public DungeonConfig Config { get; }
  9. public SeedRandom Random { get; }
  10.  
  11. public DungeonRoomGroup RoomGroup { get; }
  12.  
  13. public DungeonRule(DungeonGenerator generator)
  14. {
  15. Generator = generator;
  16. Config = generator.Config;
  17. Random = generator.Random;
  18. RoomGroup = generator.RoomGroup;
  19. }
  20.  
  21. /// <summary>
  22. /// 是否可以结束生成了
  23. /// </summary>
  24. public abstract bool CanOverGenerator();
  25.  
  26. /// <summary>
  27. /// 获取指定房间类型与之相连的上一个房间对象, prevRoom 可能为 null
  28. /// </summary>
  29. public abstract RoomInfo GetConnectPrevRoom(RoomInfo prevRoom, DungeonRoomType nextRoomType);
  30. /// <summary>
  31. /// 计算下一个房间类型, prevRoom 可能为 null
  32. /// </summary>
  33. public abstract DungeonRoomType GetNextRoomType(RoomInfo prevRoom);
  34.  
  35. /// <summary>
  36. /// 执行生成指定房间成功, prevRoom 可能为 null
  37. /// </summary>
  38. public abstract void GenerateRoomSuccess(RoomInfo prevRoom, RoomInfo roomInfo);
  39. /// <summary>
  40. /// 执行生成指定类型房间失败, prevRoom 可能为 null
  41. /// </summary>
  42. public abstract void GenerateRoomFail(RoomInfo prevRoom, DungeonRoomType roomType);
  43. //-------------------------- 下面的函数 prevRoom 一定不会为 null --------------------------
  44. /// <summary>
  45. /// 获取下一个房间的方向, prevRoom 一定不为 null
  46. /// </summary>
  47. public abstract RoomDirection GetNextRoomDoorDirection(RoomInfo prevRoom, DungeonRoomType roomType);
  48.  
  49. /// <summary>
  50. /// 获取下一个房间的间隔距离, prevRoom 一定不为 null
  51. /// </summary>
  52. public abstract int GetNextRoomInterval(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
  53. /// <summary>
  54. /// 获取下一个房间相对于当前房间的原点偏移 (单位: 格), prevRoom 一定不为 null
  55. /// </summary>
  56. public abstract int GetNextRoomOffset(RoomInfo prevRoom, DungeonRoomType roomType, RoomDirection direction);
  57. }