Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / DungeonRoomSplit.cs
  1.  
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. using FileAccess = Godot.FileAccess;
  5.  
  6. /// <summary>
  7. /// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总
  8. /// </summary>
  9. public class DungeonRoomSplit
  10. {
  11. /// <summary>
  12. /// 房间场景路径
  13. /// </summary>
  14. [JsonInclude]
  15. public string ScenePath;
  16. /// <summary>
  17. /// 房间配置路径
  18. /// </summary>
  19. [JsonInclude]
  20. public string ConfigPath;
  21.  
  22. /// <summary>
  23. /// 房间配置数据, 第一次获取会要在资源中加载数据
  24. /// </summary>
  25. [JsonIgnore]
  26. public DungeonRoomInfo RoomInfo
  27. {
  28. get
  29. {
  30. if (_roomInfo == null)
  31. {
  32. var file = FileAccess.Open(ConfigPath, FileAccess.ModeFlags.Read);
  33. var asText = file.GetAsText();
  34. _roomInfo = JsonSerializer.Deserialize<DungeonRoomInfo>(asText);
  35. file.Dispose();
  36. //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
  37. var areaInfos = _roomInfo.DoorAreaInfos;
  38. if (areaInfos.Count == 0)
  39. {
  40. areaInfos.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  41. areaInfos.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, (_roomInfo.Size.X - 1) * GameConfig.TileCellSize));
  42. areaInfos.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  43. areaInfos.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, (_roomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  44. }
  45. }
  46.  
  47. return _roomInfo;
  48. }
  49. }
  50.  
  51. private DungeonRoomInfo _roomInfo;
  52. }