Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / MapProjectManager.cs
@小李xl 小李xl on 23 Jul 2023 5 KB 完成搜索房间
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text.Json;
  6. using Godot;
  7.  
  8. public static class MapProjectManager
  9. {
  10. /// <summary>
  11. /// 扫描路径
  12. /// </summary>
  13. public static string CustomMapPath { get; private set; }
  14.  
  15. /// <summary>
  16. /// 地牢组数据, key: 组名称
  17. /// </summary>
  18. public static Dictionary<string, DungeonRoomGroup> GroupMap { get; private set; }
  19.  
  20. private static bool _init;
  21. public static void Init()
  22. {
  23. if (_init)
  24. {
  25. return;
  26. }
  27.  
  28. _init = true;
  29. #if TOOLS
  30. CustomMapPath = GameConfig.RoomTileDir;
  31. #endif
  32. }
  33.  
  34. /// <summary>
  35. /// 刷新组数据
  36. /// </summary>
  37. public static void RefreshMapGroup()
  38. {
  39. var configFile = CustomMapPath + "/" + GameConfig.RoomGroupConfigFile;
  40. if (File.Exists(configFile))
  41. {
  42. var configText = File.ReadAllText(configFile);
  43. GroupMap = JsonSerializer.Deserialize<Dictionary<string, DungeonRoomGroup>>(configText);
  44. foreach (var item in GroupMap)
  45. {
  46. var config = item.Value;
  47. foreach (var roomSplit in config.BattleList)
  48. {
  49. _ = roomSplit.RoomInfo;
  50. }
  51.  
  52. foreach (var roomSplit in config.BossList)
  53. {
  54. _ = roomSplit.RoomInfo;
  55. }
  56.  
  57. foreach (var roomSplit in config.InletList)
  58. {
  59. _ = roomSplit.RoomInfo;
  60. }
  61.  
  62. foreach (var roomSplit in config.OutletList)
  63. {
  64. _ = roomSplit.RoomInfo;
  65. }
  66.  
  67. foreach (var roomSplit in config.EventList)
  68. {
  69. _ = roomSplit.RoomInfo;
  70. }
  71.  
  72. foreach (var roomSplit in config.RewardList)
  73. {
  74. _ = roomSplit.RoomInfo;
  75. }
  76.  
  77. foreach (var roomSplit in config.ShopList)
  78. {
  79. _ = roomSplit.RoomInfo;
  80. }
  81. }
  82. }
  83. else
  84. {
  85. GD.Print("刷新地图组时未找到配置文件: " + configFile + ", 执行创建文件");
  86. GroupMap = new Dictionary<string, DungeonRoomGroup>();
  87. File.WriteAllText(configFile, "{}");
  88. }
  89. }
  90. /// <summary>
  91. /// 获取地牢房间配置文件加载路径
  92. /// </summary>
  93. /// <param name="groupName">组名</param>
  94. /// <param name="roomType">房间类型</param>
  95. /// <param name="roomName">房间名称</param>
  96. public static string GetConfigPath(string groupName, DungeonRoomType roomType, string roomName)
  97. {
  98. return CustomMapPath + groupName + "/" + DungeonManager.DungeonRoomTypeToString(roomType) + "/" + roomName;
  99. }
  100.  
  101. /// <summary>
  102. /// 获取房间地块配置文件名称
  103. /// </summary>
  104. public static string GetTileInfoConfigName(string roomName)
  105. {
  106. return roomName + "_tileInfo.json";
  107. }
  108. /// <summary>
  109. /// 获取房间基础配置文件名称
  110. /// </summary>
  111. public static string GetRoomInfoConfigName(string roomName)
  112. {
  113. return roomName + "_roomInfo.json";
  114. }
  115.  
  116. /// <summary>
  117. /// 创建地牢组
  118. /// </summary>
  119. public static void CreateGroup(DungeonRoomGroup group)
  120. {
  121. if (GroupMap.ContainsKey(group.GroupName))
  122. {
  123. GD.PrintErr($"已经存在相同的地牢组: {group.GroupName}");
  124. return;
  125. }
  126. var configFile = CustomMapPath + "/" + GameConfig.RoomGroupConfigFile;
  127. GroupMap.Add(group.GroupName, group);
  128. //将组数据保存为json
  129. var options = new JsonSerializerOptions();
  130. options.WriteIndented = true;
  131. var jsonText = JsonSerializer.Serialize(GroupMap, options);
  132. File.WriteAllText(configFile, jsonText);
  133. //创建完成事件
  134. EventManager.EmitEvent(EventEnum.OnCreateGroupFinish, group);
  135. }
  136.  
  137. /// <summary>
  138. /// 创建地牢房间
  139. /// </summary>
  140. public static void CreateRoom(DungeonRoomSplit roomSplit)
  141. {
  142. var groupName = roomSplit.RoomInfo.GroupName;
  143. if (GroupMap.TryGetValue(groupName, out var group))
  144. {
  145. var configFile = CustomMapPath + "/" + GameConfig.RoomGroupConfigFile;
  146. var roomList = group.GetRoomList(roomSplit.RoomInfo.RoomType);
  147. roomList.Add(roomSplit);
  148.  
  149. var configPath = GetConfigPath(roomSplit.RoomInfo.GroupName, roomSplit.RoomInfo.RoomType, roomSplit.RoomInfo.RoomName);
  150. if (!Directory.Exists(configPath))
  151. {
  152. Directory.CreateDirectory(configPath);
  153. }
  154.  
  155. //将组数据保存为json
  156. var options = new JsonSerializerOptions();
  157. options.WriteIndented = true;
  158. var jsonText = JsonSerializer.Serialize(GroupMap, options);
  159. File.WriteAllText(configFile, jsonText);
  160. //将房间数据保存为json
  161. var jsonText2 = JsonSerializer.Serialize(roomSplit.RoomInfo);
  162. File.WriteAllText(roomSplit.RoomPath, jsonText2);
  163. //将房间地块保存为json
  164. var jsonText3 = JsonSerializer.Serialize(roomSplit.TileInfo);
  165. File.WriteAllText(roomSplit.TilePath, jsonText3);
  166. //创建完成事件
  167. EventManager.EmitEvent(EventEnum.OnCreateRoomFinish, roomSplit);
  168. }
  169. else
  170. {
  171. GD.PrintErr($"未找到地牢组: {groupName}");
  172. }
  173. }
  174. }