mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 12:14:17 +01:00
Only enable PathResolver if any character collections are set, fix mtrl staying in PathCollections.
This commit is contained in:
parent
1e5776a481
commit
9f6729dd0b
3 changed files with 46 additions and 4 deletions
|
|
@ -72,8 +72,12 @@ public unsafe partial class PathResolver
|
||||||
SeFileDescriptor* fileDescriptor, int priority, bool isSync, out byte ret )
|
SeFileDescriptor* fileDescriptor, int priority, bool isSync, out byte ret )
|
||||||
{
|
{
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if( fileDescriptor->ResourceHandle->FileType == ResourceType.Mtrl
|
if( fileDescriptor->ResourceHandle->FileType != ResourceType.Mtrl )
|
||||||
&& Penumbra.CollectionManager.ByName( split.ToString(), out var collection ) )
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( Penumbra.CollectionManager.ByName( split.ToString(), out var collection ) )
|
||||||
{
|
{
|
||||||
SetCollection( path, collection );
|
SetCollection( path, collection );
|
||||||
}
|
}
|
||||||
|
|
@ -90,7 +94,6 @@ public unsafe partial class PathResolver
|
||||||
if( nonDefault && type == ResourceType.Mtrl )
|
if( nonDefault && type == ResourceType.Mtrl )
|
||||||
{
|
{
|
||||||
var fullPath = new FullPath( $"|{collection.Name}|{path}" );
|
var fullPath = new FullPath( $"|{collection.Name}|{path}" );
|
||||||
SetCollection( fullPath.InternalName, collection );
|
|
||||||
data = ( fullPath, collection );
|
data = ( fullPath, collection );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ using FFXIVClientStructs.FFXIV.Client.System.Resource;
|
||||||
using Penumbra.GameData.ByteString;
|
using Penumbra.GameData.ByteString;
|
||||||
using Penumbra.GameData.Enums;
|
using Penumbra.GameData.Enums;
|
||||||
using Penumbra.Interop.Loader;
|
using Penumbra.Interop.Loader;
|
||||||
|
using Penumbra.Mods;
|
||||||
|
|
||||||
namespace Penumbra.Interop.Resolver;
|
namespace Penumbra.Interop.Resolver;
|
||||||
|
|
||||||
|
|
@ -15,6 +16,7 @@ namespace Penumbra.Interop.Resolver;
|
||||||
public partial class PathResolver : IDisposable
|
public partial class PathResolver : IDisposable
|
||||||
{
|
{
|
||||||
private readonly ResourceLoader _loader;
|
private readonly ResourceLoader _loader;
|
||||||
|
public bool Enabled { get; private set; }
|
||||||
|
|
||||||
public PathResolver( ResourceLoader loader )
|
public PathResolver( ResourceLoader loader )
|
||||||
{
|
{
|
||||||
|
|
@ -23,7 +25,7 @@ public partial class PathResolver : IDisposable
|
||||||
SetupHumanHooks();
|
SetupHumanHooks();
|
||||||
SetupWeaponHooks();
|
SetupWeaponHooks();
|
||||||
SetupMetaHooks();
|
SetupMetaHooks();
|
||||||
Enable();
|
Penumbra.CollectionManager.CollectionChanged += OnCollectionChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The modified resolver that handles game path resolving.
|
// The modified resolver that handles game path resolving.
|
||||||
|
|
@ -63,6 +65,12 @@ public partial class PathResolver : IDisposable
|
||||||
|
|
||||||
public void Enable()
|
public void Enable()
|
||||||
{
|
{
|
||||||
|
if( Enabled )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Enabled = true;
|
||||||
InitializeDrawObjects();
|
InitializeDrawObjects();
|
||||||
|
|
||||||
EnableHumanHooks();
|
EnableHumanHooks();
|
||||||
|
|
@ -76,12 +84,21 @@ public partial class PathResolver : IDisposable
|
||||||
|
|
||||||
public void Disable()
|
public void Disable()
|
||||||
{
|
{
|
||||||
|
if( !Enabled )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Enabled = false;
|
||||||
DisableHumanHooks();
|
DisableHumanHooks();
|
||||||
DisableWeaponHooks();
|
DisableWeaponHooks();
|
||||||
DisableMtrlHooks();
|
DisableMtrlHooks();
|
||||||
DisableDataHooks();
|
DisableDataHooks();
|
||||||
DisableMetaHooks();
|
DisableMetaHooks();
|
||||||
|
|
||||||
|
DrawObjectToObject.Clear();
|
||||||
|
PathCollections.Clear();
|
||||||
|
|
||||||
_loader.ResolvePathCustomization -= CharacterResolver;
|
_loader.ResolvePathCustomization -= CharacterResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,5 +110,23 @@ public partial class PathResolver : IDisposable
|
||||||
DisposeMtrlHooks();
|
DisposeMtrlHooks();
|
||||||
DisposeDataHooks();
|
DisposeDataHooks();
|
||||||
DisposeMetaHooks();
|
DisposeMetaHooks();
|
||||||
|
Penumbra.CollectionManager.CollectionChanged -= OnCollectionChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCollectionChange( ModCollection? _1, ModCollection? _2, CollectionType type, string? characterName )
|
||||||
|
{
|
||||||
|
if( type != CollectionType.Character )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( Penumbra.CollectionManager.CharacterCollection.Count > 0 )
|
||||||
|
{
|
||||||
|
Enable();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Disable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -109,6 +109,10 @@ public class Penumbra : IDalamudPlugin
|
||||||
{
|
{
|
||||||
ResourceLoader.EnableFullLogging();
|
ResourceLoader.EnableFullLogging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CollectionManager.CharacterCollection.Count > 0)
|
||||||
|
PathResolver.Enable();
|
||||||
|
|
||||||
ResidentResources.Reload();
|
ResidentResources.Reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue