October3d55/M/PICOOpenXR/Source/PICOOpenXRMovement/Private/PICO_BodyTracking.h

60 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-03-10 09:43:27 +08:00
// Copyright 2023 PICO Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "PICO_MovementFunctionLibrary.h"
#include "IOpenXRExtensionPlugin.h"
class FBodyTrackingPICO : public IOpenXRExtensionPlugin
{
public:
FBodyTrackingPICO();
virtual ~FBodyTrackingPICO() {}
void Register();
void Unregister();
/** IOpenXRExtensionPlugin */
virtual FString GetDisplayName() override
{
return FString(TEXT("BodyTrackingPICO"));
}
virtual bool GetRequiredExtensions(TArray<const ANSICHAR*>& OutExtensions) override;
2025-07-29 14:53:32 +08:00
virtual bool GetOptionalExtensions(TArray<const ANSICHAR*>& OutExtensions) override;
2025-03-10 09:43:27 +08:00
virtual const void* OnGetSystem(XrInstance InInstance, const void* InNext) override;
virtual void PostGetSystem(XrInstance InInstance, XrSystemId InSystem) override;
virtual void PostCreateSession(XrSession InSession) override;
virtual void UpdateDeviceLocations(XrSession InSession, XrTime DisplayTime, XrSpace TrackingSpace) override;
2025-07-21 10:22:56 +08:00
bool TryGetBodyState(FBodyStatePICO& outBodyState, float WorldToMeters = 100.0f, bool QueryAcc = false, bool QueryVel = false, bool QueryPostureFlag = false);
2025-03-10 09:43:27 +08:00
bool IsBodyTrackingEnabled();
bool IsBodyTrackingSupported();
bool StartBodyTracking(EBodyTrackingModePICO Mode);
bool StopBodyTracking();
2025-07-21 10:22:56 +08:00
bool StartBodyTrackingCalibApp();
bool GetBodyTrackingState(EBodyTrackingStatusPICO& Status, EBodyTrackingErrorCodePICO& Error);
2025-03-10 09:43:27 +08:00
private:
PFN_xrCreateBodyTrackerBD xrCreateBodyTrackerBD = nullptr;
PFN_xrDestroyBodyTrackerBD xrDestroyBodyTrackerBD = nullptr;
PFN_xrLocateBodyJointsBD xrLocateBodyJointsBD = nullptr;
bool bCurrentDeviceSupportBodyTracking = false;
2025-07-21 10:22:56 +08:00
XrInstance Instance;
XrSession Session;
XrBodyTrackerBD BodyTracker;
bool bBodyTrackerIsRunning;
2025-07-29 14:53:32 +08:00
bool bSupportBodyTracking2 = false;
2025-07-21 10:22:56 +08:00
XrTime PredictedTime;
XrSpace BaseSpace;
2025-03-10 09:43:27 +08:00
TArray<XrBodyJointLocationBD> Locations;
2025-07-21 10:22:56 +08:00
TArray<XrBodyTrackingPosturePICO> PostureFlags;
TArray<XrBodyJointVelocityPICO> Velocities;
TArray<XrBodyJointAccelerationPICO> Accelerations;
PFN_xrStartBodyTrackingCalibrationAppPICO xrStartBodyTrackingCalibrationAppPICO = nullptr;
PFN_xrGetBodyTrackingStatePICO xrGetBodyTrackingStatePICO = nullptr;
2025-03-10 09:43:27 +08:00
};