# BPC_RecoilSystem — Actor Component **File:** [`Content/Framework/Weapons/BPC_RecoilSystem`](Content/Framework/Weapons/BPC_RecoilSystem.uasset) **Parent Class:** `UActorComponent` **Dependencies:** [`DA_WeaponData`](49_BP_WeaponBase.md), [`BPC_FirearmSystem`](BPC_FirearmSystem.md), [`BPC_CameraStateLayer`](../02-player/14_BPC_CameraStateLayer.md) **Purpose:** Handles procedural recoil: camera kick, recovery curve, and ADS recoil reduction. Works with `BPC_FirearmSystem` to apply per-weapon recoil patterns. --- ## Variables | Name | Type | Description | |------|------|-------------| | `RecoilPattern` | CurveVector | Per-weapon kick pattern (X=pitch, Y=yaw) | | `RecoverySpeed` | Float | How fast camera returns to rest | | `ADSRecoilMultiplier` | Float | Recoil reduction while aiming (0.3-0.7) | | `CurrentRecoilOffset` | Vector2D | Accumulated recoil offset | | `bIsRecovering` | Bool | Recovery in progress | ## Functions / Events | Name | Inputs | Outputs | What it does | |------|--------|---------|--------------| | `ApplyRecoil` | ShotCount: Integer, bADS: Bool | — | Applies recoil kick based on weapon pattern | | `ResetRecoil` | — | — | Clears accumulated offset | | `TickRecovery` | DeltaTime: Float | — | Lerps CurrentRecoilOffset back toward zero | | `SetRecoilPattern` | Pattern: CurveVector | — | Loads per-weapon recoil data from DA_WeaponData | ## Blueprint Flow ``` [FirearmSystem fires] -> ApplyRecoil(shotCount, bADS) -> Look up RecoilPattern value at shotCount index -> Apply ADSRecoilMultiplier if bADS -> Add to CurrentRecoilOffset -> Push offset to BPC_CameraStateLayer -> Start recovery timer on tick ``` ## Communications With | Target System | Method | Why | |---------------|--------|-----| | `BPC_FirearmSystem` | Direct call from ApplyRecoilRequest | Receives fire events | | `BPC_CameraStateLayer` | Direct ApplyFOVModifier | Camera kick application | ## Reuse Notes - RecoilPattern is a CurveVector from DA_WeaponData — swap per weapon - For hitscan weapons, call ApplyRecoil on every shot. For projectile, call on fire release - Recovery runs on tick when bIsRecovering; disable tick at rest for performance