private static PortraitData MergePacks() { var packDir = new DirectoryInfo("packs/"); var options = PortraitBuilder.ContentPacks.JsonHelper.GetDefaultOptions(); var packContents = packDir.EnumerateFiles("*.json", SearchOption.AllDirectories) .Where(fi => fi.DirectoryName != packDir.FullName.TrimEnd(Path.DirectorySeparatorChar)) .Select(fi => fi.FullName) .Select(File.ReadAllText) .Select(json => JsonSerializer.Deserialize <Content>(json, options)); var loader = new PackLoader(); foreach (var pack in packContents) { Console.WriteLine("Loaded pack {0}", pack.Name); loader.ActiveContent.Add(pack); } loader.LoadPortraits(); loader.InvalidateCache(); var activeContent = loader.ActiveContent; foreach (var kvp in loader.ActivePortraitData.Sprites) { var def = kvp.Value; string originalPath = null; DirectoryInfo dir = null; for (int i = activeContent.Count - 1; i >= 0; i--) { var content = activeContent[i]; originalPath = Path.Combine(content.AbsolutePath, def.Name).Replace('\\', '/'); dir = new DirectoryInfo(originalPath); if (dir.Exists && dir.EnumerateFiles().Any()) { break; } } if (dir == null || !dir.Exists) { Console.Error.WriteLine("Unable to find sprite: {0} with {1} active content packs", def.Name, activeContent.Count); def.TextureFilePath = null; continue; } Debug.Assert(originalPath != null); Console.WriteLine("Resolved pack sprite {0} from: {1}", kvp.Key, originalPath); def.TextureFilePath = originalPath; } foreach (var badKey in loader.ActivePortraitData.Sprites.Where(kvp => kvp.Value.TextureFilePath == null).Select(kvp => kvp.Key)) { loader.ActivePortraitData.Sprites.Remove(badKey); Console.WriteLine("Removed missing sprite {0}", badKey); } return(loader.ActivePortraitData); }
protected override void Init() { packs = PackLoader.GetPackList(); pack = LoadPackByIndex(0); }