Files
UE5-Modular-Game-Framework/docs/checklists/enhanced-input-system.md
2026-05-19 10:18:28 +00:00

9.4 KiB

Enhanced Input System — Implementation Checklist

Phase 1: Asset Creation (Game Dev / Code Agent)

  • 1.1 Create directory Content/Framework/Input/Actions/
  • 1.2 Create directory Content/Framework/Input/Contexts/
  • 1.3 Create all 30+ Input Action assets (IA_*) with correct Value Types:
    • IA_Move (Axis2D)
    • IA_Look (Axis2D)
    • IA_Inspect_Rotate (Axis2D)
    • IA_UI_Navigate (Axis2D)
    • IA_Hide_Look (Axis2D)
    • IA_Inspect_Zoom (Axis1D)
    • IA_Hide_Peek (Axis1D)
    • IA_QuickSlotScroll (Axis1D)
    • IA_Interact (Digital/Bool)
    • IA_PrimaryAction (Digital/Bool)
    • IA_SecondaryAction (Digital/Bool)
    • IA_Sprint (Digital/Bool)
    • IA_Crouch (Digital/Bool)
    • IA_Vault_Climb (Digital/Bool)
    • IA_Jump (Digital/Bool)
    • IA_Flashlight (Digital/Bool)
    • IA_QuickHeal (Digital/Bool)
    • IA_Reload (Digital/Bool)
    • IA_OpenWatch (Digital/Bool)
    • IA_PauseMenu (Digital/Bool)
    • IA_QuickSlot1 through IA_QuickSlot8 (Digital/Bool)
    • IA_Inspect_Flip (Digital/Bool)
    • IA_Cancel_Drop (Digital/Bool)
    • IA_UI_Select (Digital/Bool)
    • IA_UI_Combine (Digital/Bool)
    • IA_UI_DropItem (Digital/Bool)
    • IA_CloseWatch (Digital/Bool)
    • IA_UI_Back (Digital/Bool)
    • IA_Hide_HoldBreath (Digital/Bool)
    • IA_Exit_Hide (Digital/Bool)
    • IA_ToggleAccessibility (Digital/Bool)
    • IA_SkipCutscene (Digital/Bool)
  • 1.4 Create all 5 Input Mapping Context assets (IMC_*):
    • IMC_Default
    • IMC_Hiding
    • IMC_WristwatchUI
    • IMC_Inspection
    • IMC_UI
  • 1.5 Create DA_InputMappingProfile Data Asset at Content/Framework/DataAssets/
  • 1.6 Populate DA_InputMappingProfile with all 3 platform profiles per the spec

Phase 2: IMC Binding Setup

  • 2.1 IMC_Default — Map all 28 actions to PC, Xbox, and PS5 bindings
  • 2.2 IMC_Default — Apply W/A/S/D modifiers (S=Negate, D=Swizzle, A=Swizzle+Negate)
  • 2.3 IMC_Default — Set analog stick dead zones (0.15)
  • 2.4 IMC_Default — Configure hold triggers (Interact 0.3s, Sprint 0s, SkipCutscene 2.0s)
  • 2.5 IMC_Hiding — Map 4 actions with clamped look angles
  • 2.6 IMC_WristwatchUI — Map 5 UI navigation actions
  • 2.7 IMC_Inspection — Map 4 inspection actions
  • 2.8 IMC_UI — Map 5 full-screen UI actions
  • 2.9 Configure chord actions (HoldBreath = LT+RT, ToggleAccessibility = View+Menu)

Phase 3: Subsystem Implementation (Code Agent)

  • 3.1 Create SS_EnhancedInputManager Game Instance Subsystem
  • 3.2 Implement Initialize(Profile) — load DA, cache EnhancedInputLocalPlayerSubsystem
  • 3.3 Implement PushContext(ContextType, PriorityOverride) — AddMappingContext with priority
  • 3.4 Implement PopContext(ContextType) — RemoveMappingContext
  • 3.5 Implement SetContextPriority(ContextType, NewPriority) — remove + re-add
  • 3.6 Implement IsActionPressed(ActionName) → Bool
  • 3.7 Implement GetActionValue1D(ActionName) → Float
  • 3.8 Implement GetActionValue2D(ActionName) → FVector2D
  • 3.9 Implement RebindKey(ActionName, NewKey, Platform) → Bool
  • 3.10 Implement ResetToDefaultBindings(Platform)
  • 3.11 Implement GetCurrentBindings(Platform) → TMap
  • 3.12 Implement GetActiveContexts() → TArray
  • 3.13 Implement IsContextActive(ContextType) → Bool
  • 3.14 Implement SetInputModeUIOnly() / SetInputModeGameOnly() / SetInputModeGameAndUI()
  • 3.15 Wire up Event Dispatchers: OnContextPushed, OnContextPopped, OnInputModeChanged, OnKeyRebound, OnPlatformChanged
  • 3.16 Register self with GI_GameFramework for static access via FL_GameUtilities::GetInputManager()

Phase 4: Integration — Init Sequence (Code Agent)

  • 4.1 In GI_GameFramework::Startup, call SS_EnhancedInputManager::Initialize(DA_InputMappingProfile)
  • 4.2 In GM_CoreGameMode::OnPlayerPossess, call PushContext(Default) with Priority 0
  • 4.3 In GM_CoreGameMode::OnPlayerUnPossess, call PopContext(Default)

Phase 5: Integration — Context Switches (Code Agent)

  • 5.1 BPC_HidingSystem::EnterHidingPushContext(Hiding, 5)
  • 5.2 BPC_HidingSystem::ExitHidingPopContext(Hiding)
  • 5.3 IA_OpenWatch triggered → PushContext(WristwatchUI, 10)
  • 5.4 IA_CloseWatch triggered → PopContext(WristwatchUI)
  • 5.5 BP_PuzzleDeviceActor / BPC_InteractionDetector pickup 3D item → PushContext(Inspection, 20)
  • 5.6 IA_Cancel_DropPopContext(Inspection)
  • 5.7 WBP_PauseMenu / SS_UIManager::ShowMenuPushContext(UI, 100) + SetInputModeUIOnly()
  • 5.8 WBP_PauseMenu::ClosePopContext(UI) + SetInputModeGameOnly()
  • 5.9 BPC_CutsceneBridge::OnCutsceneStartedPushContext(UI, 100) + SetInputModeUIOnly()
  • 5.10 BPC_CutsceneBridge::RestoreGameplayStatePopContext(UI) + restore

Phase 6: Integration — Gameplay Systems Read Input (Code Agent)

  • 6.1 BPC_MovementStateSystem → read IA_Move (Axis2D) and IA_Sprint (Bool) via SS_EnhancedInputManager
  • 6.2 BPC_CameraStateLayer → read IA_Look (Axis2D) via SS_EnhancedInputManager
  • 6.3 BPC_InteractionDetector → bind to IA_Interact press/release/hold events via SS_EnhancedInputManager
  • 6.4 BPC_FirearmSystem → read IA_PrimaryAction (Bool) and IA_Reload (Bool)
  • 6.5 BPC_MeleeSystem → read IA_PrimaryAction (Bool) for melee attacks
  • 6.6 BPC_ShieldDefenseSystem → read IA_SecondaryAction (Bool)
  • 6.7 BPC_StaminaSystem → listen to IA_Sprint state for continuous drain
  • 6.8 BPC_StressSystem → listen to IA_Sprint for breathing/stress effects
  • 6.9 BPC_ActiveItemSystem → read IA_QuickSlot1-8 and IA_QuickSlotScroll
  • 6.10 BPC_ConsumableSystem → listen to IA_QuickHeal
  • 6.11 BPC_Flashlight (light system) → listen to IA_Flashlight toggle
  • 6.12 BPC_ContextualTraversalSystem → listen to IA_Vault_Climb and IA_Jump

Phase 7: Settings & Rebind Integration

  • 7.1 SS_SettingsSystem::ApplyControlSettings → calls SS_EnhancedInputManager::RebindKey
  • 7.2 WBP_SettingsMenu Controls tab → reads GetCurrentBindings() to populate rebind UI
  • 7.3 Settings save/load → persist CurrentBindings in save file (controls section)
  • 7.4 BPC_AccessibilitySettings → reads AxisInvertSettings from DA_InputMappingProfile
  • 7.5 WBP_InteractionPromptDisplay → listens to OnKeyRebound to update displayed key icons
  • 7.6 Controller glyph switching → on OnPlatformChanged, update all WBP_InteractionPromptDisplay icons

Phase 8: Existing Docs Update (Cross-Reference Pass)

All existing specs that reference BPC_InputManager must be updated to reference SS_EnhancedInputManager:

  • 8.1 docs/blueprints/13-polish/114_WBP_SplashScreen.md — change BPC_InputManager references
  • 8.2 docs/blueprints/13-polish/112_WBP_CreditsScreen.md — change BPC_InputManager references
  • 8.3 docs/blueprints/13-polish/111_BPC_TutorialSystem.md — change InputActionShown to reference IA_ names
  • 8.4 docs/blueprints/07-narrative/64_BPC_CutsceneBridge.md — change input suppression references
  • 8.5 docs/blueprints/02-player/11_BPC_MovementStateSystem.md — change input note
  • 8.6 docs/blueprints/02-player/09_BPC_StaminaSystem.md — change input note
  • 8.7 docs/blueprints/02-player/12_BPC_HidingSystem.md — change input binding references
  • 8.8 docs/blueprints/03-interaction/16_BPC_InteractionDetector.md — change input event references
  • 8.9 docs/blueprints/06-ui/44_SS_UIManager.md — add SS_EnhancedInputManager coordination note
  • 8.10 docs/blueprints/12-settings/105_SS_SettingsSystem.md — change UPlayerInput references

Phase 9: Testing (QA Engineer)

  • 9.1 Context priority: verify IMC_WristwatchUI (Priority 10) overrides IMC_Default WASD movement
  • 9.2 Context pop: verify exiting wristwatch restores WASD movement
  • 9.3 Hold vs Tap: verify IA_Interact tap = pickup, hold = physics drag
  • 9.4 Modifiers: verify A/D produce correct ±X axis values
  • 9.5 Dead zone: verify analog stick drift does not trigger movement
  • 9.6 Key rebind: rebind IA_Reload from R to T, verify T now reloads
  • 9.7 Reset defaults: reset bindings, verify R reloads again
  • 9.8 Platform hot-swap: unplug controller, verify KB+M profile loads
  • 9.9 Input mode: pause game, verify cursor visible and movement blocked
  • 9.10 Quick slots: verify 1-8 on keyboard selects items, scroll wheel cycles
  • 9.11 Cutscene skip: hold Spacebar 2.0s, verify skip triggers
  • 9.12 Hiding hold breath: hold Spacebar (PC) / LT+RT (controller), verify breath suppressed
  • 9.13 Edge case: spam-context-switch (open/close inventory rapidly) doesn't crash
  • 9.14 Edge case: disconnect controller mid-combat, auto-switches to KB+M
  • 9.15 Edge case: rebind to already-bound key, system rejects with warning