Extending OSSIM
OSSIM is designed to be highly extensible. You can add new applications to the environment using either Blueprints (recommended for most users) or C++ (for complex systems).
App Class Hierarchy
Choosing the correct parent class is essential for Blueprint development:
UObject(Engine Base)UAppBase(OSSIM C++ Base - Abstract, cannot be used as a Blueprint parent directly).UBlueprintApp(OSSIM C++ Bridge - Search for "Blueprint App" in the class picker).BP_MyApp(Your custom Blueprint application).
Create App in Blueprint
The UBlueprintApp class allows you to create a complete OS application without writing any C++ code.
1. Create the App Controller
-
In the Content Browser, right-click and select Blueprint Class.
-
In the "Pick Parent Class" dialog, search for "Blueprint App".
-
Select it as the parent class and name your new Blueprint (e.g.,
BP_MyApp). -
Open your new Blueprint and configure the following properties in the Details panel:
App Identity:
AppName: The display name shown in the Start Menu and Window title.AppIconPath: Path to the icon texture (e.g.,/Game/OSSIM_Assets/Icons/MyApp).AppCategory: The Start Menu category (e.g., "Office", "Media").AppDescription: A short tooltip for the icon.
App Window:
InitialWindowSize: The starting dimensions of the app window.Resizable: Whether the user can drag the window edges to resize.Maximizable: Whether the window shows a Maximize button.
App Content:
ContentWidgetClass: Assign the UMG Widget that forms your app's UI.FileAssociations: (Optional) List of extensions this app can handle (e.g., "txt").
App:
WindowChromeClass: Usually set to default window frame (WBP_Window).
2. Implement Logic
Override the following events in your Blueprint App to define behavior (Optional):
- On App Launched: Triggered when the app starts. Use this to parse
LaunchArgsand initialize data. - On App Closed: Triggered when the window is closed. Use this for cleanup.
3. Use the Service Facade
Inside your Blueprint App, you have direct access to core OS services through inherited helper functions:
GetVFS(): Access the virtual filesystem (create files, read directories).GetWindowManager(): Interact with other windows or focus states.GetProcessManager(): Inspect or manage system processes.SetWindowTitle(): Dynamically update the text in the window title bar.
The C++ Workflow
For apps requiring low-level performance or deep engine integrations, you can subclass UAppBase directly.
- Create a new C++ class inheriting from
UAppBase. - Implement the mandatory
PURE_VIRTUALmethods:GetAppName()GetAppIconPath()GetContentWidgetClass()
- Use the protected
WindowChromeClassproperty to define the UI frame.
Implementing the App UI (UMG)
Regardless of whether you use Blueprints or C++, your app's UI widget should follow this standard pattern:
Interface-Driven Initialization
Your content widget must implement the IAppContentWidget interface to receive its controller reference.
- Open your Widget Blueprint.
- Go to Class Settings -> Interfaces -> Implemented Interfaces -> Add -> AppContentWidget.
- In the Graph, double click the yellow "init with App":
Now you should see the "Event Init with App", then wiring something like this:
- Cast
InAppto your specific App class (BP_MyApp). - Store this reference in a variable.
- Use this variable to call functions on your controller.
This pattern ensures your UI remains decoupled from the OS launch logic.
Registering Your App
There is no need to register, any blueprint that inherited from UBlueprintApp are auto-discovered
File Associations
If using UBlueprintApp, simply add the extensions (without the dot) to the FileAssociations array in the Blueprint editor.
Summary Checklist
- Create App Controller (Inherting from Blueprint App).
- Create App UI Widget (implementing IAppContentWidget).
- Assign UI Widget to Controller's
ContentWidgetClass. - (Optional) Define File Associations.
