public IModelDirectory <GloModelFileBundle>?GatherModelFileBundles( bool assert) { var gloverSteamDirectory = SteamUtils.GetGameDirectory("Glover", assert); if (gloverSteamDirectory == null) { return(null); } var rootModelDirectory = new ModelDirectory <GloModelFileBundle>("glover"); var parentObjectDirectory = rootModelDirectory.AddSubdir("data") .AddSubdir("objects"); var gloverFileHierarchy = new FileHierarchy(gloverSteamDirectory); var topLevelObjectDirectory = gloverFileHierarchy.Root.TryToGetSubdir("data/objects"); foreach (var objectDirectory in topLevelObjectDirectory.Subdirs) { this.AddObjectDirectory( parentObjectDirectory.AddSubdir(objectDirectory.Name), gloverFileHierarchy, objectDirectory); } return(rootModelDirectory); }
public IModelDirectory <IHaloWarsModelFileBundle>?GatherModelFileBundles( bool assert) { var haloWarsSteamDirectory = SteamUtils.GetGameDirectory("HaloWarsDE", assert); if (haloWarsSteamDirectory == null) { return(null); } var scratchDirectory = DirectoryConstants.ROMS_DIRECTORY .GetSubdir("halo_wars", true); var context = new HWContext(haloWarsSteamDirectory.FullName, scratchDirectory.FullName); // Expand all compressed/encrypted game files. This also handles the .xmb -> .xml conversion context.ExpandAllEraFiles(); var fileHierarchy = new FileHierarchy(scratchDirectory); var rootNode = new ModelDirectory <IHaloWarsModelFileBundle>("halo_wars"); var mapDirectories = fileHierarchy.Root .TryToGetSubdir("scenario/skirmish/design") .Subdirs; foreach (var srcMapDirectory in mapDirectories) { var xtdFile = srcMapDirectory.FilesWithExtension(".xtd").Single(); var xttFile = srcMapDirectory.FilesWithExtension(".xtt").Single(); rootNode.AddFileBundleRelative( new XtdModelFileBundle(xtdFile, xttFile, context)); } var artDirectory = fileHierarchy.Root.TryToGetSubdir("art"); var artSubdirQueue = new FinQueue <IFileHierarchyDirectory>(artDirectory); // TODO: Switch to DFS instead, it's more intuitive as a user while (artSubdirQueue.TryDequeue(out var artSubdir)) { // TODO: Skip a file if it's already been extracted // TODO: Parse UGX files instead, as long as they specify their own animations var visFiles = artSubdir.FilesWithExtension(".vis"); foreach (var visFile in visFiles) { rootNode.AddFileBundleRelative(new VisModelFileBundle(visFile, context)); } artSubdirQueue.Enqueue(artSubdir.Subdirs); } return(rootNode); }
private static string GetSaveFilePath(SteamUtils steamUtils) { var steamUsers = steamUtils.GetSteamUsersWithGame(Pd2SteamId).ToList(); if (!steamUsers.Any()) { throw new Exception("Ich finde bei Steam keinen Benutzer der PD2 installiert hat."); } var steamUser = steamUsers.Count() == 1 ? steamUsers.First() : PromptForSteamUser(steamUsers); var payday2SavePath = Path.Combine(steamUtils.GetGameDirectory(steamUser, Pd2SteamId), "remote"); var currentSaveFile = GetLatestSaveFile(Directory.GetFiles(payday2SavePath, "save*.sav")); return(currentSaveFile); }