Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / data / DungeonRoomSplit.cs
@小李xl 小李xl on 29 Jul 2023 2 KB 创建门区域, 开发中
  1.  
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4.  
  5. /// <summary>
  6. /// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总
  7. /// </summary>
  8. public class DungeonRoomSplit
  9. {
  10. /// <summary>
  11. /// 当前房间是否绘制完成, 也就是是否可用
  12. /// </summary>
  13. [JsonInclude]
  14. public bool Ready;
  15.  
  16. /// <summary>
  17. /// 房间配置路径
  18. /// </summary>
  19. [JsonInclude]
  20. public string RoomPath;
  21.  
  22. /// <summary>
  23. /// 房间地块配置数据
  24. /// </summary>
  25. [JsonInclude]
  26. public string TilePath;
  27.  
  28. /// <summary>
  29. /// 房间配置数据, 第一次获取会在资源中加载数据
  30. /// </summary>
  31. [JsonIgnore]
  32. public DungeonRoomInfo RoomInfo
  33. {
  34. get
  35. {
  36. if (_roomInfo == null && RoomPath != null)
  37. {
  38. var asText = ResourceManager.LoadText(RoomPath);
  39. _roomInfo = JsonSerializer.Deserialize<DungeonRoomInfo>(asText);
  40.  
  41. // //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
  42. // var areaInfos = _roomInfo.DoorAreaInfos;
  43. // if (areaInfos.Count == 0)
  44. // {
  45. // areaInfos.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  46. // areaInfos.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  47. // areaInfos.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  48. // areaInfos.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  49. // }
  50. }
  51.  
  52. return _roomInfo;
  53. }
  54. set => _roomInfo = value;
  55. }
  56.  
  57. private DungeonRoomInfo _roomInfo;
  58.  
  59. /// <summary>
  60. /// 房间地块配置数据
  61. /// </summary>
  62. [JsonIgnore]
  63. public DungeonTileInfo TileInfo
  64. {
  65. get
  66. {
  67. if (_tileInfo == null && TilePath != null)
  68. {
  69. var asText = ResourceManager.LoadText(TilePath);
  70. _tileInfo = JsonSerializer.Deserialize<DungeonTileInfo>(asText);
  71. }
  72.  
  73. return _tileInfo;
  74. }
  75. set => _tileInfo = value;
  76. }
  77.  
  78. private DungeonTileInfo _tileInfo;
  79. }