Giant_Beast_2025/Plugins/MetaXR/Source/OculusXRColocation/Private/OculusXRColocationLatentActions.cpp

98 lines
3.8 KiB
C++

// Copyright (c) Meta Platforms, Inc. and affiliates.
#include "OculusXRColocationLatentActions.h"
#include "OculusXRHMD.h"
#include "OculusXRAnchorBPFunctionLibrary.h"
#include "OculusXRColocationModule.h"
#include "OculusXRColocationSession.h"
#include "OculusXRAnchorManager.h"
//
// Find sessions
//
void UOculusXRAsyncAction_DiscoverColocationSessions::Activate()
{
OculusXRColocation::FColocation::DiscoverSessionsAsync(
OculusXRColocation::FDiscoverSessionsRequest::FCompleteDelegate::CreateUObject(this, &UOculusXRAsyncAction_DiscoverColocationSessions::HandleSessionFindComplete),
FOculusXRColocationSessionFoundDelegate::CreateUObject(this, &UOculusXRAsyncAction_DiscoverColocationSessions::HandleSessionFound));
}
UOculusXRAsyncAction_DiscoverColocationSessions* UOculusXRAsyncAction_DiscoverColocationSessions::OculusXRAsyncDiscoverColocationSessions()
{
UOculusXRAsyncAction_DiscoverColocationSessions* Action = NewObject<UOculusXRAsyncAction_DiscoverColocationSessions>();
Action->RegisterWithGameInstance(GWorld);
return Action;
}
void UOculusXRAsyncAction_DiscoverColocationSessions::HandleSessionFound(const FOculusXRColocationSession& Session)
{
TArray<FOculusXRColocationSession> emptyArray;
SessionFound.Broadcast(true, Session, emptyArray);
}
void UOculusXRAsyncAction_DiscoverColocationSessions::HandleSessionFindComplete(const OculusXRColocation::FDiscoverSessionsRequest::FResultType& Result)
{
if (Result.IsSuccess())
{
OnComplete.Broadcast(true, FOculusXRColocationSession(), Result.GetValue());
}
else
{
TArray<FOculusXRColocationSession> emptyArray;
OnComplete.Broadcast(false, FOculusXRColocationSession(), emptyArray);
}
SetReadyToDestroy();
}
//
// Start session advertisement
//
void UOculusXRAsyncAction_StartColocationSessionAdvertisement::Activate()
{
OculusXRColocation::FColocation::StartSessionAdvertisementAsync(
SessionData,
OculusXRColocation::FStartSessionAdvertisementRequest::FCompleteDelegate::CreateUObject(
this, &UOculusXRAsyncAction_StartColocationSessionAdvertisement::HandleStartSessionAdvertisementComplete));
}
UOculusXRAsyncAction_StartColocationSessionAdvertisement* UOculusXRAsyncAction_StartColocationSessionAdvertisement::OculusXRAsyncStartColocationSessionAdvertisement(const TArray<uint8>& SessionData)
{
UOculusXRAsyncAction_StartColocationSessionAdvertisement* Action = NewObject<UOculusXRAsyncAction_StartColocationSessionAdvertisement>();
Action->RegisterWithGameInstance(GWorld);
Action->SessionData = SessionData;
return Action;
}
void UOculusXRAsyncAction_StartColocationSessionAdvertisement::HandleStartSessionAdvertisementComplete(
const OculusXRColocation::FStartSessionAdvertisementRequest::FResultType& Result)
{
OnComplete.Broadcast(Result.IsSuccess(), Result.IsSuccess() ? Result.GetValue() : FOculusXRColocationSession());
SetReadyToDestroy();
}
//
// Stop session advertisement
//
void UOculusXRAsyncAction_StopColocationSessionAdvertisement::Activate()
{
OculusXRColocation::FColocation::StopSessionAdvertisementAsync(
OculusXRColocation::FStopSessionAdvertisementRequest::FCompleteDelegate::CreateUObject(
this, &UOculusXRAsyncAction_StopColocationSessionAdvertisement::HandleStopSessionAdvertisementComplete));
}
UOculusXRAsyncAction_StopColocationSessionAdvertisement* UOculusXRAsyncAction_StopColocationSessionAdvertisement::OculusXRAsyncStopColocationSessionAdvertisement()
{
UOculusXRAsyncAction_StopColocationSessionAdvertisement* Action = NewObject<UOculusXRAsyncAction_StopColocationSessionAdvertisement>();
Action->RegisterWithGameInstance(GWorld);
return Action;
}
void UOculusXRAsyncAction_StopColocationSessionAdvertisement::HandleStopSessionAdvertisementComplete(
const OculusXRColocation::FStopSessionAdvertisementRequest::FResultType& Result)
{
OnComplete.Broadcast(Result.IsSuccess());
SetReadyToDestroy();
}