Concept: Mode Selection & Overrides
Two mechanisms decide the active mode. Understanding their precedence avoids surprises when several systems want the camera.
Precedence (highest first)
| Source | Mechanism | Use for |
|---|---|---|
| Override stack | PushCameraMode(Class, OwnerTag) / PopCameraMode(OwnerTag) | Event-driven takeovers (aim, lock-on, cutscene). Most-recently-pushed wins (LIFO). |
| Per-tick selection | Determine Camera Mode event (default = DetermineCameraModeDelegate) | The base mode computed from state when no override is active. |
Each override is keyed by an owner tag so independent systems never clobber each other: re-pushing a tag updates it in place, popping a tag removes only that entry. Lock-on, for instance, pushes with its own tag and pops on release - restoring whatever was underneath.
Blueprint vs C++ selection
Overrides are fully Blueprint- and C++-callable. Per-tick selection is the
Determine Camera Mode BlueprintNativeEvent (override in a component subclass) whose default runs the C++ DetermineCameraModeDelegate. A return-value delegate can't be a Blueprint-assignable (multicast) delegate, which is why the event wraps it.