Pulsors

How to work with the GS_Interaction Pulsor system — emitting typed physics-based pulse events and reacting to them from scripts.

The Pulsor system is a physics-driven event broadcast layer. A PulsorComponent lives on any entity with a trigger collider and emits a typed pulse event when another entity enters or exits that volume. PulseReactorComponent instances on the receiving entity listen for those events and respond. Because pulse types are polymorphic and registered at runtime, you can define project-specific pulse types without modifying the Pulsor or Reactor components themselves.

For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Pulsor component in the O3DE Inspector

 

Contents


How Pulses Work

Pulse Pattern Graph

Breakdown

Pulse Reactor component in the O3DE Inspector

When a physics trigger fires, the PulsorComponent iterates all PulseReactorComponent instances on the entering entity and calls ReceivePulses() on each one that returns true from IsReactor() for the emitted pulse type. Each reactor independently decides whether it handles a given pulse, so multiple reactors on one entity can each respond to a different subset of pulse types without interfering with each other.

StepWhat Happens
1 — Collider overlapPhysics system detects entity entering the Pulsor’s trigger volume.
2 — Pulse emitPulsorComponent reads its configured PulseType and prepares the event.
3 — Reactor queryEach PulseReactorComponent on the entering entity is called with IsReactor() for that type.
4 — ReactionReactors that return true have ReceivePulses() called and execute their response.

E Indicates extensible classes and methods.

Patterns - Complete list of system patterns used in GS_Play.


Pulse Types

A pulse type is a class derived from the abstract PulseType base. It carries no payload — the type itself is the signal. Reactors match on type identity, so adding a new type automatically makes it distinct from all existing ones.

Built-In Pulse Types

TypePurpose
Debug_PulseTest and development use. Logs or prints when received.
Destruct_PulseSignals that the receiving entity should be destroyed or deactivated.

Reactor Types

A reactor type is a class derived from the abstract ReactorType base. It defines what the receiving entity does when a matching pulse arrives. One entity can carry multiple reactors — one for each pulse type it needs to handle.

Built-In Reactor Types

TypePaired WithBehavior
Debug_ReactorDebug_PulseOutputs a debug message when it receives a matching pulse.
Destructable_ReactorDestruct_PulseHandles entity destruction or deactivation on pulse receipt.

Extending with Custom Pulse Types

Custom pulse and reactor types are discovered automatically through O3DE serialization at startup. Any team or plugin can add new interaction semantics — damage types, pickup types, status effects — by extending the base class and reflecting it, without modifying GS_Interaction itself. Custom types appear automatically as options in the editor’s component property dropdowns and are available to all Pulsors and Reactors in the project.

For the full extension guide and C++ interface, see Framework API: Pulsors and Framework API: Pulses.


Components

ComponentRoleKey Bus
PulsorComponentEmits a typed pulse when its trigger volume fires.
PulseReactorComponentReceives pulses and executes a reaction if the type matches.PulseReactorRequestBus (ById)

ScriptCanvas Usage

PulseReactorNotificationBus exposes the reactor’s state for script-driven queries. A common pattern is to wait for a Reactor to receive a pulse, then process its incoming data for your own pulse processing.


Quick Reference

NeedBusMethod
Check if entity handles a pulse typePulseReactorRequestBus (ById)IsReactor()
Manually trigger pulse processingPulseReactorRequestBus (ById)ReceivePulses()

Glossary

TermMeaning
PulsorA component that emits a typed pulse event when its trigger volume fires
Pulse ReactorA component that receives pulses and executes a response if the type matches
Pulse TypeA polymorphic class that identifies the kind of pulse being emitted

For full definitions, see the Glossary.


See Also

For the full API, component properties, and C++ extension guide:

For related systems:


Get GS_Interaction

GS_Interaction — Explore this gem on the product page and add it to your project.