106 lines
4.2 KiB
Markdown
106 lines
4.2 KiB
Markdown
# WBP_JournalDocumentViewer — Widget (Document and Journal Viewer)
|
|
|
|
**File:** [`Content/Framework/UI/WBP_JournalDocumentViewer`](Content/Framework/UI/WBP_JournalDocumentViewer.uasset)
|
|
**Parent Class:** `UUserWidget`
|
|
**Dependencies:** [`BPC_DocumentArchiveSystem`](../04-inventory/BPC_DocumentArchiveSystem.md), [`BPC_JournalSystem`](../04-inventory/BPC_JournalSystem.md)
|
|
|
|
**Purpose:** Displays collected documents, notes, and the player journal. Supports text scrolling, page turns, and image plates. Read-only presentation — never modifies game state.
|
|
|
|
---
|
|
|
|
## Variables
|
|
|
|
| Name | Type | Description |
|
|
|------|------|-------------|
|
|
| `ActiveDocument` | S_DocumentEntry | Currently displayed document |
|
|
| `DocumentList` | Array of S_DocumentEntry | All collected documents for sidebar navigation |
|
|
| `ActiveJournalEntry` | S_JournalEntry | Currently displayed journal entry |
|
|
| `JournalEntryList` | Array of S_JournalEntry | All journal entries for sidebar navigation |
|
|
| `bShowPageTurnAnim` | Bool | Enable page turn animation |
|
|
| `FontStyle` | E_DocumentFontStyle | Handwritten, Typewritten, Digital |
|
|
| `ViewMode` | E_DocumentViewMode | Document, Journal, or Combined |
|
|
| `DocumentTitleText` | TextBlock | Active document title |
|
|
| `DocumentBodyText` | RichTextBlock | Scrollable document body |
|
|
| `DocumentImage` | Image | Optional plate/figure image |
|
|
| `SidebarList` | ListView | Navigation sidebar |
|
|
|
|
## Enums
|
|
|
|
```cpp
|
|
E_DocumentFontStyle
|
|
{
|
|
Handwritten,
|
|
Typewritten,
|
|
Digital,
|
|
BloodScrawled
|
|
}
|
|
|
|
E_DocumentViewMode
|
|
{
|
|
DocumentsOnly,
|
|
JournalOnly,
|
|
CombinedTimeline
|
|
}
|
|
```
|
|
|
|
## Functions / Events
|
|
|
|
| Name | Inputs | Outputs | What it does |
|
|
|------|--------|---------|--------------|
|
|
| `OpenDocument` | DocumentTag: GameplayTag | — | Loads document from archive, displays with font style |
|
|
| `CloseDocument` | — | — | Returns to document list |
|
|
| `OpenJournal` | EntryTag: GameplayTag | — | Loads journal entry, displays |
|
|
| `NextDocument` | — | — | Selects next document in list |
|
|
| `PreviousDocument` | — | — | Selects previous document in list |
|
|
| `NextPage` | — | — | Scrolls body text to next page |
|
|
| `PreviousPage` | — | — | Scrolls body text to previous page |
|
|
| `SetViewMode` | Mode: E_DocumentViewMode | — | Switches between document/journal/combined |
|
|
| `MarkAsRead` | DocumentTag: GameplayTag | — | Sets bIsRead on document entry |
|
|
| `RefreshList` | — | — | Rebuilds sidebar from archive and journal systems |
|
|
| `SortByChapter` | — | — | Sorts documents/entries by discovery chapter |
|
|
| `SortByType` | — | — | Sorts documents by type, entries by date |
|
|
|
|
## Event Dispatchers
|
|
|
|
| Name | Parameters | Fired when |
|
|
|------|-----------|-----------|
|
|
| `OnDocumentOpened` | DocumentTag: GameplayTag | Player opens a document |
|
|
| `OnDocumentClosed` | — | Player closes document viewer |
|
|
| `OnDocumentRead` | DocumentTag: GameplayTag | Document marked as read |
|
|
|
|
## Blueprint Flow Diagram
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
A[Player opens Journal/Documents] --> B[ViewMode = CombinedTimeline]
|
|
B --> C[RefreshList from BPC_DocumentArchiveSystem + BPC_JournalSystem]
|
|
C --> D[Populate SidebarList]
|
|
D --> E[Wait for selection]
|
|
|
|
E --> F{Item selected?}
|
|
F -->|Document| G[OpenDocument with DocumentTag]
|
|
F -->|Journal Entry| H[OpenJournal with EntryTag]
|
|
|
|
G --> I[Set ActiveDocument = entry from archive]
|
|
I --> J[Display title, body text, optional image]
|
|
I --> K[MarkAsRead]
|
|
|
|
H --> L[Set ActiveJournalEntry]
|
|
L --> M[Display heading, body, timestamp]
|
|
```
|
|
|
|
## Communications With
|
|
|
|
| Target System | Method | Why |
|
|
|---------------|--------|-----|
|
|
| `BPC_DocumentArchiveSystem` | Direct read | Get all found documents |
|
|
| `BPC_JournalSystem` | Direct read | Get all journal entries |
|
|
| `WBP_InventoryMenu` | Parent navigation | Open from inventory tab |
|
|
| `SS_UIManager` | Push/Pop | Menu stack management |
|
|
|
|
## Reuse Notes
|
|
|
|
- The `E_DocumentFontStyle` enum lets each project set the visual tone per document type
|
|
- `ViewMode` can be restricted to DocumentsOnly for games without a journal
|
|
- The page-turn anim is optional; disable for performance or minimalist UI
|
|
- RichTextBlock supports markup — use for emphasis, different speaker colours, or lore highlight |