Files
CustomizeTool/CustomizePlus/Game/Services/GPose/ExternalTools/PosingModeDetectService.cs
2024-01-09 22:52:17 +03:00

36 lines
1.5 KiB
C#

using Dalamud.Game;
namespace CustomizePlus.Game.Services.GPose.ExternalTools;
/// <summary>
/// Service which detects if Anamnesis/Ktisis posing mode is enabled.
/// </summary>
public class PosingModeDetectService
{
// Borrowed from Ktisis:
// If this is NOP'd, Anam posing is enabled.
internal static unsafe byte* AnamnesisFreezePosition;
internal static unsafe byte* AnamnesisFreezeRotation;
internal static unsafe byte* AnamnesisFreezeScale;
internal static unsafe bool IsAnamnesisPositionFrozen =>
AnamnesisFreezePosition != null && *AnamnesisFreezePosition == 0x90 || *AnamnesisFreezePosition == 0x00;
internal static unsafe bool IsAnamnesisRotationFrozen =>
AnamnesisFreezeRotation != null && *AnamnesisFreezeRotation == 0x90 || *AnamnesisFreezeRotation == 0x00;
internal static unsafe bool IsAnamnesisScalingFrozen =>
AnamnesisFreezeScale != null && *AnamnesisFreezeScale == 0x90 || *AnamnesisFreezeScale == 0x00;
internal static bool IsAnamnesis =>
IsAnamnesisPositionFrozen || IsAnamnesisRotationFrozen || IsAnamnesisScalingFrozen;
public bool IsInPosingMode => IsAnamnesis; //Can't detect Ktisis for now
public unsafe PosingModeDetectService(ISigScanner sigScanner)
{
AnamnesisFreezePosition = (byte*)sigScanner.ScanText("41 0F 29 24 12");
AnamnesisFreezeRotation = (byte*)sigScanner.ScanText("41 0F 29 5C 12 10");
AnamnesisFreezeScale = (byte*)sigScanner.ScanText("41 0F 29 44 12 20");
}
}