Skip to content

C++ Reference

Guide for extending the plugin in C++. Full class listings with members live in the API Reference tab.

flowchart TB
  subgraph row1[" "]
    direction LR
    Game["Your game module"] --> OSS["OperatingSystemSimulator"] --> GM["GlobalMessenger"] --> VW["ViewportWorlds"]
  end
  subgraph row2[" "]
    direction LR
    GC["GlobalCore"] --- DW["DraggableWindowUMG"]
  end
  OSS --> GC
  OSS --> DW
  VW --> OSS
ModuleResponsibility
OperatingSystemSimulatorCore OS, programs, filesystem, hardware
GlobalCoreShared foundations (required — build project after enabling plugin)
GlobalMessengerUGlobalMessageSubsystem
ViewportWorldsSecondary worlds in OS viewports
DraggableWindowUMGProgram window dragging/resizing

Minimal game module extending OS features:

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine" });
PrivateDependencyModuleNames.AddRange(new string[]
{
"OperatingSystemSimulator",
"GlobalMessenger",
"GameplayTags",
"UMG",
"Slate",
"SlateCore",
"DraggableWindowUMG"
});

Add ViewportWorlds only when using Viewport World.

HeaderTypes
Core/OperatingSystem.hUOperatingSystem
Devices/OperatingSystemBaseDevice.hUOperatingSystemBaseDevice
Programs/OperatingSystemBaseProgram.hUOperatingSystemBaseProgram
Programs/Terminal/OperatingSystemTerminalCommand.hUOperatingSystemTerminalCommand
Files/OperatingSystemFile.hUOperatingSystemFile
Global/OperatingSystemStatics.hUOperatingSystemStatics
Devices/OperatingSystemDeviceMessenger.hDevice messenger
GlobalMessageSubsystem.hGlobal messenger (GlobalMessenger module)
TypeSubclassOverride / implement
ProgramUOperatingSystemBaseProgramOnValidate, OnProgramStarted, OnProgramClosed
Terminal commandUOperatingSystemTerminalCommandOnProcessCommand, OnProcessCommandAsRoot, OnContinueExecution
FileUOperatingSystemFileOnOpen, validation
Program widgetUOperatingSystemProgramWidgetNativeConstruct, UI logic
OS widgetUOperatingSystemWidgetNotification / login implementable events
Setting moduleUOperatingSystemSettingModuleCustom settings panels

Do not subclass UOperatingSystem directly — use UOperatingSystemUnix or UOperatingSystemNonUnix.

Plugin code uses FGenericError and the MAKE_ERROR macro:

OutError = MAKE_ERROR("ERROR_CODE", TEXT("Human-readable message."));

Use in OnValidate, terminal ProcessCommand, and filesystem helpers.

SubsystemAccess
UOperatingSystemGameSubsystemUGameInstance scope
UOperatingSystemWorldSubsystemPer-world device registry, user manager
UGlobalMessageSubsystemUGlobalMessageSubsystem::Get(*World)

EOperatingSystemDeviceState on UOperatingSystemBaseDevice:

stateDiagram-v2
  [*] --> None
  None --> Starting
  Starting --> BIOS
  BIOS --> Running
  Running --> Restarting
  Running --> ShuttingDown
  Running --> BSOD
  Restarting --> Starting
  ShuttingDown --> None
  BSOD --> ShuttingDown

Hook device events on AOperatingSystemDeviceActor in your game code when you need cinematic boot sequences or input lock during BIOS.

TopicTutorial
All extension types (add / extend)C++ Extension Examples
All patterns (cookbook)Examples & Patterns
Native programC++ program from scratch
Terminal commandCustom terminal command
Global MessengerUsing Global Messenger
Device MessengerUsing Device Messenger
Program validationNew Program

Plugin source (private repo): OperatingSystemSimulator/Source/. Regenerate API docs with the monorepo build-api-docs.mjs script when headers change.