Enhanced Input System Architecture
Problem Statement
The project has no input system specification despite 230+ cross-references to a non-existent BPC_InputManager across existing blueprint specs. UE5's Enhanced Input System must be architected into the framework using a centralized [SS_EnhancedInputManager](Game Instance Subsystem) that manages Input Mapping Context push/pop, priority, platform profiles, and input mode coordination with SS_UIManager.
Proposed Solution
Architecture Decision: Centralized Subsystem (Option A)
SS_EnhancedInputManager is a Game Instance Subsystem, matching the project's existing SS_UIManager, SS_SettingsSystem, and SS_SaveManager pattern. It manages all Input Mapping Contexts globally, while individual systems request context pushes via a clean API (function calls + dispatchers).
Context Priority Ladder
| Priority |
Context |
Trigger |
Overrides |
| 0 |
IMC_Default |
Persistent gameplay |
Nothing |
| 5 |
IMC_Hiding |
Enter hiding spot |
Movement, Interact |
| 10 |
IMC_WristwatchUI |
Open watch/inventory |
Movement, Look |
| 20 |
IMC_Inspection |
Pick up 3D item |
All below |
| 100 |
IMC_UI |
Pause/Settings/Journal |
Everything |
Higher priority = takes precedence. Multiple contexts can be active simultaneously.
Input Actions (IA_) Master Registry
Axis2D Inputs
| Action |
Value Type |
Used In |
Description |
IA_Move |
Axis2D |
IMC_Default |
W/A/S/D + Left Stick → locomotion |
IA_Look |
Axis2D |
IMC_Default |
Mouse XY + Right Stick → camera |
IA_Inspect_Rotate |
Axis2D |
IMC_Inspection |
Mouse/Right Stick → rotate item |
IA_UI_Navigate |
Axis2D |
IMC_WristwatchUI, IMC_UI |
D-Pad/Arrows → menu navigation |
IA_Hide_Look |
Axis2D |
IMC_Hiding |
Mouse/Right Stick → look while hidden |
Axis1D Inputs
| Action |
Value Type |
Used In |
Description |
IA_Inspect_Zoom |
Axis1D |
IMC_Inspection |
Scroll/LT-RT → zoom item |
IA_Hide_Peek |
Axis1D |
IMC_Hiding |
W/S → lean forward in hiding |
IA_QuickSlotScroll |
Axis1D |
IMC_Default |
Scroll wheel → cycle quick slots |
Digital (Bool) Inputs — Gameplay
| Action |
Used In |
PC Default |
Gamepad Default |
Description |
IA_Interact |
IMC_Default |
E / Left Click |
X / Square |
Pick up, hold for physics-drag |
IA_PrimaryAction |
IMC_Default |
LMB |
RT / R2 |
Fire weapon / Swing tool |
IA_SecondaryAction |
IMC_Default |
RMB |
LT / L2 |
ADS / Shield |
IA_Sprint |
IMC_Default |
L-Shift |
L3 |
Run (triggers stamina + stress) |
IA_Crouch |
IMC_Default |
C / L-Ctrl |
B / Circle |
Sneak / crawl |
IA_Vault_Climb |
IMC_Default |
Spacebar |
A / Cross |
Contextual parkour |
IA_Jump |
IMC_Default |
Spacebar |
A / Cross |
Basic jump (coexists with Vault via context) |
IA_Flashlight |
IMC_Default |
F |
D-Pad Up |
Toggle light |
IA_QuickHeal |
IMC_Default |
Q / H |
D-Pad Down |
Consume health item |
IA_Reload |
IMC_Default |
R |
Y / Triangle |
Reload weapon |
IA_OpenWatch |
IMC_Default |
Tab / I |
View / Touchpad |
Wristwatch UI |
IA_PauseMenu |
IMC_Default |
Esc / P |
Menu / Options |
Pause game |
IA_QuickSlot1–IA_QuickSlot8 |
IMC_Default |
1–8 |
None |
Direct quick slot selection |
Digital (Bool) Inputs — Context-Specific
| Action |
Used In |
PC Default |
Gamepad Default |
Description |
IA_Inspect_Flip |
IMC_Inspection |
F |
Y / Triangle |
Flip document |
IA_Cancel_Drop |
IMC_Inspection |
RMB / Esc |
B / Circle |
Exit inspection |
IA_UI_Select |
IMC_WristwatchUI, IMC_UI |
E / Enter |
A / Cross |
Confirm/equip |
IA_UI_Combine |
IMC_WristwatchUI |
C |
X / Square |
Item combination |
IA_UI_DropItem |
IMC_WristwatchUI |
X |
Y / Triangle |
Drop from inventory |
IA_CloseWatch |
IMC_WristwatchUI |
Tab / Esc |
B / Circle |
Lower arm |
IA_UI_Back |
IMC_UI |
Esc / Backspace |
B / Circle |
Back one menu level |
IA_Hide_HoldBreath |
IMC_Hiding |
Spacebar (Hold) |
LT+RT (Hold) |
Suppress breathing |
IA_Exit_Hide |
IMC_Hiding |
C / Esc |
B / Circle |
Leave hiding spot |
New Input Types Added (beyond user's original list)
| Action |
Value Type |
Used In |
Description |
Rationale |
IA_Jump |
Digital |
IMC_Default |
Separate from Vault for non-contextual jumps |
Prevents accidental climbing when player just wants to jump |
IA_QuickSlotScroll |
Axis1D |
IMC_Default |
Cycle through 8 quick slots |
Natural controller wheel support for inventory |
IA_QuickSlot1–IA_QuickSlot8 |
Digital |
IMC_Default |
Direct slot access (KB only) |
Quick weapon/item switching |
IA_UI_Back |
Digital |
IMC_UI |
Universal back navigation |
Separates "back" from "cancel" semantics |
IA_ToggleAccessibility |
Digital |
IMC_UI |
Toggle accessibility features mid-game |
Required by BPC_AccessibilitySettings |
IA_SkipCutscene |
Digital |
IMC_Default |
Hold to skip (contextual) |
Already referenced by BPC_CutsceneBridge |
File Structure
API Contracts
SS_EnhancedInputManager Interface
Enums
Event Dispatchers
| Dispatcher |
Payload |
Description |
OnContextPushed |
E_InputContext Context, int32 Priority |
Fired when a new context is activated |
OnContextPopped |
E_InputContext Context |
Fired when a context is removed |
OnInputModeChanged |
E_InputMode NewMode |
Syncs with SS_UIManager for cursor visibility |
OnKeyRebound |
FName ActionName, FKey NewKey |
Fired after rebinding for UI update |
OnPlatformChanged |
E_InputPlatform NewPlatform |
Fired on input device hot-swap |
Communication Matrix
| Source |
Target |
Method |
Data |
| SS_EnhancedInputManager |
UEnhancedInputLocalPlayerSubsystem |
Direct (UE5 API) |
Add/Remove Mapping Context |
| SS_EnhancedInputManager |
SS_UIManager |
Direct |
Input mode changes |
| SS_EnhancedInputManager |
SS_SettingsSystem |
Direct |
Key rebinding requests |
| SS_EnhancedInputManager |
WBP_InteractionPromptDisplay |
Dispatcher |
Current action key icons |
| BPC_InteractionDetector |
SS_EnhancedInputManager |
Function Call |
IsActionPressed for interact |
| BPC_FirearmSystem |
SS_EnhancedInputManager |
Function Call |
GetActionValue1D for trigger |
| BPC_CutsceneBridge |
SS_EnhancedInputManager |
Function Call |
PushContext/PopContext |
| BP_PuzzleDeviceActor |
SS_EnhancedInputManager |
Function Call |
PushContext(Inspection) |
Success Criteria
- All 30+ Input Actions are created and mapped across all 3 platforms (PC, Xbox, PS5)
- Context switching is seamless: pushing a higher-priority context overrides lower ones without blocking
- Key rebinding via SS_SettingsSystem persists across sessions
- Input mode changes (GameOnly ↔ UIOnly) correctly show/hide cursor
- All existing specs that reference
BPC_InputManager are updated to reference SS_EnhancedInputManager
- Quick slot scrolling and direct selection work on both KB+M and gamepad
- Hold inputs (HoldBreath, physics-drag) correctly trigger on hold and cancel on early release
- Cutscene skip works via hold-to-skip (not tap)