157 lines
5.7 KiB
Markdown
157 lines
5.7 KiB
Markdown
# 78 — WBP_SplashScreen
|
||
|
||
## Blueprint Spec — UE 5.5–5.7
|
||
|
||
---
|
||
|
||
### Parent Class
|
||
`UserWidget`
|
||
|
||
### Dependencies
|
||
- [`BPC_LoadingScreen`](../11-polish/76_BPC_LoadingScreen.md) — Transition to loading
|
||
- [`BPC_AudioManager`](../10-adaptive/66_BPC_AudioManager.md) — Splash audio
|
||
- [`BPC_InputManager`](../02-player/13_BPC_InputManager.md) — Skip input
|
||
- [`GI_GameManager`](../01-core/05_GI_GameManager.md) — Boot flow control (Phase 0)
|
||
- [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) — Check for existing save
|
||
|
||
### Purpose
|
||
Introductory splash screen sequence shown on game boot before the main menu or loading screen. Displays company logos, game title, engine badges, and legal notices in a timed sequential presentation. Supports skip-to-main-menu via input, accessibility features (slow mode), and conditional branching based on save state.
|
||
|
||
### Enums
|
||
|
||
**ESplashElementType**
|
||
|
||
| Value | Description |
|
||
|-------|-------------|
|
||
| CompanyLogo | Developer/publisher logo |
|
||
| EngineLogo | UE5 logo, power badges |
|
||
| GameTitle | Full game title card |
|
||
| LegalNotice | Copyright, ratings info |
|
||
| Warning | Health/safety warnings |
|
||
| AccessibilityNotice | Accessibility info |
|
||
|
||
### Structs
|
||
|
||
**FSplashElement**
|
||
|
||
| Field | Type | Description |
|
||
|-------|------|-------------|
|
||
| ElementType | ESplashElementType | What to show |
|
||
| DisplayDuration | Float | Seconds to display |
|
||
| FadeInTime | Float | Fade in duration |
|
||
| FadeOutTime | Float | Fade out duration |
|
||
| Texture | UTexture2D | Logo/image to show |
|
||
| TitleText | FText | Optional text overlay |
|
||
| SubtitleText | FText | Optional subtitle |
|
||
| bCanSkip | Bool | Allow skip this element |
|
||
|
||
### Variables
|
||
|
||
| Name | Type | Description |
|
||
|------|------|-------------|
|
||
| `SplashSequence` | TArray\<FSplashElement\> | Ordered splash elements |
|
||
| `CurrentElementIndex` | Int32 | Active element |
|
||
| `bIsPlaying` | Bool | Sequence running |
|
||
| `bSkipped` | Bool | User skipped |
|
||
| `bSlowMode` | Bool | Accessibility slow mode |
|
||
| `CurrentTimer` | Float | Element timer |
|
||
| `bTransitionComplete` | Bool | Sequence done |
|
||
|
||
### Functions
|
||
|
||
| Name | Inputs | Outputs | Description |
|
||
|------|--------|---------|-------------|
|
||
| `PlaySplashSequence` | — | — | Start boot splash |
|
||
| `ShowElement` | Element: FSplashElement | — | Display single element |
|
||
| `AdvanceToNext` | — | — | Move to next element |
|
||
| `SkipSplash` | — | — | End sequence early |
|
||
| `FadeInElement` | Duration: Float | — | Fade animation |
|
||
| `FadeOutElement` | Duration: Float | — | Fade animation |
|
||
| `HandleInput` | Action: FName | — | Skip/confirm binding |
|
||
| `OnSequenceComplete` | — | — | Splash finished |
|
||
| `SetSlowMode` | bEnabled: Bool | — | Accessibility mode |
|
||
| `CheckSaveState` | — | Bool | Has existing save |
|
||
|
||
### Blueprint Flow
|
||
|
||
```
|
||
[PlaySplashSequence]
|
||
└─► Create splash sequence from configuration:
|
||
CompanyLogo (3s display, 1s fade in/out)
|
||
EngineLogo (2s display, 0.5s fade in/out)
|
||
GameTitle (4s display, 1.5s fade in/out)
|
||
LegalNotice (3s display, 1s fade in/out)
|
||
└─► bIsPlaying = true
|
||
└─► CurrentElementIndex = 0
|
||
└─► ShowElement(SplashSequence[0])
|
||
└─► Bind input actions:
|
||
BPC_InputManager -> "Confirm" -> SkipSplash()
|
||
BPC_InputManager -> "Pause" -> SkipSplash()
|
||
|
||
[ShowElement]
|
||
└─► Get Element = SplashSequence[CurrentElementIndex]
|
||
└─► Set visibility for appropriate canvas panel
|
||
└─► If Element.Type == CompanyLogo:
|
||
Set logo image, center
|
||
└─► Else if Element.Type == GameTitle:
|
||
Set title text, subtitle, large text block
|
||
└─► Else if Element.Type == LegalNotice:
|
||
Set legal text, small, bottom-aligned
|
||
└─► Play FadeInElement(Element.FadeInTime)
|
||
└─► Timer = 0
|
||
└─► Tick:
|
||
Timer += DeltaTime
|
||
If Timer >= Element.DisplayDuration:
|
||
AdvanceToNext()
|
||
|
||
[AdvanceToNext]
|
||
└─► Play FadeOutElement(CurrentElement.FadeOutTime)
|
||
└─► On fade complete:
|
||
Hide current element
|
||
CurrentElementIndex++
|
||
If CurrentElementIndex >= SplashSequence.Length:
|
||
OnSequenceComplete()
|
||
Else:
|
||
ShowElement(SplashSequence[CurrentElementIndex])
|
||
|
||
[SkipSplash]
|
||
└─► If bSkipped: return
|
||
└─► bSkipped = true
|
||
└─► Fade out current element (fast, 0.2 seconds)
|
||
└─► Clear all elements
|
||
└─► OnSequenceComplete()
|
||
|
||
[OnSequenceComplete]
|
||
└─► bIsPlaying = false
|
||
└─► CheckSaveState():
|
||
If save exists: Load main menu
|
||
If no save: Show main menu (new game focus)
|
||
If first boot ever: Show language/accessibility prompt
|
||
└─► Broadcast OnSplashComplete()
|
||
└─► Remove self from viewport
|
||
```
|
||
|
||
### Event Dispatchers
|
||
|
||
| Name | Payload | Description |
|
||
|------|---------|-------------|
|
||
| `OnSplashComplete` | bSkipped: Bool | Splash sequence done |
|
||
|
||
### Communications With
|
||
|
||
| Target | Method | Why |
|
||
|--------|--------|-----|
|
||
| [`BPC_LoadingScreen`](../11-polish/76_BPC_LoadingScreen.md) | Direct call | Load main menu |
|
||
| [`BPC_AudioManager`](../10-adaptive/66_BPC_AudioManager.md) | Direct call | Splash audio |
|
||
| [`BPC_InputManager`](../02-player/13_BPC_InputManager.md) | Event binding | Skip input |
|
||
| [`GI_GameManager`](../01-core/05_GI_GameManager.md) | Direct call | Boot flow |
|
||
| [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) | Direct call | Save detection |
|
||
|
||
### Reuse Notes
|
||
- Fully configurable splash sequence via data
|
||
- Supports accessibility slow mode (doubles all durations)
|
||
- Skip input at any point
|
||
- First-boot branching for language/accessibility setup
|
||
- Handles both new game and existing save flows
|
||
- Legal notice compliance baked into sequence
|
||
- Can be reused for "press any key" or demo mode splash screens |