Skip to content

Pattern — C++ Program + Blueprint Child

Split program logic between C++ (validation, performance) and a Blueprint child (widget assignment, icons, Store metadata). Recompile only when C++ behavior changes.

flowchart TB
  subgraph cpp["C++ (game module)"]
    Header["UMyNativeProgram.h"]
    Impl["OnValidate, OnProgramStarted"]
  end
  subgraph bp["Blueprint child (Content)"]
    Child["BP_Prog_MyNativeTool"]
    Widget["WBP_MyNativeTool"]
  end
  Header --> Child
  Child -->|"Widget Class, Icon, Store metadata"| Widget
  Child --> Collection["Programs Collection → OS"]
YourGame.Build.cs
PrivateDependencyModuleNames.AddRange(new string[]
{
"OperatingSystemSimulator",
"UMG",
"DraggableWindowUMG"
});
UCLASS(Blueprintable)
class UMyNativeProgram : public UOperatingSystemBaseProgram
{
GENERATED_BODY()
protected:
virtual void OnValidate(FGenericError& OutError) const override;
virtual void OnProgramStarted() override;
};
sequenceDiagram
  participant Dev as Developer
  participant CPP as UMyNativeProgram
  participant BP as BP_Prog_MyNativeTool
  participant OS as UOperatingSystem
  Dev->>CPP: Implement OnValidate / OnProgramStarted
  Dev->>BP: Create Blueprint child
  BP->>BP: Assign Widget Class, icons, Store fields
  Dev->>OS: Add BP child to Programs Collection
  OS->>CPP: Spawns CDO defaults via Blueprint child