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.Linq;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.Utility.Signatures;
|
||||
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
||||
using OtterGui.Classes;
|
||||
using Penumbra.Collections;
|
||||
using Penumbra.GameData.Enums;
|
||||
using ObjectType = FFXIVClientStructs.FFXIV.Client.Graphics.Scene.ObjectType;
|
||||
using static Penumbra.GameData.Enums.GenderRace;
|
||||
|
||||
namespace Penumbra.Interop.Resolver;
|
||||
|
||||
|
|
@ -77,10 +81,8 @@ public unsafe partial class PathResolver
|
|||
var collection = GetResolveData( drawObject );
|
||||
if( collection.Valid )
|
||||
{
|
||||
var race = GetDrawObjectGenderRace( drawObject );
|
||||
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
||||
using var eqdp1 = collection.ModCollection.TemporarilySetEqdpFile( race, false );
|
||||
using var eqdp2 = collection.ModCollection.TemporarilySetEqdpFile( race, true );
|
||||
using var eqdp = ResolveEqdpData( collection.ModCollection, GetDrawObjectGenderRace( drawObject ), true, true );
|
||||
_onModelLoadCompleteHook.Original.Invoke( drawObject );
|
||||
}
|
||||
else
|
||||
|
|
@ -106,10 +108,8 @@ public unsafe partial class PathResolver
|
|||
var collection = GetResolveData( drawObject );
|
||||
if( collection.Valid )
|
||||
{
|
||||
var race = GetDrawObjectGenderRace( drawObject );
|
||||
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
||||
using var eqdp1 = collection.ModCollection.TemporarilySetEqdpFile( race, false );
|
||||
using var eqdp2 = collection.ModCollection.TemporarilySetEqdpFile( race, true );
|
||||
using var eqp = collection.ModCollection.TemporarilySetEqpFile();
|
||||
using var eqdp = ResolveEqdpData( collection.ModCollection, GetDrawObjectGenderRace( drawObject ), true, true );
|
||||
_updateModelsHook.Original.Invoke( drawObject );
|
||||
}
|
||||
else
|
||||
|
|
@ -130,7 +130,7 @@ public unsafe partial class PathResolver
|
|||
}
|
||||
}
|
||||
|
||||
return GenderRace.Unknown;
|
||||
return Unknown;
|
||||
}
|
||||
|
||||
public static GenderRace GetHumanGenderRace( IntPtr human )
|
||||
|
|
@ -203,5 +203,69 @@ public unsafe partial class PathResolver
|
|||
using var eqp = resolveData.Valid ? resolveData.ModCollection.TemporarilySetEqpFile() : null;
|
||||
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 )
|
||||
{
|
||||
CharacterUtility.List.MetaReverter? Get()
|
||||
DisposableContainer Get()
|
||||
{
|
||||
if( modelType > 9 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var race = MetaState.GetHumanGenderRace( drawObject );
|
||||
if( race == GenderRace.Unknown )
|
||||
{
|
||||
return null;
|
||||
return DisposableContainer.Empty;
|
||||
}
|
||||
|
||||
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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue