Performances
Categories:
Performances are asynchronous actions executed from PerformanceNodeData nodes within a dialogue sequence. When the Dialogue Sequencer encounters a performance node, it instantiates the appropriate DialoguePerformance subclass, starts it, and waits for it to signal completion before advancing to the next node.
All performances are polymorphic by extending the class they automatically populate the performances list when adding performances to a node.
For usage guides and setup examples, see The Basics: GS_Cinematics.
Contents
- DialoguePerformance (Abstract Base)
- MoveTo_DialoguePerformance
- PathTo_DialoguePerformance
- RepositionPerformer_DialoguePerformance
- Complete Performance Type Reference
- Creating a Custom Performance
- See Also
DialoguePerformance (Abstract Base)
The base class for all dialogue performances. Extends AZ::TickBus::Handler so that performances can drive time-based behavior across multiple frames.
| Property | Type | Description |
|---|---|---|
| TypeId | {BCCF5C52-42C3-49D4-8202-958120EA8743} | |
| Tick Handler | AZ::TickBus::Handler | Performances connect to TickBus during execution for frame-by-frame updates. |
Virtual Methods
| Method | Description |
|---|---|
DoPerformance() | Entry point called by the sequencer. Sets up the performance and calls ExecutePerformance(). |
ExecutePerformance() | Core execution logic. Override this in subclasses to implement the actual behavior (movement, animation, etc.). |
FinishPerformance() | Called when the performance is complete. Disconnects from TickBus and signals the sequencer via DialogueSequencerRequestBus::OnPerformanceComplete(). |
Lifecycle
- The sequencer encounters a
PerformanceNodeDataand instantiates the correspondingDialoguePerformancesubclass. - The sequencer calls
DoPerformance(). DoPerformance()connects toTickBusand callsExecutePerformance().- The performance runs across multiple ticks until its completion condition is met.
- The performance calls
FinishPerformance(), which disconnects fromTickBusand notifies the sequencer. - The sequencer advances to the next node.
MoveTo_DialoguePerformance
Moves a performer entity to a named stage marker position over time using direct interpolation (no navmesh). Suitable for short-distance movements within a scene where pathfinding is unnecessary.
| Property | Type | Description |
|---|---|---|
| TypeId | {6033A69D-F46F-40DF-A4A0-A64C4E28D6D5} | |
| Target | Stage marker name | The destination position, resolved through CinematicsManagerRequestBus::GetStageMarker(). |
| Speed / Duration | float | Controls how quickly the performer reaches the target. |
Request Bus: MoveTo_PerformanceRequestBus
| Method | Parameters | Returns | Description |
|---|---|---|---|
StartMoveTo | AZ::EntityId performer, AZ::Vector3 target, float speed | void | Begins moving the performer entity toward the target position. |
Notification Bus: MoveTo_PerformanceNotificationBus
| Event | Description |
|---|---|
OnMoveToComplete | Fired when the performer reaches the target position. The performance calls FinishPerformance() in response. |
PathTo_DialoguePerformance
Navigates a performer entity to a named stage marker along a RecastNavigation navmesh path. Suitable for longer-distance movements where the performer must navigate around obstacles. Requires RecastNavigation to be enabled in the project.
| Property | Type | Description |
|---|---|---|
| TypeId | {C0DF4B0E-924D-4C38-BD26-5A286161D95C} | |
| Target | Stage marker name | The destination position, resolved through CinematicsManagerRequestBus::GetStageMarker(). |
| Navigation | RecastNavigation | Uses the navmesh to compute a valid path from the performer’s current position to the target. |
Request Bus: PathTo_PerformanceRequestBus
| Method | Parameters | Returns | Description |
|---|---|---|---|
StartPathTo | AZ::EntityId performer, AZ::Vector3 target | void | Computes a navmesh path and begins navigating the performer toward the target. |
Notification Bus: PathTo_PerformanceNotificationBus
| Event | Description |
|---|---|
OnPathToComplete | Fired when the performer reaches the end of the computed path. The performance calls FinishPerformance() in response. |
RepositionPerformer_DialoguePerformance
Instantly teleports a performer entity to a named stage marker position. No interpolation, no pathfinding – the entity is moved in a single frame. Useful for off-screen repositioning between scenes or for snapping a performer to a mark before a sequence begins.
| Property | Type | Description |
|---|---|---|
| TypeId | {DE1E0930-F0A4-4F60-A741-4FB530610AEE} | |
| Target | Stage marker name | The destination position, resolved through CinematicsManagerRequestBus::GetStageMarker(). |
Notification Bus: RepositionPerformer_PerformanceNotificationBus
| Event | Description |
|---|---|
OnRepositionComplete | Fired immediately after the performer is teleported. The performance calls FinishPerformance() in the same frame. |
Complete Performance Type Reference
| Type | TypeId | Movement | Navigation |
|---|---|---|---|
DialoguePerformance | {BCCF5C52-42C3-49D4-8202-958120EA8743} | Abstract base | – |
MoveTo_DialoguePerformance | {6033A69D-F46F-40DF-A4A0-A64C4E28D6D5} | Interpolated | None |
PathTo_DialoguePerformance | {C0DF4B0E-924D-4C38-BD26-5A286161D95C} | Navmesh path | RecastNavigation |
RepositionPerformer_DialoguePerformance | {DE1E0930-F0A4-4F60-A741-4FB530610AEE} | Instant teleport | None |
Creating a Custom Performance
To add a custom performance type from an external gem:
1. Define the class
#pragma once
#include <GS_Cinematics/Dialogue/Performances/DialoguePerformance.h>
namespace MyGem
{
class PlayAnimation_DialoguePerformance : public GS_Cinematics::DialoguePerformance
{
public:
AZ_RTTI(PlayAnimation_DialoguePerformance, "{YOUR-UUID-HERE}", GS_Cinematics::DialoguePerformance);
AZ_CLASS_ALLOCATOR(PlayAnimation_DialoguePerformance, AZ::SystemAllocator);
static void Reflect(AZ::ReflectContext* context);
protected:
void ExecutePerformance() override;
void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
private:
AZStd::string m_animationName;
bool m_animationComplete = false;
};
}
2. Implement and register
void PlayAnimation_DialoguePerformance::ExecutePerformance()
{
// Start the animation on the performer entity
// Listen for animation completion
}
void PlayAnimation_DialoguePerformance::OnTick(float deltaTime, AZ::ScriptTimePoint time)
{
if (m_animationComplete)
{
FinishPerformance();
}
}
See Also
For conceptual overviews and usage guides:
- Dialogue System Overview – Manager APIs and extensible types
- GS_Cinematics Overview – Stage markers and cinematic mode
For component references:
- Dialogue Sequencer – How the sequencer drives performances
- Dialogue Actors – Performer markers that performances target
For related resources:
- Dialogue Data Structure – PerformanceNodeData and extension guide
Get GS_Cinematics
GS_Cinematics — Explore this gem on the product page and add it to your project.