How-To: React to Loading Screen Events

Goal: run logic when the loading screen shows or hides (pause music, mute input handling, start/stop a showcase) - event-driven, instead of polling GetLoadingScreenDisplayStatus.

Prerequisites
You can reach the manager (How-To: Get the Building Blocks step 1). Bind from something that outlives level travel - a GameInstance subclass, a game-instance subsystem, or a persistent actor that re-binds on spawn. The loading screen widget itself does not need events: it reads the pure getters in Construct.

1. Bind the visibility event

Fires with bIsVisible = true just before the widget is added, and false right after it is removed.

Get CrimsonLoadingScreenManager -> drag off -> Bind Event to On Loading Screen Visibility Changed -> connect the red delegate pin to a Custom Event with a bool Is Visible input. Same pattern for Bind Event to On Loading Screen Content Ready (its Custom Event gets a Character Info input).

Verify
Travel between maps: your handler fires once with true and once with false per load.

2. Bind the content-ready event

On Loading Screen Content Ready fires just before the screen becomes visible and hands you the roster for this load - an array of FCrimsonLoadingCharacterInfo, the local player at index 0 followed by any registered companions. It is the hook for preparing showcase content that is not an actor in the world; actors implement ICrimsonLoadingCinematicInterface instead (see How-To: Live Render Target Preview step 5). An empty array means nothing was registered or this load suppresses the showcase.

cpp
Manager->OnLoadingScreenContentReady.AddUObject(this, &UMyGameInstance::HandleContentReady);
void UMyGameInstance::HandleContentReady(const TArray<FCrimsonLoadingCharacterInfo>& Roster)
{
// Empty when nothing is registered, or when this load suppresses the showcase.
// Roster[0] is the local player; the rest are registered companions.
}
Blueprint and C++ get separate delegates
C++ binds the native OnLoadingScreenVisibilityChanged / OnLoadingScreenContentReady; Blueprint binds the assignable mirrors (shown as On Loading Screen Visibility Changed / On Loading Screen Content Ready). Both fire at the same moments with the same payloads.
Event order and the engine's own loading screen
Order on show: content-ready fires first, then visibility-changed(true), then the widget is created. While the engine's startup preload screen is still active, the plugin does not create a widget - content-ready still fires, visibility-changed does not.

See also

  • Concept: Lifecycle & Show Conditions - the exact show/hide sequences these events sit in.
  • How-To: Show Multiple Characters - On Showcase Roster Changed, the event for players who register late.
  • How-To: Live Render Target Preview - On Showcase Live Changed, and the actor-side director alternative.