# WBP_ObjectiveDisplay — Widget (Objective Display)

**Parent:** `UUserWidget`
**Used by:** `WBP_HUDController`, `BPC_ObjectiveSystem`
**Depends On:** `BPC_ObjectiveSystem`

---

### Purpose
Displays current objectives as an overlay on the HUD. Shows active objective text, objective markers, and progress indicators. Updates in real-time as objectives are added, completed, or updated.

### Variables

| Name | Type | Description |
|------|------|-------------|
| `ObjectiveText` | `TextBlock` | Current objective description |
| `ObjectiveMarker` | `Image` | Directional indicator if objective is off-screen |
| `ProgressBar` | `ProgressBar` | Objective progress (0-1) if applicable |
| `AnimFadeIn` | `WidgetAnimation` | Fade in on objective change |
| `AnimFadeOut` | `WidgetAnimation` | Fade out when objective completes |
| `AnimObjectiveComplete` | `WidgetAnimation` | Completion flourish |
| `ObjectiveQueue` | Array of `S_ObjectiveData` | Queued objectives for sequential display |

### Structs

```cpp
S_ObjectiveData
{
    FText ObjectiveText;
    FGameplayTag ObjectiveTag;
    float Progress;
    bool bIsComplete;
    FVector WorldLocation; // For off-screen marker
}
```

### Functions

| Name | Inputs | Outputs | Description |
|------|--------|---------|-------------|
| `OnConstruct` | — | — | Bind to BPC_ObjectiveSystem dispatchers |
| `OnObjectiveActivated` | Objective: `S_ObjectiveData` | — | Show objective with fade-in animation |
| `OnObjectiveUpdated` | Objective: `S_ObjectiveData` | — | Update progress bar and text |
| `OnObjectiveCompleted` | ObjectiveTag: GameplayTag | — | Play completion animation, then fade out |
| `UpdateOffScreenMarker` | WorldLocation: FVector | — | Calculate screen position, rotate marker |
| `ClearAllObjectives` | — | — | Clear all active objective displays |

### Event Dispatchers

| Name | Parameters | Fired When |
|------|-----------|------------|
| `OnObjectiveDisplayed` | ObjectiveText: FText | New objective shown |
| `OnObjectiveCleared` | — | All objectives cleared |

### Communications With

| Target System | Method | Why |
|--------------|--------|-----|
| [`BPC_ObjectiveSystem`](../07-narrative/39_BPC_ObjectiveSystem.md) | Dispatcher | Receive objective changes |
| [`WBP_HUDController`](WBP_HUDController.md) | Parent reference | Coordinate visibility with other HUD elements |

### Blueprint Flow

```
[OnObjectiveActivated]
  └─► Set ObjectiveText = Objective.ObjectiveText
  └─► Set ProgressBar visibility based on objective type
  └─► If objective has world location → Show ObjectiveMarker
  └─► Play AnimFadeIn
  └─► Broadcast OnObjectiveDisplayed

[OnObjectiveCompleted]
  └─► Play AnimObjectiveComplete
  └─► Delay 2.0 seconds
  └─► Play AnimFadeOut
  └─► Show next queued objective if any

[UpdateOffScreenMarker]
  └─► Project world location to screen
  └─► If behind camera → place at screen edge, rotate indicator
  └─► Update ObjectiveMarker position + rotation
```

### Reuse Notes
- Created as part of Clean Slate refactoring (Master Section 6.6)
- Follows TEMPLATE.md format for all new blueprint specs