Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / data / DungeonRoomSplit.cs
@小李xl 小李xl on 6 Aug 2023 3 KB 更新Ui生成器
  1.  
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using System.Text.Json.Serialization;
  5.  
  6. /// <summary>
  7. /// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总
  8. /// </summary>
  9. public class DungeonRoomSplit
  10. {
  11. /// <summary>
  12. /// 当前房间是否绘制完成, 也就是是否可用
  13. /// </summary>
  14. [JsonInclude]
  15. public bool Ready;
  16.  
  17. /// <summary>
  18. /// 房间配置路径
  19. /// </summary>
  20. [JsonInclude]
  21. public string RoomPath;
  22.  
  23. /// <summary>
  24. /// 房间地块配置数据
  25. /// </summary>
  26. [JsonInclude]
  27. public string TilePath;
  28.  
  29. /// <summary>
  30. /// 房间预设配置数据
  31. /// </summary>
  32. [JsonInclude]
  33. public string PreinstallPath;
  34.  
  35. /// <summary>
  36. /// 房间配置数据, 第一次获取会在资源中加载数据
  37. /// </summary>
  38. [JsonIgnore]
  39. public DungeonRoomInfo RoomInfo
  40. {
  41. get
  42. {
  43. if (_roomInfo == null && RoomPath != null)
  44. {
  45. ReloadRoomInfo();
  46. }
  47.  
  48. return _roomInfo;
  49. }
  50. set => _roomInfo = value;
  51. }
  52.  
  53. private DungeonRoomInfo _roomInfo;
  54.  
  55. /// <summary>
  56. /// 房间地块配置数据
  57. /// </summary>
  58. [JsonIgnore]
  59. public DungeonTileInfo TileInfo
  60. {
  61. get
  62. {
  63. if (_tileInfo == null && TilePath != null)
  64. {
  65. ReloadTileInfo();
  66. }
  67.  
  68. return _tileInfo;
  69. }
  70. set => _tileInfo = value;
  71. }
  72.  
  73. private DungeonTileInfo _tileInfo;
  74. /// <summary>
  75. /// 房间预设数据
  76. /// </summary>
  77. [JsonIgnore]
  78. public List<RoomPreinstall> Preinstall
  79. {
  80. get
  81. {
  82. if (_preinstall == null && PreinstallPath != null)
  83. {
  84. ReloadPreinstall();
  85. }
  86.  
  87. return _preinstall;
  88. }
  89. set => _preinstall = value;
  90. }
  91.  
  92. private List<RoomPreinstall> _preinstall;
  93.  
  94.  
  95. /// <summary>
  96. /// 重新加载房间数据
  97. /// </summary>
  98. public void ReloadRoomInfo()
  99. {
  100. var asText = ResourceManager.LoadText(RoomPath);
  101. _roomInfo = JsonSerializer.Deserialize<DungeonRoomInfo>(asText);
  102.  
  103. // //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
  104. // var areaInfos = _roomInfo.DoorAreaInfos;
  105. // if (areaInfos.Count == 0)
  106. // {
  107. // areaInfos.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  108. // areaInfos.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  109. // areaInfos.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  110. // areaInfos.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  111. // }
  112. }
  113.  
  114. /// <summary>
  115. /// 重新加载房间地块配置数据
  116. /// </summary>
  117. public void ReloadTileInfo()
  118. {
  119. var asText = ResourceManager.LoadText(TilePath);
  120. _tileInfo = JsonSerializer.Deserialize<DungeonTileInfo>(asText);
  121. }
  122.  
  123. /// <summary>
  124. /// 重新加载房间预设数据
  125. /// </summary>
  126. public void ReloadPreinstall()
  127. {
  128. var asText = ResourceManager.LoadText(PreinstallPath);
  129. _preinstall = JsonSerializer.Deserialize<List<RoomPreinstall>>(asText);
  130. }
  131. }