mirror of
https://github.com/xivdev/Penumbra.git
synced 2026-01-03 14:23:43 +01:00
Let Eqdp change all files in the racial tree instead of just the own race code.
This commit is contained in:
parent
358064cd5f
commit
257c0d390b
3 changed files with 76 additions and 18 deletions
2
OtterGui
2
OtterGui
|
|
@ -1 +1 @@
|
||||||
Subproject commit 28c4d8564296484b3d0fc0d2ea275cded8b1daa2
|
Subproject commit 98064e790042c90c82a58fbfa79201bd69800758
|
||||||
|
|
@ -1,9 +1,13 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Dalamud.Hooking;
|
using Dalamud.Hooking;
|
||||||
using Dalamud.Utility.Signatures;
|
using Dalamud.Utility.Signatures;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
||||||
|
using OtterGui.Classes;
|
||||||
|
using Penumbra.Collections;
|
||||||
using Penumbra.GameData.Enums;
|
using Penumbra.GameData.Enums;
|
||||||
using ObjectType = FFXIVClientStructs.FFXIV.Client.Graphics.Scene.ObjectType;
|
using ObjectType = FFXIVClientStructs.FFXIV.Client.Graphics.Scene.ObjectType;
|
||||||
|
using static Penumbra.GameData.Enums.GenderRace;
|
||||||
|
|
||||||
namespace Penumbra.Interop.Resolver;
|
namespace Penumbra.Interop.Resolver;
|
||||||
|
|
||||||
|
|
@ -77,10 +81,8 @@ public unsafe partial class PathResolver
|
||||||
var collection = GetResolveData( drawObject );
|
var collection = GetResolveData( drawObject );
|
||||||
if( collection.Valid )
|
if( collection.Valid )
|
||||||
{
|
{
|
||||||
var race = GetDrawObjectGenderRace( drawObject );
|
|
||||||
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
||||||
using var eqdp1 = collection.ModCollection.TemporarilySetEqdpFile( race, false );
|
using var eqdp = ResolveEqdpData( collection.ModCollection, GetDrawObjectGenderRace( drawObject ), true, true );
|
||||||
using var eqdp2 = collection.ModCollection.TemporarilySetEqdpFile( race, true );
|
|
||||||
_onModelLoadCompleteHook.Original.Invoke( drawObject );
|
_onModelLoadCompleteHook.Original.Invoke( drawObject );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -106,10 +108,8 @@ public unsafe partial class PathResolver
|
||||||
var collection = GetResolveData( drawObject );
|
var collection = GetResolveData( drawObject );
|
||||||
if( collection.Valid )
|
if( collection.Valid )
|
||||||
{
|
{
|
||||||
var race = GetDrawObjectGenderRace( drawObject );
|
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
||||||
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
using var eqdp = ResolveEqdpData( collection.ModCollection, GetDrawObjectGenderRace( drawObject ), true, true );
|
||||||
using var eqdp1 = collection.ModCollection.TemporarilySetEqdpFile( race, false );
|
|
||||||
using var eqdp2 = collection.ModCollection.TemporarilySetEqdpFile( race, true );
|
|
||||||
_updateModelsHook.Original.Invoke( drawObject );
|
_updateModelsHook.Original.Invoke( drawObject );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -130,7 +130,7 @@ public unsafe partial class PathResolver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return GenderRace.Unknown;
|
return Unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GenderRace GetHumanGenderRace( IntPtr human )
|
public static GenderRace GetHumanGenderRace( IntPtr human )
|
||||||
|
|
@ -203,5 +203,69 @@ public unsafe partial class PathResolver
|
||||||
using var eqp = resolveData.Valid ? resolveData.ModCollection.TemporarilySetEqpFile() : null;
|
using var eqp = resolveData.Valid ? resolveData.ModCollection.TemporarilySetEqpFile() : null;
|
||||||
return _changeCustomize.Original( human, data, skipEquipment );
|
return _changeCustomize.Original( human, data, skipEquipment );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DisposableContainer ResolveEqdpData( ModCollection collection, GenderRace race, bool equipment, bool accessory )
|
||||||
|
{
|
||||||
|
DisposableContainer Convert( params GenderRace[] races )
|
||||||
|
{
|
||||||
|
var equipmentEnumerable =
|
||||||
|
equipment
|
||||||
|
? races.Select( r => collection.TemporarilySetEqdpFile( r, false ) )
|
||||||
|
: Array.Empty<IDisposable?>().AsEnumerable();
|
||||||
|
var accessoryEnumerable =
|
||||||
|
accessory
|
||||||
|
? races.Select( r => collection.TemporarilySetEqdpFile( r, true ) )
|
||||||
|
: Array.Empty<IDisposable?>().AsEnumerable();
|
||||||
|
return new DisposableContainer( equipmentEnumerable.Concat( accessoryEnumerable ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return race switch
|
||||||
|
{
|
||||||
|
MidlanderMale => Convert( MidlanderMale ),
|
||||||
|
HighlanderMale => Convert( MidlanderMale, HighlanderMale ),
|
||||||
|
ElezenMale => Convert( MidlanderMale, ElezenMale ),
|
||||||
|
MiqoteMale => Convert( MidlanderMale, MiqoteMale ),
|
||||||
|
RoegadynMale => Convert( MidlanderMale, RoegadynMale ),
|
||||||
|
LalafellMale => Convert( MidlanderMale, LalafellMale ),
|
||||||
|
AuRaMale => Convert( MidlanderMale, AuRaMale ),
|
||||||
|
HrothgarMale => Convert( MidlanderMale, RoegadynMale, HrothgarMale ),
|
||||||
|
VieraMale => Convert( MidlanderMale, VieraMale ),
|
||||||
|
|
||||||
|
MidlanderFemale => Convert( MidlanderMale, MidlanderFemale ),
|
||||||
|
HighlanderFemale => Convert( MidlanderMale, MidlanderFemale, HighlanderFemale ),
|
||||||
|
ElezenFemale => Convert( MidlanderMale, MidlanderFemale, ElezenFemale ),
|
||||||
|
MiqoteFemale => Convert( MidlanderMale, MidlanderFemale, MiqoteFemale ),
|
||||||
|
RoegadynFemale => Convert( MidlanderMale, MidlanderFemale, RoegadynFemale ),
|
||||||
|
LalafellFemale => Convert( MidlanderMale, LalafellMale, LalafellFemale ),
|
||||||
|
AuRaFemale => Convert( MidlanderMale, MidlanderFemale, AuRaFemale ),
|
||||||
|
HrothgarFemale => Convert( MidlanderMale, MidlanderFemale, RoegadynFemale, HrothgarFemale ),
|
||||||
|
VieraFemale => Convert( MidlanderMale, MidlanderFemale, VieraFemale ),
|
||||||
|
|
||||||
|
MidlanderMaleNpc => Convert( MidlanderMale, MidlanderMaleNpc ),
|
||||||
|
HighlanderMaleNpc => Convert( MidlanderMale, HighlanderMale, HighlanderMaleNpc ),
|
||||||
|
ElezenMaleNpc => Convert( MidlanderMale, ElezenMale, ElezenMaleNpc ),
|
||||||
|
MiqoteMaleNpc => Convert( MidlanderMale, MiqoteMale, MiqoteMaleNpc ),
|
||||||
|
RoegadynMaleNpc => Convert( MidlanderMale, RoegadynMale, RoegadynMaleNpc ),
|
||||||
|
LalafellMaleNpc => Convert( MidlanderMale, LalafellMale, LalafellMaleNpc ),
|
||||||
|
AuRaMaleNpc => Convert( MidlanderMale, AuRaMale, AuRaMaleNpc ),
|
||||||
|
HrothgarMaleNpc => Convert( MidlanderMale, RoegadynMale, HrothgarMale, HrothgarMaleNpc ),
|
||||||
|
VieraMaleNpc => Convert( MidlanderMale, VieraMale, VieraMaleNpc ),
|
||||||
|
|
||||||
|
MidlanderFemaleNpc => Convert( MidlanderMale, MidlanderFemale, MidlanderFemaleNpc ),
|
||||||
|
HighlanderFemaleNpc => Convert( MidlanderMale, MidlanderFemale, HighlanderFemale, HighlanderFemaleNpc ),
|
||||||
|
ElezenFemaleNpc => Convert( MidlanderMale, MidlanderFemale, ElezenFemale, ElezenFemaleNpc ),
|
||||||
|
MiqoteFemaleNpc => Convert( MidlanderMale, MidlanderFemale, MiqoteFemale, MiqoteFemaleNpc ),
|
||||||
|
RoegadynFemaleNpc => Convert( MidlanderMale, MidlanderFemale, RoegadynFemale, RoegadynFemaleNpc ),
|
||||||
|
LalafellFemaleNpc => Convert( MidlanderMale, LalafellMale, LalafellFemale, LalafellFemaleNpc ),
|
||||||
|
AuRaFemaleNpc => Convert( MidlanderMale, MidlanderFemale, AuRaFemale, AuRaFemaleNpc ),
|
||||||
|
HrothgarFemaleNpc => Convert( MidlanderMale, MidlanderFemale, RoegadynFemale, HrothgarFemale, HrothgarFemaleNpc ),
|
||||||
|
VieraFemaleNpc => Convert( MidlanderMale, MidlanderFemale, VieraFemale, VieraFemaleNpc ),
|
||||||
|
|
||||||
|
UnknownMaleNpc => Convert( MidlanderMale, UnknownMaleNpc ),
|
||||||
|
UnknownFemaleNpc => Convert( MidlanderMale, MidlanderFemale, UnknownFemaleNpc ),
|
||||||
|
_ => DisposableContainer.Empty,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -143,21 +143,15 @@ public partial class PathResolver
|
||||||
|
|
||||||
private IntPtr ResolveMdlHuman( IntPtr drawObject, IntPtr path, IntPtr unk3, uint modelType )
|
private IntPtr ResolveMdlHuman( IntPtr drawObject, IntPtr path, IntPtr unk3, uint modelType )
|
||||||
{
|
{
|
||||||
CharacterUtility.List.MetaReverter? Get()
|
DisposableContainer Get()
|
||||||
{
|
{
|
||||||
if( modelType > 9 )
|
if( modelType > 9 )
|
||||||
{
|
{
|
||||||
return null;
|
return DisposableContainer.Empty;
|
||||||
}
|
|
||||||
|
|
||||||
var race = MetaState.GetHumanGenderRace( drawObject );
|
|
||||||
if( race == GenderRace.Unknown )
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = GetResolveData( drawObject );
|
var data = GetResolveData( drawObject );
|
||||||
return !data.Valid ? null : data.ModCollection.TemporarilySetEqdpFile( race, modelType > 4 );
|
return !data.Valid ? DisposableContainer.Empty : MetaState.ResolveEqdpData(data.ModCollection, MetaState.GetHumanGenderRace( drawObject ), modelType < 5, modelType > 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
using var eqdp = Get();
|
using var eqdp = Get();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue