9.4 KiB
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_QuickSlot1throughIA_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_DefaultIMC_HidingIMC_WristwatchUIIMC_InspectionIMC_UI
- 1.5 Create
DA_InputMappingProfileData Asset atContent/Framework/DataAssets/ - 1.6 Populate
DA_InputMappingProfilewith 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_EnhancedInputManagerGame 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_GameFrameworkfor static access viaFL_GameUtilities::GetInputManager()
Phase 4: Integration — Init Sequence (Code Agent)
- 4.1 In
GI_GameFramework::Startup, callSS_EnhancedInputManager::Initialize(DA_InputMappingProfile) - 4.2 In
GM_CoreGameMode::OnPlayerPossess, callPushContext(Default)with Priority 0 - 4.3 In
GM_CoreGameMode::OnPlayerUnPossess, callPopContext(Default)
Phase 5: Integration — Context Switches (Code Agent)
- 5.1
BPC_HidingSystem::EnterHiding→PushContext(Hiding, 5) - 5.2
BPC_HidingSystem::ExitHiding→PopContext(Hiding) - 5.3
IA_OpenWatchtriggered →PushContext(WristwatchUI, 10) - 5.4
IA_CloseWatchtriggered →PopContext(WristwatchUI) - 5.5
BP_PuzzleDeviceActor / BPC_InteractionDetectorpickup 3D item →PushContext(Inspection, 20) - 5.6
IA_Cancel_Drop→PopContext(Inspection) - 5.7
WBP_PauseMenu / SS_UIManager::ShowMenu→PushContext(UI, 100)+SetInputModeUIOnly() - 5.8
WBP_PauseMenu::Close→PopContext(UI)+SetInputModeGameOnly() - 5.9
BPC_CutsceneBridge::OnCutsceneStarted→PushContext(UI, 100)+SetInputModeUIOnly() - 5.10
BPC_CutsceneBridge::RestoreGameplayState→PopContext(UI)+ restore
Phase 6: Integration — Gameplay Systems Read Input (Code Agent)
- 6.1
BPC_MovementStateSystem→ readIA_Move(Axis2D) andIA_Sprint(Bool) viaSS_EnhancedInputManager - 6.2
BPC_CameraStateLayer→ readIA_Look(Axis2D) viaSS_EnhancedInputManager - 6.3
BPC_InteractionDetector→ bind toIA_Interactpress/release/hold events viaSS_EnhancedInputManager - 6.4
BPC_FirearmSystem→ readIA_PrimaryAction(Bool) andIA_Reload(Bool) - 6.5
BPC_MeleeSystem→ readIA_PrimaryAction(Bool) for melee attacks - 6.6
BPC_ShieldDefenseSystem→ readIA_SecondaryAction(Bool) - 6.7
BPC_StaminaSystem→ listen toIA_Sprintstate for continuous drain - 6.8
BPC_StressSystem→ listen toIA_Sprintfor breathing/stress effects - 6.9
BPC_ActiveItemSystem→ readIA_QuickSlot1-8andIA_QuickSlotScroll - 6.10
BPC_ConsumableSystem→ listen toIA_QuickHeal - 6.11
BPC_Flashlight(light system) → listen toIA_Flashlighttoggle - 6.12
BPC_ContextualTraversalSystem→ listen toIA_Vault_ClimbandIA_Jump
Phase 7: Settings & Rebind Integration
- 7.1
SS_SettingsSystem::ApplyControlSettings→ callsSS_EnhancedInputManager::RebindKey - 7.2
WBP_SettingsMenuControls tab → readsGetCurrentBindings()to populate rebind UI - 7.3 Settings save/load → persist CurrentBindings in save file (controls section)
- 7.4
BPC_AccessibilitySettings→ readsAxisInvertSettingsfromDA_InputMappingProfile - 7.5
WBP_InteractionPromptDisplay→ listens toOnKeyReboundto update displayed key icons - 7.6 Controller glyph switching → on
OnPlatformChanged, update allWBP_InteractionPromptDisplayicons
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— changeBPC_InputManagerreferences - 8.2
docs/blueprints/13-polish/112_WBP_CreditsScreen.md— changeBPC_InputManagerreferences - 8.3
docs/blueprints/13-polish/111_BPC_TutorialSystem.md— changeInputActionShownto 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— addSS_EnhancedInputManagercoordination note - 8.10
docs/blueprints/12-settings/105_SS_SettingsSystem.md— changeUPlayerInputreferences
Phase 9: Testing (QA Engineer)
- 9.1 Context priority: verify
IMC_WristwatchUI(Priority 10) overridesIMC_DefaultWASD movement - 9.2 Context pop: verify exiting wristwatch restores WASD movement
- 9.3 Hold vs Tap: verify
IA_Interacttap = 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_Reloadfrom 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