PulseFoundation
PulseFoundation is the free base plugin of the Pulse plugins. Every Pulse plugin depends on it, and it is the only Pulse plugin they may depend on. It holds the code all plugins share, so the plugins work together without knowing each other, and it gives every plugin the same debugging tools.
You can also use it in your own game code: the message bus, the player settings registry and the debug tools work for game code the same way they work for the plugins.
Documentation map
New to Pulse? The Learn lessons build something small in your own project, step by step.
- Getting started: enable the plugin, first message, first player setting
- Fab packages and separate plugins: the two ways Pulse Foundation comes into a project, one copy per project, the suggestion of Pulse HUB
- Message bus: send and receive messages between plugins and game code
- Message channels: every channel of the Pulse plugins with payload, origin, context and amount
- Player resolution: find the controller, pawn, player state and components of a player
- Conditions and context: condition lists with All, Any and Unknown, conditions in C++ and Blueprint, costs paid all or nothing with rounding over the whole, rewards, and the context they share with messages
- Results of requests: one result type for every plugin (reason tag, text, details) and the way back to the client that asked
- Exchanges: trades, crafting and purchases all or nothing across players and plugins, undone when one step fails
- Areas: boxes, spheres and spline areas with tags, priority and edge weight; which areas are at a place, players entering and leaving
- Teams: the team of any actor (interface, team component, the player’s team from its pawn), same team, setting teams on the authority
- Serialization: versioned bytes for save data, import reports
- Saving while the game runs: save and load status for every plugin, the load barrier, rules for consistent saves
- Player settings: register settings that any settings menu shows
- Accessibility: color vision, text size, interface size, less motion, toggle instead of hold
- UI themes: one look for all Pulse widgets, style roles, Pulse Style component, UI motion, key icons
- Sounds: one reference to a sound asset or a Pulse Sound event, played 2D, at a location or attached
- Clocks: game, server and real time, points in time and timers that survive pauses, loading and streaming
- Debugging: reports, timeline, snapshots, gameplay debugger, Pulse Debugger window, cheats
- Console: console commands, cheats and log categories
- Utilities: handles, instanced struct sets, async loading, settings base class, test helpers
- Editor kit: asset editors with validation and notes, graph editors with cards, comments and auto layout
- Pulse workflow: every plugin in the same four steps, Set Up, Create, Test, Check
- Project settings
- Config files: save Project Settings to platform files and custom configs, see a setting’s value in every file
- API reference
- Pulse helpers API reference (module
PulseGameCore) - Using PulseFoundation in a Pulse plugin
- Examples: message bus, player settings and UI theme in a small Blueprint scene
- Learning paths: lessons for your plugin, the checks and actions of their steps, keeping them working
At a glance
- Enable Pulse Foundation (other Pulse plugins enable it for you).
- Send a message:
UPulseMessageSubsystem::Get(this)->Broadcast(Channel, Payload), receive it with the Blueprint node Listen For Pulse Message. - Give your game or plugin player settings: derive from
UPulsePlayerSettings, declare the properties, and every settings menu built onUMVVMPulseSettingsshows them. - Give widgets a look from the UI theme: add the UI component Pulse Style and pick a role (
Pulse.UI.Text.Body,Pulse.UI.Panel.Popup, …); change the theme in Project Settings > Pulse > Foundation > UI. - Open Tools > Debug > Pulse Debugger while playing in the editor to see an overview of problems, reports, live state (server and client side by side) and the event timeline of all Pulse plugins.
Modules
| Module | Type | Content |
|---|---|---|
PulseGameCore | Runtime | Helper libraries, async trace, input helpers (moved from PulseCore, names unchanged) |
PulseFoundation | Runtime | Message bus, player resolution, serialization, player settings registry, handles, loading, reports, timeline, snapshots, cheats, test helpers |
PulseFoundationMVVM | Runtime | View model base bound to a player, resolver, settings view models |
PulseFoundationUI | Runtime | UI themes, style roles, Pulse Style component, theme per player, UI motion (CommonUI) |
PulseFoundationDebug | Runtime | Gameplay debugger categories for snapshots (only in builds with gameplay debugger) |
PulseFoundationEditor | Editor | Pulse Debugger window and the building blocks for plugin pages, editor kit for asset and graph editors |
Compatibility
PulseFoundation follows semantic versioning. Minor versions only add API; removed or changed API is deprecated with UE_DEPRECATED for at least one minor version before a major version removes it. Plugins check the version with PULSE_FOUNDATION_VERSION_AT_LEAST(Major, Minor) and name their minimum version in their README.