diff --git a/Source/CommonLoadingScreen/Private/LoadingScreenManager.cpp b/Source/CommonLoadingScreen/Private/LoadingScreenManager.cpp index b65f6fc..ed299aa 100644 --- a/Source/CommonLoadingScreen/Private/LoadingScreenManager.cpp +++ b/Source/CommonLoadingScreen/Private/LoadingScreenManager.cpp @@ -146,7 +146,7 @@ bool ULoadingScreenManager::ShouldCreateSubsystem(UObject *Outer) const return !bIsServerWorld; } -class ULoadingScreenWidget *ULoadingScreenManager::ShowLoadingScreen() +ULoadingScreenWidget *ULoadingScreenManager::ShowLoadingScreen() { if (this->bCurrentlyShowingLoadingScreen) { @@ -202,6 +202,22 @@ class ULoadingScreenWidget *ULoadingScreenManager::ShowLoadingScreen() } void ULoadingScreenManager::HideLoadingScreen() +{ + const float HoldTime = GetDefault()->HoldLoadingScreenAdditionalSecs; + if (FMath::IsNearlyZero(HoldTime)) + { + this->HideLoadingScreen_Private(); + } + else + { + this->GetWorld()->GetTimerManager().SetTimer( + this->HideLoadingScreenTimerHandle, + this, &ULoadingScreenManager::HideLoadingScreen_Private, + HoldTime + ); + } +} +void ULoadingScreenManager::HideLoadingScreen_Private() { if (this->bCurrentlyShowingLoadingScreen) { diff --git a/Source/CommonLoadingScreen/Public/LoadingScreenManager.h b/Source/CommonLoadingScreen/Public/LoadingScreenManager.h index 0b8f38e..29738b3 100644 --- a/Source/CommonLoadingScreen/Public/LoadingScreenManager.h +++ b/Source/CommonLoadingScreen/Public/LoadingScreenManager.h @@ -46,6 +46,9 @@ public: FORCEINLINE FOnLoadingScreenVisibilityChangedDelegate &OnLoadingScreenVisibilityChangedDelegate() { return LoadingScreenVisibilityChanged; } private: + /** Actually hides the loading screen, either immediately or after a delay if necessary. */ + void HideLoadingScreen_Private(); + /** Removes the loading screen. The loading screen widget will be destroyed. */ void RemoveLoadingScreen(); @@ -90,4 +93,7 @@ private: /** True when the loading screen is currently being shown */ bool bCurrentlyShowingLoadingScreen = false; + + /** Handle for the timer that controls how much extra time to wait before fading the loading screen away */ + FTimerHandle HideLoadingScreenTimerHandle; };