# 76 — BPC_LoadingScreen ## Blueprint Spec — UE 5.5–5.7 --- ### Parent Class `ActorComponent` ### Dependencies - [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) — Load state during transitions - [`BPC_PerformanceScaler`](../10-adaptive/68_BPC_PerformanceScaler.md) — Quality level for loading assets - [`WBP_LoadingScreen`](../06-ui/46_WBP_LoadingScreen.md) — UI widget (Phase 5) - [`FL_LevelStreaming`](../01-core/07_FL_LevelStreaming.md) — Level loading utilities (Phase 0) - [`DA_LoadingTips`](../12-content/79_DA_LoadingTips.md) — Tip data assets (Phase 12) ### Purpose Manages loading screen display and behavior during level transitions, save/load operations, and streaming scenarios. Controls visibility, progress feedback, tip rotation, background presentation, and minimum display duration. Supports seamless transitions with fade effects and asynchronous loading state tracking. ### Enums **ELoadingScreenType** | Value | Description | |-------|-------------| | LevelTransition | Full level load | | SaveLoad | Save/load operation | | Streaming | Sub-level streaming | | Boot | Initial game load | | Quick | Fast travel | **ELoadingScreenState** | Value | Description | |-------|-------------| | Inactive | No loading active | | FadingIn | Fade to black | | Visible | Loading displayed | | FadingOut | Fade from black | | Complete | Load done, cleanup | ### Structs **FLoadingScreenConfig** | Field | Type | Description | |-------|------|-------------| | Type | ELoadingScreenType | What triggered this | | bShowTips | Bool | Rotate loading tips | | bShowProgress | Bool | Show progress bar | | bUseBackgroundImage | Bool | Static or image | | MinDisplayTime | Float | Minimum seconds shown | | FadeInDuration | Float | Fade to black time | | FadeOutDuration | Float | Fade from black time | | BackgroundImages | TArray\ | Optional backgrounds | | bAllowSkipping | Bool | Skip after load complete | ### Variables | Name | Type | Description | |------|------|-------------| | `CurrentState` | ELoadingScreenState | Current loading state | | `CurrentConfig` | FLoadingScreenConfig | Active configuration | | `LoadingScreenWidget` | WBP_LoadingScreen | Widget reference | | `LoadStartTime` | Float | When load began | | `bIsTransitioning` | Bool | Fade in progress | | `RemainingTips` | TArray\ | Unshown tips pool | | `BackgroundIndex` | Int32 | Current background | | `bLoadingComplete` | Bool | Load finished flag | ### Functions | Name | Inputs | Outputs | Description | |------|--------|---------|-------------| | `ShowLoadingScreen` | Type: ELoadingScreenType, Config: FLoadingScreenConfig | — | Start loading display | | `HideLoadingScreen` | — | — | End loading display | | `UpdateLoadingProgress` | Progress: Float, StatusText: FText | — | Update progress bar | | `SetLoadingMessage` | Message: FText | — | Change message text | | `GetNextTip` | — | FText | Get random tip | | `GetNextBackground` | — | UTexture2D | Cycle backgrounds | | `SetBootConfiguration` | — | — | Configure for initial load | | `SetLevelTransitionConfig` | LevelName: FName | — | Configure for level load | | `HandleFadeInComplete` | — | — | Fade in finished | | `HandleFadeOutComplete` | — | — | Fade out finished | | `ForceCompleteLoading` | — | — | Skip remaining time | | `ProcessPendingLoading` | — | — | Handle load queue | | `LogLoadingComplete` | LoadTime: Float | — | Log load duration | ### Blueprint Flow ``` [ShowLoadingScreen] └─► If bIsTransitioning: return (queue if needed) └─► Set CurrentConfig = Config └─► LoadStartTime = Current Time └─► FadeIn: Create WBP_LoadingScreen Add to viewport (topmost Z-order) Play fade in animation (FadeInDuration) On anim complete: CurrentState = Visible bIsTransitioning = false └─► If Type == Boot: Show game logo, company logo (fade sequence) └─► Start rotating tips timer (every 8 seconds): GetNextTip() -> Update loading message └─► If bUseBackgroundImage: Set static or rotating backgrounds [UpdateLoadingProgress] └─► If Not Visible: return └─► Clamp Progress 0–1 └─► WBP_LoadingScreen.UpdateProgress(Progress, StatusText) [HideLoadingScreen] └─► If Complete animation not playing && elapsed < MinDisplayTime: Delay until MinDisplayTime reached └─► CurrentState = FadingOut └─► bIsTransitioning = true └─► Play fade out animation (FadeOutDuration) └─► On anim complete: Remove WBP_LoadingScreen from viewport CurrentState = Inactive bIsTransitioning = false LogLoadingComplete(ElapsedTime) Broadcast OnLoadingComplete() [GetNextTip] └─► If RemainingTips is empty: Refill from DA_LoadingTips └─► Remove random tip from RemainingTips └─► Return tip text [Level Transition Flow] └─► Level requested └─► ShowLoadingScreen(LevelTransition) └─► Asynchronous level loading: Bind to load progress delegate UpdateLoadingProgress(Progress, "Loading...") └─► Level fully loaded: Set bLoadingComplete = true HideLoadingScreen() ``` ### Event Dispatchers | Name | Payload | Description | |------|---------|-------------| | `OnLoadingStarted` | Type: ELoadingScreenType | Load began | | `OnLoadingComplete` | — | Load finished, fade out | ### Communications With | Target | Method | Why | |--------|--------|-----| | [`WBP_LoadingScreen`](../06-ui/46_WBP_LoadingScreen.md) | Widget reference | Display control | | [`FL_LevelStreaming`](../01-core/07_FL_LevelStreaming.md) | Direct call | Level load progress | | [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) | Direct call | Save/load operations | | [`BPC_PerformanceScaler`](../10-adaptive/68_BPC_PerformanceScaler.md) | Direct call | Quality during load | | [`DA_LoadingTips`](../12-content/79_DA_LoadingTips.md) | Data asset | Tip content | ### Reuse Notes - Config-driven for different loading contexts (boot, level, save) - Tip rotation prevents repetition during long loads - MinDisplayTime prevents flash-loading on fast systems - Background cycling adds visual variety - Fade in/out duration configurable per context - Asynchronous progress bound to actual load completion - Compatible with both synchronous and async level loading