mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Uncouple the currently manipulated collection from the default collection.
This commit is contained in:
parent
2ff98f2338
commit
7a34bdabba
5 changed files with 72 additions and 8 deletions
|
|
@ -25,6 +25,7 @@ namespace Penumbra
|
|||
public string ModDirectory { get; set; } = @"D:/ffxiv/fs_mods/";
|
||||
|
||||
public string CurrentCollection { get; set; } = "Default";
|
||||
public string DefaultCollection { get; set; } = "Default";
|
||||
public string ForcedCollection { get; set; } = "";
|
||||
public Dictionary< string, string > CharacterCollections { get; set; } = new();
|
||||
public Dictionary< string, string > ModSortOrder { get; set; } = new();
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ namespace Penumbra.Interop
|
|||
|
||||
private void RestoreSettings()
|
||||
{
|
||||
_mods.Collections.ActiveCollection = _mods.Collections.CurrentCollection;
|
||||
_mods.Collections.ActiveCollection = _mods.Collections.DefaultCollection;
|
||||
_changedSettings = false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ namespace Penumbra
|
|||
|
||||
config.ModDirectory = config.CurrentCollection;
|
||||
config.CurrentCollection = "Default";
|
||||
config.DefaultCollection = "Default";
|
||||
config.Version = 1;
|
||||
ResettleCollectionJson( config );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ namespace Penumbra.Mods
|
|||
public Dictionary< string, ModCollection > Collections { get; } = new();
|
||||
|
||||
public ModCollection CurrentCollection { get; private set; } = null!;
|
||||
public ModCollection DefaultCollection { get; private set; } = null!;
|
||||
public ModCollection ForcedCollection { get; private set; } = ModCollection.Empty;
|
||||
public Dictionary< string, ModCollection > CharacterCollection { get; } = new();
|
||||
|
||||
|
|
@ -30,7 +31,7 @@ namespace Penumbra.Mods
|
|||
|
||||
ReadCollections();
|
||||
LoadConfigCollections( _plugin.Configuration );
|
||||
ActiveCollection = CurrentCollection;
|
||||
ActiveCollection = DefaultCollection;
|
||||
}
|
||||
|
||||
public void RecreateCaches()
|
||||
|
|
@ -77,7 +78,7 @@ namespace Penumbra.Mods
|
|||
|
||||
if( recomputeMeta )
|
||||
{
|
||||
Service<GameResourceManagement>.Get().ReloadPlayerResources();
|
||||
Service< GameResourceManagement >.Get().ReloadPlayerResources();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -117,6 +118,11 @@ namespace Penumbra.Mods
|
|||
SetForcedCollection( ModCollection.Empty );
|
||||
}
|
||||
|
||||
if( DefaultCollection == collection )
|
||||
{
|
||||
SetDefaultCollection( ModCollection.Empty );
|
||||
}
|
||||
|
||||
foreach( var kvp in CharacterCollection.ToArray() )
|
||||
{
|
||||
if( kvp.Value == collection )
|
||||
|
|
@ -170,10 +176,10 @@ namespace Penumbra.Mods
|
|||
public void SetCurrentCollection( ModCollection newCollection )
|
||||
=> SetCollection( newCollection, CurrentCollection, c =>
|
||||
{
|
||||
if( ActiveCollection == CurrentCollection )
|
||||
if( ActiveCollection == DefaultCollection )
|
||||
{
|
||||
ActiveCollection = c;
|
||||
var resourceManager = Service<GameResourceManagement>.Get();
|
||||
var resourceManager = Service< GameResourceManagement >.Get();
|
||||
resourceManager.ReloadPlayerResources();
|
||||
}
|
||||
|
||||
|
|
@ -183,6 +189,9 @@ namespace Penumbra.Mods
|
|||
public void SetForcedCollection( ModCollection newCollection )
|
||||
=> SetCollection( newCollection, ForcedCollection, c => ForcedCollection = c, s => _plugin.Configuration.ForcedCollection = s );
|
||||
|
||||
public void SetDefaultCollection( ModCollection newCollection )
|
||||
=> SetCollection( newCollection, DefaultCollection, c => DefaultCollection = c, s => _plugin.Configuration.DefaultCollection = s );
|
||||
|
||||
public void SetCharacterCollection( string characterName, ModCollection newCollection )
|
||||
=> SetCollection( newCollection,
|
||||
CharacterCollection.TryGetValue( characterName, out var oldCollection ) ? oldCollection : ModCollection.Empty,
|
||||
|
|
@ -253,6 +262,27 @@ namespace Penumbra.Mods
|
|||
return true;
|
||||
}
|
||||
|
||||
private bool LoadDefaultCollection( Configuration config )
|
||||
{
|
||||
if( config.DefaultCollection == string.Empty )
|
||||
{
|
||||
DefaultCollection = ModCollection.Empty;
|
||||
return false;
|
||||
}
|
||||
|
||||
if( Collections.TryGetValue( config.DefaultCollection, out var defaultCollection ) )
|
||||
{
|
||||
DefaultCollection = defaultCollection;
|
||||
AddCache( DefaultCollection );
|
||||
return false;
|
||||
}
|
||||
|
||||
PluginLog.Error( $"Last choice of DefaultCollection {config.DefaultCollection} is not available, reset to None." );
|
||||
DefaultCollection = ModCollection.Empty;
|
||||
config.DefaultCollection = string.Empty;
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool LoadCharacterCollections( Configuration config )
|
||||
{
|
||||
var configChanged = false;
|
||||
|
|
@ -283,6 +313,7 @@ namespace Penumbra.Mods
|
|||
private void LoadConfigCollections( Configuration config )
|
||||
{
|
||||
var configChanged = LoadCurrentCollection( config );
|
||||
configChanged |= LoadDefaultCollection( config );
|
||||
configChanged |= LoadForcedCollection( config );
|
||||
configChanged |= LoadCharacterCollections( config );
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ namespace Penumbra.UI
|
|||
private ModCollection[] _collections = null!;
|
||||
private int _currentCollectionIndex = 0;
|
||||
private int _currentForcedIndex = 0;
|
||||
private int _currentDefaultIndex = 0;
|
||||
private readonly Dictionary< string, int > _currentCharacterIndices = new();
|
||||
private string _newCollectionName = string.Empty;
|
||||
private string _newCharacterName = string.Empty;
|
||||
|
|
@ -54,6 +55,9 @@ namespace Penumbra.UI
|
|||
private void UpdateForcedIndex()
|
||||
=> _currentForcedIndex = GetIndex( _manager.Collections.ForcedCollection );
|
||||
|
||||
private void UpdateDefaultIndex()
|
||||
=> _currentDefaultIndex = GetIndex( _manager.Collections.DefaultCollection );
|
||||
|
||||
private void UpdateCharacterIndices()
|
||||
{
|
||||
_currentCharacterIndices.Clear();
|
||||
|
|
@ -66,6 +70,7 @@ namespace Penumbra.UI
|
|||
private void UpdateIndices()
|
||||
{
|
||||
UpdateIndex();
|
||||
UpdateDefaultIndex();
|
||||
UpdateForcedIndex();
|
||||
UpdateCharacterIndices();
|
||||
}
|
||||
|
|
@ -130,12 +135,14 @@ namespace Penumbra.UI
|
|||
private void DrawCurrentCollectionSelector()
|
||||
{
|
||||
var index = _currentCollectionIndex;
|
||||
if( !ImGui.Combo( "Current Collection", ref index, _collectionNames ) )
|
||||
var combo = ImGui.Combo( "Current Collection", ref index, _collectionNames );
|
||||
if( ImGui.IsItemHovered() )
|
||||
{
|
||||
return;
|
||||
ImGui.SetTooltip(
|
||||
"This collection will be modified when using the Installed Mods tab and making changes. It does not apply to anything by itself." );
|
||||
}
|
||||
|
||||
if( index != _currentCollectionIndex )
|
||||
if( combo && index != _currentCollectionIndex )
|
||||
{
|
||||
_manager.Collections.SetCurrentCollection( _collections[ index + 1 ] );
|
||||
_currentCollectionIndex = index;
|
||||
|
|
@ -143,6 +150,28 @@ namespace Penumbra.UI
|
|||
}
|
||||
}
|
||||
|
||||
private void DrawDefaultCollectionSelector()
|
||||
{
|
||||
var index = _currentDefaultIndex;
|
||||
if( ImGui.Combo( "##Default Collection", ref index, _collectionNamesWithNone ) && index != _currentDefaultIndex )
|
||||
{
|
||||
_manager.Collections.SetDefaultCollection( _collections[ index ] );
|
||||
_currentDefaultIndex = index;
|
||||
}
|
||||
|
||||
if( ImGui.IsItemHovered() )
|
||||
{
|
||||
ImGui.SetTooltip(
|
||||
"Mods in the default collection are loaded for any character that is not explicitly named in the character collections below.\n"
|
||||
+ "They also take precedence before the forced collection." );
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
ImGui.Dummy( new Vector2( 24, 0 ) );
|
||||
ImGui.SameLine();
|
||||
ImGui.Text( "Default Collection" );
|
||||
}
|
||||
|
||||
private void DrawForcedCollectionSelector()
|
||||
{
|
||||
var index = _currentForcedIndex;
|
||||
|
|
@ -181,6 +210,7 @@ namespace Penumbra.UI
|
|||
{
|
||||
_manager.Collections.CreateCharacterCollection( _newCharacterName );
|
||||
_currentCharacterIndices[ _newCharacterName ] = 0;
|
||||
_newCharacterName = string.Empty;
|
||||
}
|
||||
|
||||
if( changedStyle )
|
||||
|
|
@ -197,6 +227,7 @@ namespace Penumbra.UI
|
|||
return;
|
||||
}
|
||||
|
||||
DrawDefaultCollectionSelector();
|
||||
DrawForcedCollectionSelector();
|
||||
|
||||
foreach( var name in _manager.Collections.CharacterCollection.Keys.ToArray() )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue