# IA_* — Input Actions + IMC_* — Input Mapping Contexts

> **UE5 Path:** `Content/Framework/Input/Actions/` + `Content/Framework/Input/Contexts/`
> **Plugin Required:** Enhanced Input (enabled in project plugins)

---

## Prerequisites

1. **Project Settings → Plugins → Enhanced Input** → Enabled ✓
2. Restart editor after enabling

---

## Input Actions — Create All (17 assets)

### Gameplay Actions
| Asset Name | Value Type | Description |
|-----------|-----------|-------------|
| `IA_Move` | `Axis2D` | WASD / Left Stick movement |
| `IA_Look` | `Axis2D` | Mouse / Right Stick camera |
| `IA_Jump` | `Digital (bool)` | Jump / Vault |
| `IA_Sprint` | `Digital (bool)` | Sprint (hold) |
| `IA_Crouch` | `Digital (bool)` | Toggle crouch |
| `IA_Interact` | `Digital (bool)` | Primary interact (E / X) |
| `IA_InteractHold` | `Digital (bool)` | Hold interaction (hold E) |
| `IA_Reload` | `Digital (bool)` | Reload weapon |
| `IA_Fire` | `Digital (bool)` | Primary fire |
| `IA_AimDownSights` | `Digital (bool)` | Aim (hold) |
| `IA_Melee` | `Digital (bool)` | Melee attack |
| `IA_UseItem` | `Digital (bool)` | Use equipped/quick-slot item |
| `IA_ToggleInventory` | `Digital (bool)` | Open/close inventory |
| `IA_ToggleJournal` | `Digital (bool)` | Open/close journal |
| `IA_Pause` | `Digital (bool)` | Pause menu |
| `IA_Hide` | `Digital (bool)` | Enter/exit hiding |
| `IA_Peek` | `Digital (bool)` | Peek while hiding |

### How to Create Each

1. Content Browser → `Content/Framework/Input/Actions/`
2. Right-click → **Input → Input Action**
3. Name: `IA_{Action}`
4. Open the asset → set **Value Type** per the table above
5. Optionally add **Triggers** (Tap, Hold, Pressed, Released)
6. Optionally add **Modifiers** (Negate, Dead Zone, Swizzle Axis)

### Common Trigger/Modifier Setup

```
IA_Interact:    Trigger: Pressed
IA_InteractHold:  Trigger: Hold (HoldTimeThreshold = 0.5)
IA_Sprint:      Trigger: Hold
IA_Crouch:      Trigger: Pressed (toggle behavior in code)
IA_Fire:        Trigger: Pressed + Trigger: Hold (for auto-fire)
IA_AimDownSights: Trigger: Hold
IA_Pause:       Trigger: Pressed
```

---

## Input Mapping Contexts — Create All (6 assets)

| Asset Name | Priority | Contains These Actions | When Active |
|-----------|----------|----------------------|-------------|
| `IMC_Default` | 0 | Move, Look, Jump, Sprint, Crouch, Interact, InteractHold, Reload, Fire, AimDownSights, Melee, UseItem, ToggleInventory, ToggleJournal, Pause | Always (lowest priority) |
| `IMC_Hiding` | 5 | Hide, Peek (overrides some IMC_Default) | While hidden |
| `IMC_WristwatchUI` | 10 | Interact (re-mapped to wristwatch), Look | Wristwatch mode |
| `IMC_Inspection` | 20 | Look (rotation only), Interact (exit inspect) | 3D inspect mode |
| `IMC_UI` | 100 | Pause (close), Interact (confirm) | Any menu open |
| `IMC_Vehicle` | 3 | Move (vehicle), Look, Interact (exit) | While in vehicle |

### How to Create Each

1. Content Browser → `Content/Framework/Input/Contexts/`
2. Right-click → **Input → Input Mapping Context**
3. Name: `IMC_{Context}`
4. Open → **Add Mapping** for each action in the table
5. For each mapping, select the `IA_` asset and assign a key binding

### Default Key Bindings (PC — IMC_Default)

| Action | Primary Key | Secondary Key |
|--------|------------|---------------|
| `IA_Move` | `W/A/S/D` | Left Stick |
| `IA_Look` | `Mouse XY` | Right Stick |
| `IA_Jump` | `Space` | `A` (gamepad) |
| `IA_Sprint` | `Left Shift` | Left Stick Click |
| `IA_Crouch` | `Left Ctrl` | `B` (gamepad) |
| `IA_Interact` | `E` | `X` (gamepad) |
| `IA_Reload` | `R` | `Y` (gamepad) |
| `IA_Fire` | `Left Mouse` | Right Trigger |
| `IA_AimDownSights` | `Right Mouse` | Left Trigger |
| `IA_Melee` | `V` | Right Stick Click |
| `IA_UseItem` | `Q` | `D-Pad Up` |
| `IA_ToggleInventory` | `Tab` | `Select` |
| `IA_ToggleJournal` | `J` | `D-Pad Left` |
| `IA_Pause` | `Escape` | `Start` |

---

## Context Priority System

```
IMC_UI (100)           ← Highest — blocks everything
IMC_Inspection (20)
IMC_WristwatchUI (10)
IMC_Hiding (5)
IMC_Vehicle (3)
IMC_Default (0)        ← Lowest — always active
```

When a higher-priority context is pushed, conflicting inputs from lower contexts are overridden. Non-conflicting inputs still pass through.

---

## Test It
- [ ] All 17 IA_ assets created with correct Value Types
- [ ] All 6 IMC_ assets created with correct mappings
- [ ] PIE: WASD moves character, mouse looks around, E interacts
- [ ] Push IMC_Hiding → IMC_Default actions blocked except those also in IMC_Hiding
- [ ] Open inventory → IMC_UI pushes → cursor appears → game inputs blocked
