public override async Task Initialize() { ResetSelected.Enabled = false; IoC.Notif.ShowUnknownProgress(); IoC.Notif.ShowStatus("Loading outfit list..."); DefaultOutfits = (await OutfitGen.GenerateOutfits( IoC.Archiver.LoadGameFileAsync)).ToHashSet(); //some outfits, like undergarments, are never used in game by the player and only create problems if switched var ignored = IoC.Get <OutfitConfig>().IgnoredOutfits.ToHashSet(); Outfits = DefaultOutfits .Where(x => !ignored.Contains(x.Name)) .Select(x => x.Clone()).OrderBy(x => x.DisplayName) .ToList().AsReadOnly(); PopulateOutfitsList(); await UpdateModelList(); UpdateAllOutfitsSelection(); //start loading characters in background Async.Run(() => CharacterGen.GetCharacterModels(true)).Forget(); }
public override void ApplyChanges(Patch patch) { var models = OutfitGen.GenerateModelList(IoC.Archiver.LoadGameFile); models.AddRange(CharacterGen.GetCharacterModels(true)); Patcher.CreatePatch(patch, DefaultOutfits.ToList(), Outfits, models); }
private IEnumerable <Model> LoadOutfitModelList() { IoC.Notif.ShowStatus("Loading models list..."); var models = OutfitGen.GenerateModelList(IoC.Archiver.LoadGameFile); //sort models to match outfits var outfitSorting = Outfits.Select((x, i) => (x, i)).ToSoftDictionary(x => x.x.ModelId, x => x.i); return(models.OrderBy(x => outfitSorting.TryGetValue(x.Id, out var sort) ? sort : int.MaxValue)); }
public override async Task LoadPatch(string path) { IoC.Notif.ShowStatus("Loading outfits..."); var patchOutfits = await OutfitGen.GenerateOutfits(f => IoC.Archiver.LoadFileAsync(path, f)); if (!patchOutfits.Any()) { return; } await Initialize(); var loadedOutfits = patchOutfits.ToHashSet(); var variantMapping = await CharacterGen.GetVariantMapping(path, OutfitGen); LoadOutfits(loadedOutfits, variantMapping); RefreshOutfitList(); }