-
- using System;
- using System.Collections.Generic;
- using System.IO;
- using Godot;
-
- public static class MapProjectManager
- {
- public class MapGroupInfo
- {
- /// <summary>
- /// 组名称
- /// </summary>
- public string Name;
- /// <summary>
- /// 组路径
- /// </summary>
- public string FullPath;
- /// <summary>
- /// 当前组所在的文件夹
- /// </summary>
- public string RootPath;
- }
-
- public class MapRoomInfo
- {
- /// <summary>
- /// 房间名称
- /// </summary>
- public string Name;
- /// <summary>
- /// 组名称
- /// </summary>
- public string Group;
- /// <summary>
- /// 房间类型
- /// </summary>
- public DungeonRoomType RoomType;
- /// <summary>
- /// 文件夹路径
- /// </summary>
- public string FullPath;
- /// <summary>
- /// 预览图片
- /// </summary>
- public string PrevImage;
- /// <summary>
- /// 当前组所在的文件夹
- /// </summary>
- public string RootPath;
- }
-
- /// <summary>
- /// 扫描路径
- /// </summary>
- public static readonly List<string> ScannerPaths = new List<string>();
- /// <summary>
- /// 组列表数据
- /// </summary>
- public static readonly Dictionary<string, MapGroupInfo> GroupData = new Dictionary<string, MapGroupInfo>();
-
- private static bool _init;
-
- public static void Init()
- {
- if (_init)
- {
- return;
- }
-
- _init = true;
- #if TOOLS
- ScannerPaths.Add(GameConfig.RoomTileDir);
- #endif
- }
-
- /// <summary>
- /// 刷新组数据
- /// </summary>
- public static void RefreshMapGroup()
- {
- GroupData.Clear();
- foreach (var path in ScannerPaths)
- {
- if (Directory.Exists(path))
- {
- var info = new DirectoryInfo(path);
- var directoryInfos = info.GetDirectories();
- foreach (var directoryInfo in directoryInfos)
- {
- var projectInfo = new MapGroupInfo();
- projectInfo.Name = directoryInfo.Name;
- projectInfo.FullPath = directoryInfo.FullName;
- projectInfo.RootPath = info.FullName;
- GroupData.TryAdd(projectInfo.FullPath, projectInfo);
- }
- }
- else
- {
- GD.PrintErr("刷新地图组时发现不存在的路径: " + path);
- }
- }
- }
-
- /// <summary>
- /// 根据路径加载房间
- /// </summary>
- public static MapRoomInfo[] LoadRoom(string rootPath, string groupName)
- {
- var path = rootPath + "\\" + groupName;
- if (!Directory.Exists(path))
- {
- GD.PrintErr("加载地牢房间时发现不存在的路径: " + path);
- return new MapRoomInfo[0];
- }
-
- var list = new List<MapRoomInfo>();
- var dir = new DirectoryInfo(path);
- var roomTypes = Enum.GetValues<DungeonRoomType>();
- foreach (var dungeonRoomType in roomTypes)
- {
- LoadRoomByType(list, dir, rootPath, groupName, dungeonRoomType);
- }
-
- return list.ToArray();
- }
-
- private static void LoadRoomByType(List<MapRoomInfo> list, DirectoryInfo dir, string rootPath, string groupName, DungeonRoomType roomType)
- {
- var typeName = DungeonManager.DungeonRoomTypeToString(roomType);
- var path = dir.FullName + "\\" + typeName;
- if (Directory.Exists(path))
- {
- var tempDir = new DirectoryInfo(path);
- var directoryInfos = tempDir.GetDirectories();
- foreach (var directoryInfo in directoryInfos)
- {
- if (directoryInfo.GetFiles().Length > 0)
- {
- var room = new MapRoomInfo();
- room.Name = directoryInfo.Name;
- room.FullPath = directoryInfo.FullName;
- room.RoomType = roomType;
- room.Group = groupName;
- room.RootPath = rootPath;
- list.Add(room);
- }
- }
- }
- }
- }