# BPC_StaminaSystem / BPC_StressSystem / BPC_MovementStateSystem # BPC_HidingSystem / BPC_EmbodimentSystem / BPC_CameraStateLayer / BPC_PlayerMetricsTracker # # Player Component Assets — Quick Creation Sheet (7 components) > **UE5 Path:** `Content/Framework/Player/` > **Parent Class:** `ActorComponent` > **Attach To:** Player pawn --- ## Quick Creation — All 7 Components For each component below: 1. Content Browser → `Content/Framework/Player/` 2. Right-click → **Blueprint Class** → Parent: `ActorComponent` 3. Name: as listed 4. Attach to player pawn Blueprint via **Add Component** --- ## BPC_StaminaSystem | Variable | Type | Default | |----------|------|---------| | `MaxStamina` | Float | `100.0` | | `CurrentStamina` | Float | `100.0` | | `SprintDrainRate` | Float | `10.0` | | `StaminaRegenRate` | Float | `5.0` | | `ExhaustionThreshold` | Float | `10.0` | | `bExhausted` | Boolean | `false` | **Key Functions:** `ConsumeStamina(Amount)`, `IsExhausted()` **Dispatchers:** `OnStaminaChanged`, `OnExhaustionStateChanged` --- ## BPC_StressSystem | Variable | Type | Default | |----------|------|---------| | `CurrentStress` | Float | `0.0` | | `StressDecayRate` | Float | `1.0` | | `StressTier` | Enum (E_PlayerVitalSignals) | `Calm` | **Key Functions:** `AddStress(Amount, Source)`, `GetStressTier()` **Dispatchers:** `OnStressChanged`, `OnStressTierChanged(Tier)` **Stress Tiers:** Calm → Tense → Anxious → Fearful → Catatonic --- ## BPC_MovementStateSystem | Variable | Type | Default | |----------|------|---------| | `CurrentMovementMode` | GameplayTag | `Framework.Player.Movement.Standing` | | `CurrentPosture` | GameplayTag | `Framework.Player.Posture.Standing` | | `bIsSprinting` | Boolean | `false` | | `bIsCrouching` | Boolean | `false` | **Key Functions:** `SetMovementMode(Tag)`, `SetPosture(Tag)`, `GetMovementIntensity()` **Dispatchers:** `OnMovementModeChanged`, `OnPostureChanged` **GASP Liaison:** This component updates GASP variables — never modify GASP directly. --- ## BPC_HidingSystem | Variable | Type | Default | |----------|------|---------| | `CurrentHideState` | GameplayTag | `Framework.Player.State.Exposed` | | `bIsPeeking` | Boolean | `false` | | `bIsHoldingBreath` | Boolean | `false` | | `BreathHoldMax` | Float | `8.0` | | `BreathHoldCurrent` | Float | `8.0` | **Key Functions:** `EnterHide(HidingSpot)`, `ExitHide()`, `Peek()`, `HoldBreath()` **Dispatchers:** `OnHideStateChanged`, `OnBreathHoldChanged` --- ## BPC_EmbodimentSystem | Variable | Type | Default | |----------|------|---------| | `bFirstPersonBodyVisible` | Boolean | `true` | | `bArmsOnlyMode` | Boolean | `false` | | `BodyMesh` | SkeletalMesh | (assign) | **Key Functions:** `SetBodyVisibility(bVisible)`, `SetArmsOnlyMode(bActive)` **Dispatchers:** `OnEmbodimentModeChanged` --- ## BPC_CameraStateLayer | Variable | Type | Default | |----------|------|---------| | `BaseFOV` | Float | `90.0` | | `CurrentFOV` | Float | `90.0` | | `FOVSmoothSpeed` | Float | `5.0` | | `CameraOffset` | Vector | `(0,0,0)` | **Key Functions:** `SetFOVOverride(Tag, FOV)`, `ClearFOVOverride(Tag)`, `SetCameraOffset(Tag, Offset)` **Dispatchers:** `OnFOVChanged`, `OnCameraOffsetChanged` --- ## BPC_PlayerMetricsTracker | Variable | Type | Default | |----------|------|---------| | `TotalShotsFired` | Integer | `0` | | `TotalShotsHit` | Integer | `0` | | `TotalDeaths` | Integer | `0` | | `TotalKills` | Integer | `0` | | `Accuracy` | Float | `0.0` | | `KDRatio` | Float | `0.0` | **Key Functions:** `RecordShot(bHit)`, `RecordDeath()`, `RecordKill()`, `GetAccuracy()` **Dispatchers:** `OnMetricsUpdated` --- ## Test All Components - [ ] All 7 components visible on player pawn - [ ] BeginPlay sets default values correctly - [ ] Each dispatcher fires when its state changes - [ ] Components don't conflict (Stamina drain doesn't affect Stress directly — let StateManager coordinate)