add blueprints

This commit is contained in:
Lefteris Notas
2026-05-19 13:22:27 +03:00
parent f71bc678b2
commit 411edea8ce
138 changed files with 23330 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
# 41 — BPC_DialogueChoiceSystem
## Blueprint Spec — UE 5.55.7
---
### Parent Class
`ActorComponent`
### Dependencies
- [`BPC_NarrativeStateSystem`](58_BPC_NarrativeStateSystem.md)
- [`BPC_DialoguePlaybackSystem`](40_BPC_DialoguePlaybackSystem.md)
- [`WBP_DialogueChoiceDisplay`](../06-ui/46_WBP_DialogueChoiceDisplay.md)
- [`DA_DialogueSequence`](48_DA_NarrativeDataAssets.md)
### Purpose
Presents branching dialogue choices to the player and routes the selected response back to the narrative system. Manages choice availability based on narrative flags and time limits.
### Responsibilities
- Receive choice set from dialogue flow (via dispatcher from `BPC_DialoguePlaybackSystem`)
- Filter choices by required flags (only show choices player qualifies for)
- Display choices via `WBP_DialogueChoiceDisplay`
- Apply time limit if configured (auto-select default on expiry)
- Route selected choice tag to `BPC_NarrativeStateSystem`
- Trigger consequence dialogue branches by returning next sequence tag
### Does NOT Handle
- Playing dialogue lines (that is `BPC_DialoguePlaybackSystem`)
- Evaluating narrative consequences beyond setting choice flag (that is `BPC_BranchingConsequenceSystem`)
- UI visual styling (that is `WBP_DialogueChoiceDisplay`)
### Variables
| Name | Type | Description |
|------|------|-------------|
| `CurrentChoices` | Array of S_DialogueChoice | Available options for active choice |
| `DefaultChoiceIndex` | Integer | Auto-selected if timer expires |
| `ChoiceTimeLimit` | Float | Seconds before auto-select (0 = no limit) |
| `ChoiceTimer` | TimerHandle | Countdown timer |
| `bChoiceActive` | Bool | Player is currently choosing |
| `TimeRemaining` | Float | Remaining time for UI display |
### Structs
| Struct | Fields | Description |
|--------|--------|-------------|
| `S_DialogueChoice` | ChoiceText: FText, ResultFlagTag: GameplayTag, NextSequenceTag: GameplayTag, RequiredFlagTag: GameplayTag, bIsHidden: Bool, Priority: Integer, FlavorText: FText (tooltip/thought) | One choice option |
### Functions / Events
| Name | Inputs | Outputs | Description |
|------|--------|---------|-------------|
| `PresentChoices` | Choices: Array of S_DialogueChoice, TimeLimit: Float | — | Opens choice UI and starts timer |
| `SelectChoice` | ChoiceIndex: Integer | — | Player or system selects a choice |
| `GetValidChoices` | Choices: Array of S_DialogueChoice | Array of S_DialogueChoice | Filters choices by RequiredFlagTag against narrative state |
| `HasValidChoices` | Choices: Array | Bool | At least one choice available? |
| `OnChoiceTimedOut` | — | — | Default choice auto-selected |
| `CancelChoice` | — | — | Exits choice without selecting |
| `ProcessSelectedChoice` | Choice: S_DialogueChoice | GameplayTag (NextSequenceTag) | Sets narrative flag and returns next sequence |
| `IsChoiceActive` | — | Bool | Query |
### Event Dispatchers
| Name | Parameters | Fired When |
|------|-----------|-----------|
| `OnChoicesPresented` | Choices: Array of S_DialogueChoice | Choice UI opens |
| `OnChoiceSelected` | SelectedChoice: S_DialogueChoice, ChoiceIndex: Integer | Player makes selection |
| `OnChoiceTimedOut` | DefaultChoiceIndex: Integer | Timer expired |
| `OnChoiceCancelled` | — | Choice dismissed without selection |
| `OnChoiceCompleted` | NextSequenceTag: GameplayTag | Choice processed, ready for next dialogue |
### Blueprint Flow
```
[PresentChoices called]
└─► Call GetValidChoices (filter by narrative flags)
└─► If no valid choices → skip (choose default or cancel)
└─► Set CurrentChoices to valid set
└─► Set bChoiceActive = true
└─► Broadcast OnChoicesPresented to WBP_DialogueChoiceDisplay
└─► If TimeLimit > 0 → start ChoiceTimer
[SelectChoice called]
└─► Validate ChoiceIndex is in range
└─► Get selected S_DialogueChoice
└─► Clear ChoiceTimer
└─► Broadcast OnChoiceSelected
└─► Call ProcessSelectedChoice
[ProcessSelectedChoice]
└─► If ResultFlagTag is valid → BPC_NarrativeStateSystem.SetFlag(ResultFlagTag)
└─► Set bChoiceActive = false
└─► Broadcast OnChoiceCompleted with NextSequenceTag
└─► Hand NextSequenceTag back to BPC_DialoguePlaybackSystem
```
### Communications With
| Target System | Method | Why |
|---------------|--------|-----|
| [`BPC_NarrativeStateSystem`](58_BPC_NarrativeStateSystem.md) | Direct | Set choice flag, check required flags |
| [`BPC_DialoguePlaybackSystem`](40_BPC_DialoguePlaybackSystem.md) | Dispatcher (receives) + Direct (returns) | Receives choice points, returns next sequence |
| [`WBP_DialogueChoiceDisplay`](../06-ui/46_WBP_DialogueChoiceDisplay.md) | Dispatcher | Opens/closes choice UI |
| [`BPC_BranchingConsequenceSystem`](42_BPC_BranchingConsequenceSystem.md) | Dispatcher | Choice flag changes trigger consequence evaluation |
### Reuse Notes
Choice filtering by RequiredFlagTag allows context-sensitive dialogue without branching logic in the system. Choices can be hidden (e.g., secret dialogue options only appear if player has a specific lore unlock). The system handles all choice patterns: timed, untimed, locked, hidden, and priority-sorted.