101 lines
2.3 KiB
C
101 lines
2.3 KiB
C
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "CoreMinimal.h"
|
||
|
#include "OculusXRSetupRule.h"
|
||
|
#include "Developer/LauncherServices/Public/ILauncher.h"
|
||
|
#include "Subsystems/EngineSubsystem.h"
|
||
|
#include "OculusXRRuleProcessorSubsystem.generated.h"
|
||
|
|
||
|
/**
|
||
|
* The rule processor handles registration and querying of rules
|
||
|
*/
|
||
|
UCLASS()
|
||
|
class OCULUSXRPROJECTSETUPTOOL_API UOculusXRRuleProcessorSubsystem final : public UEngineSubsystem
|
||
|
{
|
||
|
GENERATED_BODY()
|
||
|
|
||
|
public:
|
||
|
struct RuleStatus
|
||
|
{
|
||
|
unsigned PendingRequiredRulesCount = 0;
|
||
|
unsigned PendingRecommendedRulesCount = 0;
|
||
|
};
|
||
|
/**
|
||
|
* Initialize the subsystem. USubsystem override
|
||
|
*/
|
||
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||
|
|
||
|
/**
|
||
|
* De-initializes the subsystem. USubsystem override
|
||
|
*/
|
||
|
virtual void Deinitialize() override;
|
||
|
|
||
|
/**
|
||
|
* Register a rule
|
||
|
*
|
||
|
* @return true if successfully registered
|
||
|
*/
|
||
|
bool RegisterRule(const SetupRulePtr& Rule);
|
||
|
|
||
|
/**
|
||
|
* Unregister a rule
|
||
|
*
|
||
|
* @return true if successfully unregistered
|
||
|
*/
|
||
|
bool UnregisterRule(const SetupRulePtr& Rule);
|
||
|
|
||
|
/**
|
||
|
* Unregister all rules
|
||
|
*/
|
||
|
void UnregisterAllRules();
|
||
|
|
||
|
/**
|
||
|
* Fetch all rules
|
||
|
*/
|
||
|
const TSet<SetupRulePtr, FSetupRuleKeyFunc>& GetRules() const;
|
||
|
|
||
|
/**
|
||
|
* Fetch rule with given `Id`
|
||
|
*/
|
||
|
SetupRulePtr GetRule(const FName& Id) const;
|
||
|
|
||
|
/**
|
||
|
* Returns if there are dynamic lights in project
|
||
|
*/
|
||
|
bool DynamicLightsExistInProject() const;
|
||
|
|
||
|
void SendSummaryEvent();
|
||
|
|
||
|
void SendSummaryEvent(ESetupRulePlatform Platform) const;
|
||
|
/**
|
||
|
* Refresh state
|
||
|
*/
|
||
|
void Refresh();
|
||
|
|
||
|
/**
|
||
|
* Returns number of not applied critical and recommended rules
|
||
|
*/
|
||
|
RuleStatus UnAppliedRulesStatus(ESetupRulePlatform Platform) const;
|
||
|
|
||
|
private:
|
||
|
void PopulateDynamicLights();
|
||
|
void RegisterRules(const TArray<SetupRulePtr>& Rules);
|
||
|
|
||
|
//** A set containing all the registered rules
|
||
|
TSet<SetupRulePtr, FSetupRuleKeyFunc> Rules = {};
|
||
|
|
||
|
// Dynamic lights in project
|
||
|
TMap<FString, TWeakObjectPtr<ULightComponentBase>> DynamicLights;
|
||
|
|
||
|
// Launcher handles
|
||
|
FDelegateHandle LauncherCallbackHandle;
|
||
|
void OnLauncherCreated(ILauncherRef Launcher);
|
||
|
void OnLauncherWorkerStarted(ILauncherWorkerPtr LauncherWorker, ILauncherProfileRef Profile);
|
||
|
|
||
|
void OnPIEEnded(bool bIsSimulating);
|
||
|
|
||
|
TArray<SetupRulePtr> UnAppliedRulesForPlatform(ESetupRulePlatform Platform, const TSet<ESetupRuleSeverity>& Severities) const;
|
||
|
};
|