Messenger Subsystems
Two messenger systems let you wire the simulated OS to gameplay without tight coupling.
Choose the right bus
Section titled “Choose the right bus”| Subsystem | Scope | Identifiers | Best for |
|---|---|---|---|
| Global Messenger | Entire UWorld | Gameplay tags | Terminal → door, switch → level sequence |
| Device Messenger | One running device | FName events | Mail badge, battery UI, program ↔ program |
flowchart TB
subgraph global["Global Messenger — world scope"]
direction LR
Term["UOperatingSystemTerminalCommand"] --> GM["UGlobalMessageSubsystem"] --> Door["Level actor listener"]
end
subgraph device["Device Messenger — device scope"]
direction LR
Mail["BP_Prog_Mail"] --> DM["FOperatingSystemDeviceMessengerSystem"] --> Taskbar["UOperatingSystemTaskbarButton"]
end
Tutorials
Section titled “Tutorials”| Tutorial | Focus |
|---|---|
| Using Global Messenger | Door toggle from terminal |
| Using Device Messenger | In-device program events |
- UGlobalMessageSubsystem
- FOperatingSystemDeviceMessengerSystem
- UOperatingSystemStatics::FindMessengerFromOperatingSystem
sequenceDiagram participant T as UOperatingSystemTerminalCommand participant G as UGlobalMessageSubsystem participant A as Any world listener participant D as FOperatingSystemDeviceMessengerSystem participant P as UOperatingSystemBaseProgram Note over T,A: World scope T->>G: BroadcastMessage(gameplay tag) G->>A: ListenToMessage callback Note over D,P: Device scope only P->>D: Broadcast(FName event) D->>P: BeginListening callback
The standalone demo opens a roof door via Global Messenger with zero direct references between Terminal and actors.