// Copyright Epic Games, Inc. All Rights Reserved. #include "ReflexBlueprint.h" #include "ReflexLatencyMarkers.h" #include "ReflexMaxTickRateHandler.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(ReflexBlueprint) UReflexBlueprintLibrary::UReflexBlueprintLibrary(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } bool UReflexBlueprintLibrary::GetReflexAvailable() { bool bIsMaxTickRateHandlerEnabled = false; TArray MaxTickRateHandlerModules = IModularFeatures::Get() .GetModularFeatureImplementations(IMaxTickRateHandlerModule::GetModularFeatureName()); for (IMaxTickRateHandlerModule* MaxTickRateHandler : MaxTickRateHandlerModules) { bIsMaxTickRateHandlerEnabled = bIsMaxTickRateHandlerEnabled || MaxTickRateHandler->GetAvailable(); } bool bIsLatencyMarkerModuleEnabled = false; TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { bIsLatencyMarkerModuleEnabled = bIsLatencyMarkerModuleEnabled || LatencyMarkerModule->GetAvailable(); } return bIsMaxTickRateHandlerEnabled && bIsLatencyMarkerModuleEnabled; } void UReflexBlueprintLibrary::SetReflexMode(const EReflexMode Mode) { TArray MaxTickRateHandlerModules = IModularFeatures::Get() .GetModularFeatureImplementations(IMaxTickRateHandlerModule::GetModularFeatureName()); for (IMaxTickRateHandlerModule* MaxTickRateHandler : MaxTickRateHandlerModules) { MaxTickRateHandler->SetEnabled(Mode!=EReflexMode::Disabled); MaxTickRateHandler->SetFlags(static_cast(Mode)); } TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { LatencyMarkerModule->SetEnabled(true); } } EReflexMode UReflexBlueprintLibrary::GetReflexMode() { TArray MaxTickRateHandlerModules = IModularFeatures::Get() .GetModularFeatureImplementations(IMaxTickRateHandlerModule::GetModularFeatureName()); for (IMaxTickRateHandlerModule* MaxTickRateHandler : MaxTickRateHandlerModules) { return static_cast(MaxTickRateHandler->GetFlags()); } return EReflexMode::Disabled; } void UReflexBlueprintLibrary::SetFlashIndicatorEnabled(const bool bEnabled) { TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { LatencyMarkerModule->SetFlashIndicatorEnabled(bEnabled); } } bool UReflexBlueprintLibrary::GetFlashIndicatorEnabled() { TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { return LatencyMarkerModule->GetFlashIndicatorEnabled(); } return false; } float UReflexBlueprintLibrary::GetGameToRenderLatencyInMs() { TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { const float Latency = LatencyMarkerModule->GetTotalLatencyInMs(); if (Latency > 0.f) return Latency; } return 0.f; } float UReflexBlueprintLibrary::GetGameLatencyInMs() { TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { const float Latency = LatencyMarkerModule->GetGameLatencyInMs(); if (Latency > 0.f) return Latency; } return 0.f; } float UReflexBlueprintLibrary::GetRenderLatencyInMs() { TArray LatencyMarkerModules = IModularFeatures::Get() .GetModularFeatureImplementations(ILatencyMarkerModule::GetModularFeatureName()); for (ILatencyMarkerModule* LatencyMarkerModule : LatencyMarkerModules) { const float Latency = LatencyMarkerModule->GetRenderLatencyInMs(); if (Latency > 0.f) return Latency; } return 0.f; }