Android build settings + metaxr

This commit is contained in:
2025-05-14 14:00:02 +03:00
parent 6a2bb7475e
commit d5aa21f55c
594 changed files with 200530 additions and 2 deletions

View File

@@ -0,0 +1,35 @@
// @lint-ignore-every LICENSELINT
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Modules/ModuleManager.h"
/**
* The public interface to this module. In most cases, this interface is only public to sibling modules
* within this plugin.
*/
class IOculusXRColocationModule : public IModuleInterface
{
public:
/**
* Singleton-like access to this module's interface. This is just for convenience!
* Beware of calling this during the shutdown phase, though. Your module might have been unloaded already.
*
* @return Returns singleton instance, loading the module on demand if needed
*/
static inline IOculusXRColocationModule& Get()
{
return FModuleManager::LoadModuleChecked<IOculusXRColocationModule>("OculusXRColocation");
}
/**
* Checks to see if this module is loaded and ready. It is only valid to call Get() if IsAvailable() returns true.
*
* @return True if the module is loaded and ready to use
*/
static inline bool IsAvailable()
{
return FModuleManager::Get().IsModuleLoaded("OculusXRColocation");
}
};

View File

@@ -0,0 +1,19 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "CoreMinimal.h"
#include "OculusXRColocationTypes.h"
#include "OculusXRColocationRequests.h"
namespace OculusXRColocation
{
struct OCULUSXRCOLOCATION_API FColocation
{
static TSharedPtr<FDiscoverSessionsRequest> DiscoverSessionsAsync(const FDiscoverSessionsRequest::FCompleteDelegate& OnComplete, const FOculusXRColocationSessionFoundDelegate& OnSessionFound);
static EColocationResult StopDiscoverSessions(TSharedPtr<FDiscoverSessionsRequest> Request);
static TSharedPtr<FStartSessionAdvertisementRequest> StartSessionAdvertisementAsync(const TArray<uint8>& SessionData, const FStartSessionAdvertisementRequest::FCompleteDelegate& OnComplete);
static TSharedPtr<FStopSessionAdvertisementRequest> StopSessionAdvertisementAsync(const FStopSessionAdvertisementRequest::FCompleteDelegate& OnComplete);
};
} // namespace OculusXRColocation

View File

@@ -0,0 +1,16 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "OculusXRColocationFunctionLibrary.generated.h"
UCLASS()
class OCULUSXRCOLOCATION_API UOculusXRColocationFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
UFUNCTION(BlueprintCallable, Category = "OculusXR|Colocation")
static void StopColocationSessionDiscovery();
};

View File

@@ -0,0 +1,80 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "Kismet/BlueprintAsyncActionBase.h"
#include "OculusXRColocationTypes.h"
#include "OculusXRColocation.h"
#include "OculusXRColocationSession.h"
#include "OculusXRColocationLatentActions.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOculusXR_LatentAction_ColocationDiscoveryComplete, bool, Success, const FOculusXRColocationSession&, Session, const TArray<FOculusXRColocationSession>&, FoundSessions);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOculusXR_LatentAction_ColocationSessionFound, bool, Success, const FOculusXRColocationSession&, Session, const TArray<FOculusXRColocationSession>&, FoundSessions);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOculusXR_LatentAction_ColocationAdvertisementStarted, bool, Success, const FOculusXRColocationSession&, Session);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOculusXR_LatentAction_ColocationAdvertisementStopped, bool, Success);
//
// Find sessions
//
UCLASS()
class OCULUSXRCOLOCATION_API UOculusXRAsyncAction_DiscoverColocationSessions : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
virtual void Activate() override;
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static UOculusXRAsyncAction_DiscoverColocationSessions* OculusXRAsyncDiscoverColocationSessions();
UPROPERTY(BlueprintAssignable)
FOculusXR_LatentAction_ColocationSessionFound SessionFound;
UPROPERTY(BlueprintAssignable)
FOculusXR_LatentAction_ColocationDiscoveryComplete OnComplete;
private:
void HandleSessionFound(const FOculusXRColocationSession& Session);
void HandleSessionFindComplete(const OculusXRColocation::FDiscoverSessionsRequest::FResultType& Result);
};
//
// Start advertisement
//
UCLASS()
class OCULUSXRCOLOCATION_API UOculusXRAsyncAction_StartColocationSessionAdvertisement : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
virtual void Activate() override;
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static UOculusXRAsyncAction_StartColocationSessionAdvertisement* OculusXRAsyncStartColocationSessionAdvertisement(const TArray<uint8>& SessionData);
UPROPERTY(BlueprintAssignable)
FOculusXR_LatentAction_ColocationAdvertisementStarted OnComplete;
private:
TArray<uint8> SessionData;
void HandleStartSessionAdvertisementComplete(const OculusXRColocation::FStartSessionAdvertisementRequest::FResultType& Result);
};
//
// Stop advertisement
//
UCLASS()
class OCULUSXRCOLOCATION_API UOculusXRAsyncAction_StopColocationSessionAdvertisement : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
virtual void Activate() override;
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static UOculusXRAsyncAction_StopColocationSessionAdvertisement* OculusXRAsyncStopColocationSessionAdvertisement();
UPROPERTY(BlueprintAssignable)
FOculusXR_LatentAction_ColocationAdvertisementStopped OnComplete;
private:
void HandleStopSessionAdvertisementComplete(const OculusXRColocation::FStopSessionAdvertisementRequest::FResultType& Result);
};

View File

