# Interaction Systems — Asset Creation Sheet (8 assets) > **UE5 Path:** `Content/Framework/Interaction/` --- ## BPC_InteractionDetector (Component) **Parent:** `ActorComponent` → Attach to player pawn | Variable | Type | Default | |----------|------|---------| | `InteractionRange` | Float | `300.0` | | `InteractionChannel` | TraceChannel | `Visibility` | | `HoldDuration` | Float | `0.5` | | `CurrentFocusedActor` | Actor | None | **Key Logic:** ``` Tick → LineTraceByChannel(Camera Forward * Range) ├─ Hit actor implements I_Interactable? │ True → if different from CurrentFocused → Call OnFocusBegin on new, OnFocusEnd on old │ False → Clear focus ├─ If holding interact → accumulate hold timer │ Timer >= HoldDuration → trigger OnInteract └─ Fire dispatchers: OnFocusBegin, OnFocusEnd, OnHoldProgress ``` **Dispatchers:** `OnInteractionDetected(Actor, PromptText)`, `OnFocusLost`, `OnHoldProgress(Float)` --- ## I_HidingSpot (Interface) **Create:** Right-click → **Blueprint → Blueprint Interface** → Name: `I_HidingSpot` | Function | Inputs | Outputs | |----------|--------|---------| | `CanPlayerHide` | `Player` (Actor) | `Boolean`, `BlockReason` (Text) | | `OnPlayerEnter` | `Player` (Actor) | — | | `OnPlayerExit` | `Player` (Actor) | — | | `GetEntryTransform` | — | `Transform` | | `GetPeekTransforms` | — | `Array` | | `IsOccupied` | — | `Boolean` | | `GetHidingSpotType` | — | `GameplayTag` | --- ## BPC_DiegeticDisplay (Component) **Parent:** `ActorComponent` → Attach to wristwatch/helmet actor | Variable | Type | Default | |----------|------|---------| | `DisplayWidgetClass` | `WBP_DiegeticHUDFrame` | Assign | | `RenderTarget` | `TextureRenderTarget2D` | 512x512 | | `bIsActive` | Boolean | `false` | --- ## BP_DoorActor (Actor) **Parent:** `Actor` → Add StaticMesh (door frame) + StaticMesh (door panel) | Variable | Type | Default | |----------|------|---------| | `DoorState` | GameplayTag | `Framework.Interaction.Door.Closed` | | `bIsLocked` | Boolean | `false` | | `RequiredKeyTag` | GameplayTag | Empty | | `OpenAngle` | Float | `90.0` | | `OpenSpeed` | Float | `3.0` | **Implements:** `I_Interactable`, `I_Lockable`, `I_Toggleable`, `I_Persistable` --- ## BP_PuzzleDeviceActor (Actor) **Parent:** `Actor` → Base class for all puzzle devices | Variable | Type | Default | |----------|------|---------| | `PuzzleData` | `DA_PuzzleData` | Assign | | `CurrentStep` | Integer | `0` | | `bIsSolved` | Boolean | `false` | | `ActivationSequence` | `Array` | Linked devices | --- ## BPC_ContextualTraversalSystem (Component) **Attach to:** Player pawn — works with GASP Motion Warping | Variable | Type | Default | |----------|------|---------| | `TraversalTraceDistance` | Float | `200.0` | | `VaultHeight` | Float | `120.0` | | `MantleHeight` | Float | `200.0` | --- ## BPC_PhysicsDragSystem (Component) **Attach to:** Player pawn | Variable | Type | Default | |----------|------|---------| | `DragForce` | Float | `500.0` | | `HoldDistance` | Float | `200.0` | | `HeldActor` | Actor | None | --- ## BPC_UsableWorldObjectSystem (Component) **Attach to:** Player pawn | Variable | Type | Default | |----------|------|---------| | `CurrentUsable` | Actor | None | | `bIsUsing` | Boolean | `false` | --- ## Test These - [ ] Walk up to door → prompt "Open Door [E]" → press E → door opens - [ ] Locked door → prompt "Locked — Requires Key Card" → can't open - [ ] Run toward low wall → auto-vault (ContextualTraversal) - [ ] Grab physics object → drags in front of player → release throws