/// <summary> /// 取映射的类型。 /// </summary> /// <param name="MapKey">映射键。</param> /// <param name="InterfaceName">接口名</param> /// <returns></returns> public static TypeMap GetTypeMap(string MapKey) { RegisterTypeMap(); TypeMap typeMap = null; var MapQuery = MapList.Where(ww => ww.MapConfigKey != null && ww.MapConfigKey == MapKey); typeMap = MapQuery.FirstOrDefault(); return(typeMap); }
public Game(DirectoryInfo gameDir) { MountPath = gameDir; LoadMapList(); LoadMapCycle(); foreach (var map in gameDir.Combine("maps").GetFiles("*.*").Where(s => s.Extension == ".bsp" || s.Extension == ".vmf")) { var _map = new Map(map); // if (!_map.Background) _map.Order = MapList.FindIndex(a => a == _map.Name) + 1; // else _map.Hidden = true; Maps.Add(_map); } foreach (var map in MapList.Where(m => !Map.isBackground(m)).ToList()) { var _map = Maps.Where(m => m.Name == map).FirstOrDefault(); if (_map is null) { Maps.Add(new Map(map)); } } foreach (var map in MapCycle) { var _map = Maps.Where(m => m.Name == map).FirstOrDefault(); if (_map is null) { Maps.Add(new Map(map)); } } GameInfoPath = gameDir.CombineFile("gameinfo.txt"); if (!GameInfoPath.Exists) { throw new System.Exception("Could not find gameinfo.txt"); } try { var text = File.ReadAllText(GameInfoPath.FullName); var gameInfo = VdfConvert.Deserialize(text); var json = gameInfo.ToJson(new VdfJsonConversionSettings() { ObjectDuplicateKeyHandling = DuplicateKeyHandling.Ignore, ValueDuplicateKeyHandling = DuplicateKeyHandling.Ignore }); var hi = new JObject(json); Logger.Warn(hi.ToString()); GameInfo = hi.ToObject <GameInfoWrapper>().GameInfo; Logger.Warn(GameInfo.ToString()); Name = GameInfo.Game ?? Name; if (Name.IsNullOrWhiteSpace()) { Name = GameInfo.Name ?? Name; } if (Name.IsNullOrWhiteSpace()) { Name = GameInfo.Title ?? Name; } if (Name.IsNullOrWhiteSpace()) { Name = GameInfo.Title2 ?? Name; } Icon = GameInfo.Icon ?? Icon; Developer = GameInfo.Developer ?? null; Homepage = GameInfo.Homepage ?? null; if (Homepage.IsNullOrWhiteSpace()) { Homepage = GameInfo.DeveloperUrl ?? null; } if (GameInfo.Type.ToLower() == "singleplayer_only") { Type = GameType.SINGLEPLAYER_ONLY; } else if (GameInfo.Type.ToLower() == "multiplayer_only") { Type = GameType.MULTIPLAYER_ONLY; } SupportsVR = GameInfo.SupportsVR == 1; if (GameInfo.Hidden_maps != null) { foreach (var map in Maps) { map.Hidden = GameInfo.Hidden_maps.ContainsKey(map.Name); // if (map.Hidden) map.Order = -1; } } } catch (UnauthorizedAccessException ex) { Logger.Error(ex.ToString()); Name = gameDir.Name; } if (MapList.Count > 0) { var maplist_nobg = MapList.Where(m => !Map.isBackground(m)).ToList(); foreach (var map in Maps) { if (!map.Hidden && maplist_nobg.Contains(map.Name)) { map.Order = maplist_nobg.IndexOf(map.Name) + 1; } } } else { foreach (var(chapter, i) in gameDir.Combine("cfg").GetFiles("chapter*.cfg").WithIndex()) { // ?? int.Parse(chapter.Name.GetDigits()); var map = chapter.ReadAllLines()[0].Split(" ").Last(); var hasMap = Maps.Where(m => m.Name == map).FirstOrDefault(); if (hasMap is null) { Maps.Add(new Map(map) { Order = i + 1 }); } else { hasMap.Order = i + 1; } } } // Maps.Sort((x, y) => x.Name.CompareTo(y.Name)); // Maps.Reverse(); /*if (MapList.Count > 0)*/ // Maps.Sort((x, y) => x.Order.CompareTo(y.Order)); }