# 141 — Monitor Surface Actor (`BP_Monitor`) ## Purpose Security screen, TV, or diegetic display monitor. Uses a fixed camera actor reference instead of dynamic mirror/portal math. Runs at low FPS by default (5fps) with scanline and static noise effects. ## Dependencies - **Requires:** `BP_PlanarCaptureActor` (137), `BPC_PlanarCapture` (136) - **Required By:** `BPC_DiegeticDisplay` (18) — can display diegetic HUD content - **Engine/Plugin Requirements:** None additional ## Class Info | Property | Value | |----------|-------| | **Parent Class** | `BP_PlanarCaptureActor` (C++ `ABP_PlanarCaptureActor`) | | **Class Type** | Blueprint Actor | | **Asset Path** | `Content/Framework/Capture/BP_Monitor.uasset` | | **C++ Status** | 🔵 BP Spec Only | | **BP Asset** | Create in editor: `BP_Monitor` | ## 1. Configuration (Class Defaults) | Variable | Value | Description | |----------|-------|-------------| | `CaptureComponent.CaptureMode` | `Monitor` | Fixed to Monitor mode | | `CaptureComponent.CaptureFOV` | `70.0` | Narrower FOV for security camera feel | | `CaptureComponent.QualityProfiles[0].CaptureInterval` | `0.2` | 5fps Low quality (override) | | `SurfaceMPC` | `MPC_CaptureSurface` | Global MPC | ### Monitor-Specific Properties (Add to BP) | Variable | Type | Default | Description | |----------|------|---------|-------------| | `bPoweredOn` | bool | true | On/off state | | `bShowScanlines` | bool | false | CRT scanline overlay | | `StaticNoiseIntensity` | float | 0.0 | Static/noise overlay (0.0–1.0) | | `FlickerCurve` | UCurveFloat | — | On/off flicker timing curve | | `PoweredOffMaterial` | UMaterialInterface | — | Material shown when off (black screen, cracked) | ## 2. Material Setup | Slot | Material | Description | |------|----------|-------------| | SurfaceMesh[0] | `MI_Monitor_Security` | Security screen with scanline support | ## 3. Event Graph ### Event BeginPlay ``` Event BeginPlay ├─ Parent: BeginPlay ├─ Set CaptureComponent.CaptureMode = Monitor ├─ Set CaptureComponent.CaptureFOV = 70.0 ├─ [If bPoweredOn] EnableSurface └─ [Else] SetSurfaceMaterial(PoweredOffMaterial) ``` ### Event: PowerOn ``` PowerOn() ├─ Set bPoweredOn = true ├─ SetSurfaceMaterial(MI_Monitor_Security) ├─ EnableSurface() └─ [If FlickerCurve valid] StartFlickerTimeline ``` ### Event: PowerOff ``` PowerOff() ├─ Set bPoweredOn = false ├─ DisableSurface() ├─ SetSurfaceMaterial(PoweredOffMaterial) └─ StopFlickerTimeline ``` ### Event: SetStaticNoise(Intensity: float) ``` SetStaticNoise(Intensity) ├─ Clamp Intensity 0.0–1.0 ├─ Set StaticNoiseIntensity = Intensity └─ SetSurfaceMPCParameter("StaticNoiseIntensity", Intensity) ``` ## 4. Flicker Timeline Setup If `FlickerCurve` is assigned, create a Timeline that drives: ``` Timeline: FlickerTimeline Curve: FlickerCurve (Float Track) On Update: ├─ Read curve value → bIsFlickerOn ├─ If bIsFlickerOn and not bPoweredOn → PowerOn (brief) └─ If not bIsFlickerOn and bPoweredOn → PowerOff (brief) ``` ## 5. Communication Matrix | Target | Method | What | |--------|--------|------| | `BPC_DiegeticDisplay` (18) | Interface (I_DiegeticDisplay) | Can display diegetic HUD content as secondary output | | `SS_AudioManager` (132) | Direct | Monitor static/buzz/hum SFX | | `BPC_ScareEventSystem` (101) | Dispatcher | Monitor flicker/horror image scare | ## 6. Manual Implementation Guide ### 6.1 Create BP_Monitor 1. Create Blueprint Class: Parent = `BP_PlanarCaptureActor`, Name = `BP_Monitor` 2. Set `CaptureComponent.CaptureMode = Monitor` in defaults 3. Set `CaptureComponent.CaptureFOV = 70.0` 4. Override QualityProfiles[0].CaptureInterval to 0.2 (5fps Low) 5. Assign `MI_Monitor_Security` to SurfaceMesh 6. Create `PoweredOffMaterial` — simple dark/black emissive material ### 6.2 Camera Placement 1. Create a `CameraActor` or `SceneCaptureCamera` (BP child of CameraActor) in the level 2. Position it where the monitor should "look from" 3. In BP_Monitor instance: set `CaptureComponent.FixedCameraActor` → your camera actor ### 6.3 Power Control For narrative-driven power control: ``` External system calls: BP_Monitor → PowerOn() / PowerOff() Trigger: Narrative flag set → Branch → PowerOn or PowerOff ``` ## 7. Build Checklist - [ ] Create BP_Monitor Blueprint child - [ ] Assign MI_Monitor_Security material - [ ] Create PoweredOffMaterial (dark screen) - [ ] Place camera actor and assign FixedCameraActor - [ ] Test PowerOn/PowerOff cycle - [ ] Test flicker curve timeline - [ ] Test static noise parameter - [ ] Test: place multiple monitors, verify quality budget works