Change active collection setting.

This commit is contained in:
Ottermandias 2021-09-01 21:57:06 +02:00
parent 940f1fbb3d
commit 52108d6198
2 changed files with 27 additions and 6 deletions

View file

@ -61,13 +61,13 @@ namespace Penumbra.Interop
if( _currentObjectName != null && _mods.Collections.CharacterCollection.TryGetValue( _currentObjectName, out var collection ) ) if( _currentObjectName != null && _mods.Collections.CharacterCollection.TryGetValue( _currentObjectName, out var collection ) )
{ {
_changedSettings = true; _changedSettings = true;
_mods.Collections.ActiveCollection = collection; _mods.Collections.SetActiveCollection( collection, _currentObjectName );
} }
} }
private void RestoreSettings() private void RestoreSettings()
{ {
_mods.Collections.ActiveCollection = _mods.Collections.DefaultCollection; _mods.Collections.ResetActiveCollection();
_changedSettings = false; _changedSettings = false;
} }

View file

@ -14,6 +14,7 @@ namespace Penumbra.Mods
{ {
private readonly ModManager _manager; private readonly ModManager _manager;
public string CollectionChangedTo { get; private set; }= string.Empty;
public Dictionary< string, ModCollection > Collections { get; } = new(); public Dictionary< string, ModCollection > Collections { get; } = new();
public ModCollection CurrentCollection { get; private set; } = null!; public ModCollection CurrentCollection { get; private set; } = null!;
@ -21,7 +22,7 @@ namespace Penumbra.Mods
public ModCollection ForcedCollection { get; private set; } = ModCollection.Empty; public ModCollection ForcedCollection { get; private set; } = ModCollection.Empty;
public Dictionary< string, ModCollection > CharacterCollection { get; } = new(); public Dictionary< string, ModCollection > CharacterCollection { get; } = new();
public ModCollection ActiveCollection { get; set; } public ModCollection ActiveCollection { get; private set; }
public CollectionManager( ModManager manager ) public CollectionManager( ModManager manager )
{ {
@ -32,6 +33,27 @@ namespace Penumbra.Mods
ActiveCollection = DefaultCollection; ActiveCollection = DefaultCollection;
} }
public bool SetActiveCollection( ModCollection newActive, string name )
{
CollectionChangedTo = name;
if( newActive == ActiveCollection )
{
return false;
}
if( ActiveCollection.Cache?.MetaManipulations.Count > 0 || newActive.Cache?.MetaManipulations.Count > 0 )
{
var resourceManager = Service<ResidentResources>.Get();
resourceManager.ReloadPlayerResources();
}
ActiveCollection = newActive;
return true;
}
public bool ResetActiveCollection()
=> SetActiveCollection( DefaultCollection, string.Empty );
public void RecreateCaches() public void RecreateCaches()
{ {
if( !_manager.TempWritable ) if( !_manager.TempWritable )
@ -183,7 +205,7 @@ namespace Penumbra.Mods
public void SetDefaultCollection( ModCollection newCollection ) public void SetDefaultCollection( ModCollection newCollection )
=> SetCollection( newCollection, DefaultCollection, c => => SetCollection( newCollection, DefaultCollection, c =>
{ {
if( ActiveCollection == DefaultCollection ) if( !CollectionChangedTo.Any() )
{ {
ActiveCollection = c; ActiveCollection = c;
var resourceManager = Service< ResidentResources >.Get(); var resourceManager = Service< ResidentResources >.Get();
@ -204,8 +226,7 @@ namespace Penumbra.Mods
CharacterCollection.TryGetValue( characterName, out var oldCollection ) ? oldCollection : ModCollection.Empty, CharacterCollection.TryGetValue( characterName, out var oldCollection ) ? oldCollection : ModCollection.Empty,
c => c =>
{ {
if( CharacterCollection.TryGetValue( characterName, out var collection ) if( CollectionChangedTo == characterName && CharacterCollection.TryGetValue( characterName, out var collection ) )
&& ActiveCollection == collection )
{ {
ActiveCollection = c; ActiveCollection = c;
var resourceManager = Service< ResidentResources >.Get(); var resourceManager = Service< ResidentResources >.Get();