@@ -0,0 +1,90 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "OculusXRAsyncRequestSystem.h"
#include "OculusXRAsyncRequest.h"
#include "OculusXRColocationSession.h"
#include "OculusXRColocationTypes.h"
#include "OculusXRColocationUtil.h"
DECLARE_DELEGATE_OneParam(FOculusXRColocationSessionFoundDelegate, const FOculusXRColocationSession&);
namespace OculusXRColocation
{
struct FAsyncResultColocationDiscoverySuccess
{
bool operator()(EColocationResult Val) { return OculusXRColocation::IsResultSuccess(Val); }
};
template <typename TDerived, typename TValueType>
using FAsyncColocationRequest = OculusXR::FAsyncRequest<TDerived, EColocationResult, TValueType, FAsyncResultColocationDiscoverySuccess>;
// Discover nearby sessions
struct OCULUSXRCOLOCATION_API FDiscoverSessionsRequest :
FAsyncColocationRequest<FDiscoverSessionsRequest, TArray<FOculusXRColocationSession>>
{
public:
FDiscoverSessionsRequest();
~FDiscoverSessionsRequest();
void BindOnSessionFound(const FOculusXRColocationSessionFoundDelegate& OnSessionFound);
void OnSessionFound(FOculusXRColocationSession&& Session);
const TArray<FOculusXRColocationSession>& GetFoundSessions() const { return FoundSessions; }
protected:
virtual void OnInitRequest() override;
private:
static void OnStartComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
static void OnResultAvailable(FOculusXRUInt64 RequestId, FOculusXRUUID Uuid, const TArray<uint8>& Metadata);
static void OnDiscoveryComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
FDelegateHandle OnStartCompleteHandle;
FDelegateHandle OnSessionFoundHandle;
FDelegateHandle OnStopCompleteHandle;
FDelegateHandle OnDiscoveryCompleteHandle;
FOculusXRColocationSessionFoundDelegate OnFoundSessionCallback;
TArray<FOculusXRColocationSession> FoundSessions;
};
// Start advertisement, creates a session internally
struct OCULUSXRCOLOCATION_API FStartSessionAdvertisementRequest :
FAsyncColocationRequest<FStartSessionAdvertisementRequest, FOculusXRColocationSession>
{
public:
FStartSessionAdvertisementRequest(const TArray<uint8>& SessionData);
~FStartSessionAdvertisementRequest();
const TArray<uint8>& GetData() const { return Data; }
protected:
virtual void OnInitRequest() override;
private:
static void OnStartComplete(FOculusXRUInt64 RequestId, FOculusXRUUID Uuid, EColocationResult Result);
FDelegateHandle OnStartCompleteHandle;
TArray<uint8> Data;
};
// Stop advertisement, stops advertising and destroys the internal session
struct OCULUSXRCOLOCATION_API FStopSessionAdvertisementRequest :
FAsyncColocationRequest<FStopSessionAdvertisementRequest, FOculusXRColocationSession>
{
public:
FStopSessionAdvertisementRequest();
~FStopSessionAdvertisementRequest();
protected:
virtual void OnInitRequest() override;
private:
static void OnStopComplete(FOculusXRUInt64 RequestId, EColocationResult Result);
FDelegateHandle OnStopCompleteHandle;
FDelegateHandle OnCompleteHandle;
};
} // namespace OculusXRColocation

View File

@@ -0,0 +1,18 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "OculusXRColocationTypes.h"
#include "OculusXRColocationSession.generated.h"
USTRUCT(BlueprintType)
struct OCULUSXRCOLOCATION_API FOculusXRColocationSession
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadOnly, Category = "OculusXR|Colocation")
FOculusXRUUID Uuid;
UPROPERTY(BlueprintReadOnly, Category = "OculusXR|Colocation")
TArray<uint8> Metadata;
};

View File

@@ -0,0 +1,42 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "OculusXRColocationSession.h"
#include "OculusXRColocationRequests.h"
#include <Engine/World.h>
#include <Subsystems/GameInstanceSubsystem.h>
#include "OculusXRColocationSubsystem.generated.h"
UCLASS()
class OCULUSXRCOLOCATION_API UOculusXRColocationSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
static UOculusXRColocationSubsystem* Get();
UOculusXRColocationSubsystem();
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
void AssignLocalColocationSessionData(const FOculusXRUUID& Uuid, const TArray<uint8>& Data);
void ClearLocalColocationSession();
bool HasLocalColocationSession() const;
const FOculusXRColocationSession& GetLocalSession() const;
void SetDiscoveryRequest(TSharedPtr<OculusXRColocation::FDiscoverSessionsRequest> Request);
void ClearDiscoveryRequest();
TSharedPtr<OculusXRColocation::FDiscoverSessionsRequest> GetDiscoveryRequest() const;
private:
void OnColocationAdvertisementStart(FOculusXRUInt64 RequestId, FOculusXRUUID Uuid, EColocationResult Result);
void OnColocationAdvertisementStopped(FOculusXRUInt64 RequestId, EColocationResult Result);
FDelegateHandle OnAdvertisementStartHandle;
FDelegateHandle OnAdvertisementStoppedHandle;
bool bHasLocalSession;
FOculusXRColocationSession LocalSession;
TSharedPtr<OculusXRColocation::FDiscoverSessionsRequest> DiscoverSessionsRequest;
};

View File

@@ -0,0 +1,22 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
#pragma once
#include "OculusXRAnchorTypes.h"
#include "OculusXRColocationTypes.generated.h"
UENUM(BlueprintType)
enum class EColocationResult : uint8
{
Success,
Success_AlreadyAdvertising,
Success_AlreadyDiscovering,
Failure,
FailureInvalidParameter,
FailureDataIsInvalid,
NetworkTimeout,
NetworkRequestFailed,
InsufficientPermissions,
CloudStorageDisabled,
NoDiscoveryMethodAvailable,
};