VRTowerDef/Plugins/MetaXR/Source/OculusXRProjectSetupTool/Private/Rules/OculusXRCompatibilityRules.cpp

188 lines
6.1 KiB
C++

// Copyright (c) Meta Platforms, Inc. and affiliates.
#include "OculusXRCompatibilityRules.h"
#include "CoreMinimal.h"
#include "AndroidRuntimeSettings.h"
#include "GeneralProjectSettings.h"
#include "OculusXRRuleProcessorSubsystem.h"
#include "GameFramework/InputSettings.h"
#include "OculusXRHMDRuntimeSettings.h"
#include "OculusXRPSTUtils.h"
#define LOCTEXT_NAMESPACE "OculusXRCompatibilityRules"
namespace
{
constexpr int32 MinimumAndroidAPILevel = 32;
constexpr int32 TargetAndroidAPILevel = 32;
} // namespace
namespace OculusXRCompatibilityRules
{
FUseAndroidSDKMinimumRule::FUseAndroidSDKMinimumRule()
: ISetupRule(
"Compatibility_UseAndroidSDKMinimum",
LOCTEXT("UseAndroidSDKMinimum_DisplayName", "Use Android SDK Minimum Version"),
FText::Format(
LOCTEXT("UseAndroidSDKMinimum_Description", "Minimum Android API level must be at least {0}."),
MinimumAndroidAPILevel),
ESetupRuleCategory::Compatibility,
ESetupRuleSeverity::Critical,
MetaQuest_All) {}
bool FUseAndroidSDKMinimumRule::IsApplied() const
{
const UAndroidRuntimeSettings* Settings = GetMutableDefault<UAndroidRuntimeSettings>();
return Settings->MinSDKVersion >= MinimumAndroidAPILevel;
}
void FUseAndroidSDKMinimumRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, MinSDKVersion, MinimumAndroidAPILevel);
OutShouldRestartEditor = false;
}
FUseAndroidSDKTargetRule::FUseAndroidSDKTargetRule()
: ISetupRule(
"Compatibility_UseAndroidSDKTarget",
LOCTEXT("UseAndroidSDKTarget_DisplayName", "Use Android SDK Target Version"),
FText::Format(
LOCTEXT("UseAndroidSDKTarget_Description", "Target Android API level must be at least {0}."),
TargetAndroidAPILevel),
ESetupRuleCategory::Compatibility,
ESetupRuleSeverity::Critical,
MetaQuest_All) {}
bool FUseAndroidSDKTargetRule::IsApplied() const
{
const UAndroidRuntimeSettings* Settings = GetMutableDefault<UAndroidRuntimeSettings>();
return Settings->TargetSDKVersion >= TargetAndroidAPILevel;
}
void FUseAndroidSDKTargetRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, TargetSDKVersion, TargetAndroidAPILevel);
OutShouldRestartEditor = false;
}
bool FUseArm64CPURule::IsApplied() const
{
const UAndroidRuntimeSettings* Settings = GetMutableDefault<UAndroidRuntimeSettings>();
return Settings->bBuildForArm64 && !Settings->bBuildForX8664;
}
void FUseArm64CPURule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, bBuildForArm64, true);
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, bBuildForX8664, false);
OutShouldRestartEditor = false;
}
bool FEnablePackageForMetaQuestRule::IsApplied() const
{
const UAndroidRuntimeSettings* Settings = GetMutableDefault<UAndroidRuntimeSettings>();
return Settings->bPackageForMetaQuest;
}
void FEnablePackageForMetaQuestRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, bPackageForMetaQuest, true);
OutShouldRestartEditor = false;
}
bool FQuest2SupportedDeviceRule::IsApplied() const
{
const UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
return Settings->SupportedDevices.Contains(EOculusXRSupportedDevices::Quest2);
}
void FQuest2SupportedDeviceRule::ApplyImpl(bool& OutShouldRestartEditor)
{
UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
Settings->SupportedDevices.Add(EOculusXRSupportedDevices::Quest2);
// UpdateSinglePropertyInConfigFile does not support arrays
Settings->SaveConfig(CPF_Config, *Settings->GetDefaultConfigFilename());
OutShouldRestartEditor = false;
}
bool FQuestProSupportedDeviceRule::IsApplied() const
{
const UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
return Settings->SupportedDevices.Contains(EOculusXRSupportedDevices::QuestPro);
}
void FQuestProSupportedDeviceRule::ApplyImpl(bool& OutShouldRestartEditor)
{
UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
Settings->SupportedDevices.Add(EOculusXRSupportedDevices::QuestPro);
// UpdateSinglePropertyInConfigFile does not support arrays
Settings->SaveConfig(CPF_Config, *Settings->GetDefaultConfigFilename());
OutShouldRestartEditor = false;
}
bool FQuest3SupportedDeviceRule::IsApplied() const
{
const UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
return Settings->SupportedDevices.Contains(EOculusXRSupportedDevices::Quest3);
}
void FQuest3SupportedDeviceRule::ApplyImpl(bool& OutShouldRestartEditor)
{
UOculusXRHMDRuntimeSettings* Settings = GetMutableDefault<UOculusXRHMDRuntimeSettings>();
Settings->SupportedDevices.Add(EOculusXRSupportedDevices::Quest3);
// UpdateSinglePropertyInConfigFile does not support arrays
Settings->SaveConfig(CPF_Config, *Settings->GetDefaultConfigFilename());
OutShouldRestartEditor = false;
}
bool FEnableFullscreenRule::IsApplied() const
{
const UAndroidRuntimeSettings* Settings = GetMutableDefault<UAndroidRuntimeSettings>();
return Settings->bFullScreen;
}
void FEnableFullscreenRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UAndroidRuntimeSettings, bFullScreen, true);
OutShouldRestartEditor = false;
}
bool FEnableStartInVRRule::IsApplied() const
{
const UGeneralProjectSettings* Settings = GetDefault<UGeneralProjectSettings>();
return Settings->bStartInVR != 0;
}
void FEnableStartInVRRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UGeneralProjectSettings, bStartInVR, true);
OutShouldRestartEditor = false;
}
bool FDisableTouchInterfaceRule::IsApplied() const
{
const UInputSettings* Settings = GetDefault<UInputSettings>();
return Settings->DefaultTouchInterface.IsNull();
}
void FDisableTouchInterfaceRule::ApplyImpl(bool& OutShouldRestartEditor)
{
OCULUSXR_UPDATE_SETTINGS(UInputSettings, DefaultTouchInterface, nullptr);
OutShouldRestartEditor = false;
}
} // namespace OculusXRCompatibilityRules
#undef LOCTEXT_NAMESPACE