// Copyright (c) Meta Platforms, Inc. and affiliates. #pragma once #include "Kismet/BlueprintAsyncActionBase.h" #include "Templates/SharedPointer.h" #include "OculusXRAnchorTypes.h" #include "OculusXRAnchorComponent.h" #include "OculusXRAnchorComponents.h" #include "OculusXRAnchorLatentActions.generated.h" DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_CreateSpatialAnchor_Success, UOculusXRAnchorComponent*, Anchor, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_CreateSpatialAnchor_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOculusXR_LatentAction_EraseAnchor_Success, AActor*, Actor, FOculusXRUUID, UUID, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_EraseAnchor_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_SaveAnchor_Success, UOculusXRAnchorComponent*, Anchor, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_SaveAnchor_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_SaveAnchorList_Success, const TArray&, Anchors, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_SaveAnchorList_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_QueryAnchors_Success, const TArray&, QueryResults, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_QueryAnchors_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOculusXR_LatentAction_SetComponentStatus_Success, UOculusXRAnchorComponent*, Anchor, EOculusXRSpaceComponentType, ComponentType, bool, Enabled, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_SetComponentStatus_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_SetAnchorComponentStatus_Success, UOculusXRBaseAnchorComponent*, Component, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_SetAnchorComponentStatus_Failure, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOculusXR_LatentAction_ShareAnchors_Success, const TArray&, SharedAnchors, const TArray&, UserIds, EOculusXRAnchorResult::Type, Result); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_ShareAnchors_Failure, EOculusXRAnchorResult::Type, Result); // // Create Anchor // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_CreateSpatialAnchor : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_CreateSpatialAnchor* OculusXRAsyncCreateSpatialAnchor(AActor* TargetActor, const FTransform& AnchorTransform); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_CreateSpatialAnchor_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_CreateSpatialAnchor_Failure Failure; // Target actor UPROPERTY(Transient) AActor* TargetActor; FTransform AnchorTransform; private: void HandleCreateComplete(EOculusXRAnchorResult::Type CreateResult, UOculusXRAnchorComponent* Anchor); }; // // Erase Anchor // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_EraseAnchor : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_EraseAnchor* OculusXRAsyncEraseAnchor(AActor* TargetActor); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_EraseAnchor_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_EraseAnchor_Failure Failure; // Target actor UPROPERTY(Transient) AActor* TargetActor; FOculusXRUInt64 DeleteRequestId; private: void HandleEraseAnchorComplete(EOculusXRAnchorResult::Type EraseResult, FOculusXRUUID UUID); }; // // Save Anchor // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_SaveAnchor : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_SaveAnchor* OculusXRAsyncSaveAnchor(AActor* TargetActor, EOculusXRSpaceStorageLocation StorageLocation); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SaveAnchor_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SaveAnchor_Failure Failure; // Target actor UPROPERTY(Transient) AActor* TargetActor; EOculusXRSpaceStorageLocation StorageLocation; private: void HandleSaveAnchorComplete(EOculusXRAnchorResult::Type SaveResult, UOculusXRAnchorComponent* Anchor); }; // // Save Anchor List // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_SaveAnchorList : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_SaveAnchorList* OculusXRAsyncSaveAnchorList(const TArray& TargetActors, EOculusXRSpaceStorageLocation StorageLocation); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SaveAnchorList_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SaveAnchorList_Failure Failure; UPROPERTY(Transient) TArray TargetAnchors; EOculusXRSpaceStorageLocation StorageLocation; private: void HandleSaveAnchorListComplete(EOculusXRAnchorResult::Type SaveResult, const TArray& SavedSpaces); }; // // Query Anchors // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_QueryAnchors : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_QueryAnchors* OculusXRAsyncQueryAnchors(EOculusXRSpaceStorageLocation Location, const TArray& UUIDs); UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_QueryAnchors* OculusXRAsyncQueryAnchorsAdvanced(const FOculusXRSpaceQueryInfo& QueryInfo); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_QueryAnchors_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_QueryAnchors_Failure Failure; FOculusXRSpaceQueryInfo QueryInfo; TArray QueryResults; private: void HandleQueryAnchorsResults(EOculusXRAnchorResult::Type QueryResult, const TArray& Results); }; // // Set Component Status // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_SetAnchorComponentStatus : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_SetAnchorComponentStatus* OculusXRAsyncSetAnchorComponentStatus(AActor* TargetActor, EOculusXRSpaceComponentType ComponentType, bool bEnabled); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SetComponentStatus_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SetComponentStatus_Failure Failure; // Target actor UPROPERTY(Transient) AActor* TargetActor; UPROPERTY(Transient) UOculusXRAnchorComponent* TargetAnchorComponent; EOculusXRSpaceComponentType ComponentType; bool bEnabled; private: void HandleSetComponentStatusComplete(EOculusXRAnchorResult::Type SetStatusResult, uint64 AnchorHandle, EOculusXRSpaceComponentType SpaceComponentType, bool bResultEnabled); }; // // Set Anchor Component Status // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_SetComponentStatus : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_SetComponentStatus* OculusXRAsyncSetComponentStatus(UOculusXRBaseAnchorComponent* Component, bool bEnabled); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SetAnchorComponentStatus_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_SetAnchorComponentStatus_Failure Failure; // Target actor UPROPERTY(Transient) UOculusXRBaseAnchorComponent* Component; bool bEnabled; private: void HandleSetComponentStatusComplete(EOculusXRAnchorResult::Type SetStatusResult, uint64 AnchorHandle, EOculusXRSpaceComponentType SpaceComponentType, bool bResultEnabled); }; // // Share Anchors // UCLASS() class OCULUSXRANCHORS_API UOculusXRAsyncAction_ShareAnchors : public UBlueprintAsyncActionBase { GENERATED_BODY() public: virtual void Activate() override; UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true")) static UOculusXRAsyncAction_ShareAnchors* OculusXRAsyncShareAnchors(const TArray& TargetActors, const TArray& ToShareWithIds); UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_ShareAnchors_Success Success; UPROPERTY(BlueprintAssignable) FOculusXR_LatentAction_ShareAnchors_Failure Failure; // Target Spaces UPROPERTY(Transient) TArray TargetAnchors; // Users to share with TArray ToShareWithIds; FOculusXRUInt64 ShareSpacesRequestId; private: void HandleShareAnchorsComplete(EOculusXRAnchorResult::Type ShareResult, const TArray& TargetAnchors, const TArray& OculusUserIds); }; UCLASS() class OCULUSXRANCHORS_API UOculusXRAnchorLaunchCaptureFlow : public UBlueprintAsyncActionBase { GENERATED_BODY() public: DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOculusXRAnchorCaptureFlowFinished); UFUNCTION(BlueprintCallable, Category = "OculusXR|SpatialAnchor", meta = (WorldContext = "WorldContext", BlueprintInternalUseOnly = "true")) static UOculusXRAnchorLaunchCaptureFlow* LaunchCaptureFlowAsync(const UObject* WorldContext); void Activate() override; UPROPERTY(BlueprintAssignable) FOculusXRAnchorCaptureFlowFinished Success; UPROPERTY(BlueprintAssignable) FOculusXRAnchorCaptureFlowFinished Failure; private: uint64 Request = 0; UFUNCTION(CallInEditor) void OnCaptureFinish(FOculusXRUInt64 RequestId, bool bSuccess); };