mirror of
https://github.com/xivdev/Penumbra.git
synced 2026-01-02 05:43:42 +01:00
Use MetaReverter for all cases, improve Eqdp handling through this.
This commit is contained in:
parent
af3a07c227
commit
b34999a1a5
13 changed files with 199 additions and 195 deletions
|
|
@ -18,6 +18,9 @@ public partial class MetaManager
|
|||
public static void ResetCmpFiles()
|
||||
=> SetFile( null, CharacterUtility.Index.HumanCmp );
|
||||
|
||||
public Interop.CharacterUtility.List.MetaReverter TemporarilySetCmpFile()
|
||||
=> TemporarilySetFile( _cmpFile, CharacterUtility.Index.HumanCmp );
|
||||
|
||||
public void ResetCmp()
|
||||
{
|
||||
if( _cmpFile == null )
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OtterGui;
|
||||
using OtterGui.Filesystem;
|
||||
using Penumbra.GameData.Enums;
|
||||
using Penumbra.Interop.Structs;
|
||||
|
|
@ -23,6 +24,21 @@ public partial class MetaManager
|
|||
}
|
||||
}
|
||||
|
||||
public Interop.CharacterUtility.List.MetaReverter? TemporarilySetEqdpFile( GenderRace genderRace, bool accessory )
|
||||
{
|
||||
var idx = CharacterUtility.EqdpIdx( genderRace, accessory );
|
||||
if( ( int )idx != -1 )
|
||||
{
|
||||
var i = CharacterUtility.EqdpIndices.IndexOf( idx );
|
||||
if( i != -1 )
|
||||
{
|
||||
return TemporarilySetFile( _eqdpFiles[ i ], idx );
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void ResetEqdpFiles()
|
||||
{
|
||||
foreach( var idx in CharacterUtility.EqdpIndices )
|
||||
|
|
@ -33,7 +49,7 @@ public partial class MetaManager
|
|||
|
||||
public void ResetEqdp()
|
||||
{
|
||||
foreach( var file in _eqdpFiles.OfType<ExpandedEqdpFile>() )
|
||||
foreach( var file in _eqdpFiles.OfType< ExpandedEqdpFile >() )
|
||||
{
|
||||
var relevant = Interop.CharacterUtility.RelevantIndices[ file.Index.Value ];
|
||||
file.Reset( _eqdpManipulations.Where( m => m.FileIndex() == relevant ).Select( m => ( int )m.SetId ) );
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ public partial class MetaManager
|
|||
public static void ResetEqpFiles()
|
||||
=> SetFile( null, CharacterUtility.Index.Eqp );
|
||||
|
||||
public Interop.CharacterUtility.List.MetaReverter TemporarilySetEqpFile()
|
||||
=> TemporarilySetFile( _eqpFile, CharacterUtility.Index.Eqp );
|
||||
|
||||
public void ResetEqp()
|
||||
{
|
||||
if( _eqpFile == null )
|
||||
|
|
|
|||
|
|
@ -33,6 +33,20 @@ public partial class MetaManager
|
|||
SetFile( null, CharacterUtility.Index.HeadEst );
|
||||
}
|
||||
|
||||
public Interop.CharacterUtility.List.MetaReverter? TemporarilySetEstFile(EstManipulation.EstType type)
|
||||
{
|
||||
var (file, idx) = type switch
|
||||
{
|
||||
EstManipulation.EstType.Face => ( _estFaceFile, CharacterUtility.Index.FaceEst ),
|
||||
EstManipulation.EstType.Hair => ( _estHairFile, CharacterUtility.Index.HairEst ),
|
||||
EstManipulation.EstType.Body => ( _estBodyFile, CharacterUtility.Index.BodyEst ),
|
||||
EstManipulation.EstType.Head => ( _estHeadFile, CharacterUtility.Index.HeadEst ),
|
||||
_ => ( null, 0 ),
|
||||
};
|
||||
|
||||
return idx != 0 ? TemporarilySetFile( file, idx ) : null;
|
||||
}
|
||||
|
||||
public void ResetEst()
|
||||
{
|
||||
_estFaceFile?.Reset();
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ public partial class MetaManager
|
|||
public static void ResetGmpFiles()
|
||||
=> SetFile( null, CharacterUtility.Index.Gmp );
|
||||
|
||||
public Interop.CharacterUtility.List.MetaReverter TemporarilySetGmpFile()
|
||||
=> TemporarilySetFile( _gmpFile, CharacterUtility.Index.Gmp );
|
||||
|
||||
public void ResetGmp()
|
||||
{
|
||||
if( _gmpFile == null )
|
||||
|
|
|
|||
|
|
@ -179,4 +179,10 @@ public partial class MetaManager : IDisposable, IEnumerable< KeyValuePair< MetaM
|
|||
Penumbra.CharacterUtility.SetResource( index, ( IntPtr )file.Data, file.Length );
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl( MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization )]
|
||||
private static unsafe Interop.CharacterUtility.List.MetaReverter TemporarilySetFile( MetaBaseFile? file, CharacterUtility.Index index )
|
||||
=> file == null
|
||||
? Penumbra.CharacterUtility.TemporarilyResetResource( index )
|
||||
: Penumbra.CharacterUtility.TemporarilySetResource( index, ( IntPtr )file.Data, file.Length );
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue