Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / data / DungeonRoomSplit.cs
@小李xl 小李xl on 17 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 string ScenePath;
  15. /// <summary>
  16. /// 房间配置路径
  17. /// </summary>
  18. [JsonInclude]
  19. public string RoomPath;
  20.  
  21. /// <summary>
  22. /// 房间地块配置数据
  23. /// </summary>
  24. [JsonInclude]
  25. public string TilePath;
  26.  
  27. /// <summary>
  28. /// 房间配置数据, 第一次获取会要在资源中加载数据
  29. /// </summary>
  30. [JsonIgnore]
  31. public DungeonRoomInfo RoomInfo
  32. {
  33. get
  34. {
  35. if (_roomInfo == null)
  36. {
  37. var asText = ResourceManager.LoadText(RoomPath);
  38. _roomInfo = JsonSerializer.Deserialize<DungeonRoomInfo>(asText);
  39.  
  40. //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
  41. var areaInfos = _roomInfo.DoorAreaInfos;
  42. if (areaInfos.Count == 0)
  43. {
  44. areaInfos.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  45. areaInfos.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  46. areaInfos.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  47. areaInfos.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  48. }
  49. }
  50.  
  51. return _roomInfo;
  52. }
  53. }
  54.  
  55. private DungeonRoomInfo _roomInfo;
  56.  
  57. /// <summary>
  58. /// 房间地块配置数据
  59. /// </summary>
  60. [JsonIgnore]
  61. public DungeonTileInfo TileInfo
  62. {
  63. get
  64. {
  65. if (_tileInfo == null)
  66. {
  67. var asText = ResourceManager.LoadText(TilePath);
  68. _tileInfo = JsonSerializer.Deserialize<DungeonTileInfo>(asText);
  69. }
  70.  
  71. return _tileInfo;
  72. }
  73. }
  74.  
  75. private DungeonTileInfo _tileInfo;
  76. }