// Copyright (c) Meta Platforms, Inc. and affiliates. #pragma once #include "OculusXRSetupRule.h" // Collection of rules related to compatibility. Can be extended as needed namespace OculusXRCompatibilityRules { class FUseAndroidSDKMinimumRule final : public ISetupRule { public: FUseAndroidSDKMinimumRule(); virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FUseAndroidSDKTargetRule final : public ISetupRule { public: FUseAndroidSDKTargetRule(); virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FUseArm64CPURule final : public ISetupRule { public: FUseArm64CPURule() : ISetupRule( "Compatibility_UseArm64CPU", NSLOCTEXT("OculusXRCompatibilityRules", "UseArm64CPU_DisplayName", "Use Arm64 CPU Architecture"), NSLOCTEXT("OculusXRCompatibilityRules", "UseArm64CPU_Description", "Meta Quest store requires 64-bit applications"), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical, MetaQuest_All) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FEnablePackageForMetaQuestRule final : public ISetupRule { public: FEnablePackageForMetaQuestRule() : ISetupRule( "Compatibility_UsePackageForMetaQuest", NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_DisplayName", "Enable Package for Meta Quest devices"), NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_Description", "\"Package for Meta Quest devices\" must be enabled."), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical, MetaQuest_All) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FQuest2SupportedDeviceRule final : public ISetupRule { public: FQuest2SupportedDeviceRule() : ISetupRule( "Compatibility_UsePackageForQuest2", NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_DisplayName", "Use Package for Quest2"), NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_Description", "Meta Quest2 must be added to \"Supported Meta Quest Devices\"."), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical, ESetupRulePlatform::MetaQuest_2) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FQuestProSupportedDeviceRule final : public ISetupRule { public: FQuestProSupportedDeviceRule() : ISetupRule( "Compatibility_UsePackageForQuestPro", NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_DisplayName", "Use Package for QuestPro"), NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_Description", "Meta QuestPro must be added to \"Supported Meta Quest Devices\"."), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical, ESetupRulePlatform::MetaQuest_Pro) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FQuest3SupportedDeviceRule final : public ISetupRule { public: FQuest3SupportedDeviceRule() : ISetupRule( "Compatibility_UsePackageForQuest3", NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_DisplayName", "Use Package for Quest3"), NSLOCTEXT("OculusXRCompatibilityRules", "UsePackageForQuest_Description", "Meta Quest3 must be added to \"Supported Meta Quest Devices\"."), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical, ESetupRulePlatform::MetaQuest_3) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FEnableFullscreenRule final : public ISetupRule { public: FEnableFullscreenRule() : ISetupRule( "Compatibility_EnableFullscreen", NSLOCTEXT("OculusXRCompatibilityRules", "EnableFullscreen_DisplayName", "Enable Fullscreen"), NSLOCTEXT("OculusXRCompatibilityRules", "EnableFullscreen_Description", "Android fullscreen must be enabled for VR"), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Warning, MetaQuest_All) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FEnableStartInVRRule final : public ISetupRule { public: FEnableStartInVRRule() : ISetupRule( "Compatibility_EnableStartInVR", NSLOCTEXT("OculusXRCompatibilityRules", "EnableStartInVR_DisplayName", "Enable Start in VR"), NSLOCTEXT("OculusXRCompatibilityRules", "EnableStartInVR_Description", "Enable the \"Start in VR\" setting to ensure your app starts in VR. (You can also ignore this and pass -vr at the command line"), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Warning) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; class FDisableTouchInterfaceRule final : public ISetupRule { public: FDisableTouchInterfaceRule() : ISetupRule( "Compatibility_DisableTouchInterface", NSLOCTEXT("OculusXRCompatibilityRules", "DisableTouchInterface_DisplayName", "Disable Touch Interface"), NSLOCTEXT("OculusXRCompatibilityRules", "DisableTouchInterface_Description", "Touch interface will interfere with correct VR input behavior"), ESetupRuleCategory::Compatibility, ESetupRuleSeverity::Critical) {} virtual bool IsApplied() const override; protected: virtual void ApplyImpl(bool& OutShouldRestartEditor) override; }; inline TArray CompatibilityRules_Table{ MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared(), MakeShared() }; } // namespace OculusXRCompatibilityRules