mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-14 20:54:16 +01:00
Try to identify actors in banners correctly.
This commit is contained in:
parent
23919d8083
commit
6b558c5940
4 changed files with 83 additions and 72 deletions
|
|
@ -1,8 +1,11 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Penumbra.String.Functions;
|
||||
|
||||
namespace Penumbra.GameData.Structs;
|
||||
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Size = Size)]
|
||||
public unsafe struct CustomizeData : IEquatable< CustomizeData >
|
||||
{
|
||||
public const int Size = 26;
|
||||
|
|
@ -40,12 +43,18 @@ public unsafe struct CustomizeData : IEquatable< CustomizeData >
|
|||
}
|
||||
}
|
||||
|
||||
public static bool Equals( CustomizeData* lhs, CustomizeData* rhs )
|
||||
=> MemoryUtility.MemCmpUnchecked( lhs, rhs, Size ) == 0;
|
||||
|
||||
public override bool Equals( object? obj )
|
||||
=> obj is CustomizeData other && Equals( other );
|
||||
|
||||
public static bool Equals(CustomizeData* lhs, CustomizeData* rhs)
|
||||
=> MemoryUtility.MemCmpUnchecked(lhs, rhs, Size) == 0;
|
||||
|
||||
/// <remarks>Compare Gender and then only from Height onwards, because all screen actors are set to Height 50,
|
||||
/// the Race is implicitly included in the subrace (after height),
|
||||
/// and the body type is irrelevant for players.</remarks>>
|
||||
public static bool ScreenActorEquals(CustomizeData* lhs, CustomizeData* rhs)
|
||||
=> lhs->Data[1] == rhs->Data[1] && MemoryUtility.MemCmpUnchecked(lhs->Data + 4, rhs->Data + 4, Size - 4) == 0;
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
fixed( byte* ptr = Data )
|
||||
|
|
@ -65,6 +74,17 @@ public unsafe struct CustomizeData : IEquatable< CustomizeData >
|
|||
}
|
||||
}
|
||||
|
||||
public string WriteBytes()
|
||||
{
|
||||
var sb = new StringBuilder(Size * 3);
|
||||
for (var i = 0; i < Size - 1; ++i)
|
||||
{
|
||||
sb.Append($"{Data[i]:X2} ");
|
||||
}
|
||||
sb.Append($"{Data[Size - 1]:X2}");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public bool LoadBase64( string base64 )
|
||||
{
|
||||
var buffer = stackalloc byte[Size];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue