From 75ae7a10d682dda5d24dd01c2799842d6fe42ba5 Mon Sep 17 00:00:00 2001 From: Jamie Greunbaum Date: Fri, 21 Apr 2023 00:55:28 -0400 Subject: [PATCH] Apparently this code just never got pushed to the repository whenever I wrote it, and I don't really remember what it's supposed to do differently from before. --- .../Private/LoadingScreenManager.cpp | 18 +++++++++++++++++- .../Public/LoadingScreenManager.h | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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; };