# 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
