# 139 — Mirror Surface Actor (`BP_Mirror`) ## Purpose Standard planar mirror surface. Designer configures mode, dirt layers, steam parameters, and surface aging. Extends `BP_PlanarCaptureActor` with default mirror configuration. ## Dependencies - **Requires:** `BP_PlanarCaptureActor` (137), `BPC_PlanarCapture` (136) - **Required By:** `BP_HorrorMirror` (142) — extends this for horror features - **Engine/Plugin Requirements:** M_CaptureSurface_Master material, MPC_CaptureSurface ## Class Info | Property | Value | |----------|-------| | **Parent Class** | `BP_PlanarCaptureActor` (C++ `ABP_PlanarCaptureActor`) | | **Class Type** | Blueprint Actor | | **Asset Path** | `Content/Framework/Capture/BP_Mirror.uasset` | | **C++ Status** | 🔵 BP Spec Only — extends C++ parent | | **BP Asset** | Create in editor: `BP_Mirror` | ## 1. Configuration (Class Defaults) | Variable | Value | Description | |----------|-------|-------------| | `CaptureComponent.CaptureMode` | `Mirror` | Fixed to Mirror mode | | `bStartEnabled` | `true` | Active by default | | `bDestructible` | `false` | Can be shattered (override per instance) | | `SurfaceMPC` | `MPC_CaptureSurface` | Assign the global MPC | ### Mirror-Specific Properties (Set via `SetSurfaceMPCParameter`) | Parameter | Default | Range | Description | |-----------|---------|-------|-------------| | `DirtOpacity` | 0.0 | 0.0–1.0 | Dirt/scratch layer intensity | | `SteamIntensity` | 0.0 | 0.0–1.0 | Steam fog visibility | | `CondensationFlow` | 0.0 | 0.0–1.0 | Condensation rivulet normal intensity | | `SurfaceAge` | 0.0 | 0.0–1.0 | Oxidation/yellowing tint | ## 2. Material Setup | Slot | Material Instance | Description | |------|------------------|-------------| | SurfaceMesh[0] | `MI_Mirror_Clean` | Default clean mirror | Pre-configured material instances to assign per mirror: - `MI_Mirror_Clean` — Pristine mirror, no effects - `MI_Mirror_Dirty` — DirtOpacity preset at 0.4 - `MI_Mirror_Steam` — SteamIntensity preset at 0.6, animated noise enabled ## 3. Event Graph ### Event BeginPlay ``` Event BeginPlay ├─ Parent: BeginPlay (registers with manager) ├─ Set CaptureComponent.CaptureMode = Mirror ├─ Set SurfaceMaterial(MI_Mirror_Clean) // or designer-chosen MI └─ [If bStartEnabled] EnableSurface() ``` ### Event: SetMirrorDirtLevel(Level: float) ``` SetMirrorDirtLevel(Level) ├─ Clamp Level to 0.0–1.0 ├─ Call SetSurfaceMPCParameter("DirtOpacity", Level) └─ [If Level > threshold] Swap material to MI_Mirror_Dirty ``` ### Event: SetMirrorSteamLevel(Level: float) ``` SetMirrorSteamLevel(Level) ├─ Clamp Level to 0.0–1.0 ├─ Call SetSurfaceMPCParameter("SteamIntensity", Level) └─ Call SetSurfaceMPCParameter("CondensationFlow", Level * 0.5) ``` ## 4. Communication Matrix | Target | Method | What | |--------|--------|------| | `SS_PlanarCaptureManager` | Direct (inherited) | Registration | | `BPC_PlanarCapture` | Direct (inherited) | Capture driving | | `MPC_CaptureSurface` | SetScalarParameterValue (via PushMPCParameters) | Visual parameters | | `SS_AudioManager` (132) | Direct (on shatter) | Shatter sound | ## 5. Manual Implementation Guide ### 5.1 Create BP_Mirror 1. Create Blueprint Class: Parent = `BP_PlanarCaptureActor`, Name = `BP_Mirror` 2. Open Class Defaults, set `CaptureComponent.CaptureMode` to `Mirror` 3. In Components: select `SurfaceMesh`, assign a plane mesh (e.g., `SM_Plane_200x200`) 4. Assign `MI_Mirror_Clean` to SurfaceMesh material slot 0 5. Set `SurfaceMPC` to `MPC_CaptureSurface` ### 5.2 Add Steam/Dirt Controls 1. In Event Graph, create custom event `SetMirrorDirtLevel(Float)` 2. Wire: `SetSurfaceMPCParameter("DirtOpacity", Level)` 3. Create custom event `SetMirrorSteamLevel(Float)` 4. Wire: `SetSurfaceMPCParameter("SteamIntensity", Level)` + `SetSurfaceMPCParameter("CondensationFlow", Level * 0.5)` ### 5.3 Level Placement 1. Drag `BP_Mirror` into level 2. Rotate so surface normal faces toward player viewing area 3. Set `SurfaceDisplayName` for debug identification 4. Adjust `ProximityTrigger.BoxExtent` to cover expected viewing area ## 6. Build Checklist - [ ] Create BP_Mirror Blueprint child - [ ] Assign plane mesh and MI_Mirror_Clean material - [ ] Set CaptureMode=Mirror in defaults - [ ] Assign MPC_CaptureSurface reference - [ ] Test: place in level, walk up, verify reflection appears - [ ] Test: walk away, verify quality drops to Off - [ ] Test: call SetMirrorDirtLevel/SetMirrorSteamLevel from gameplay code