Interfaces
Categories:
GS_Core/Interfaces/ is the framework’s cross-gem contract layer. Feature gems no longer depend on each other’s internals — they depend on neutral contracts collected here in GS_Core. A contract lives in GS_Core; the feature gem that produces it owns and operates it. GS_Core holds the agreement, the gem holds the behavior.
This is the layer that lets GS_Interaction emit a “pulse received” signal that GS_Juice can react to without either gem including the other.
Contents
- Why This Layer Exists
- The Three Contract Kinds
- The Glance Test
- Status at a Glance
- Where Contracts Live
- See Also
Why This Layer Exists
Before this layer, cross-gem features were glued together by bridge components — a component in GS_Complete whose only job was to listen to one gem and drive another (e.g. listen to GS_Unit possession, drive a GS_PhantomCam target). Every such bridge carried a hard dependency on both gems’ internals.
Once both sides speak a Core contract, those bridges collapse into their natural gem and shed the cross-gem-internals dependency. Feature glue now lives in the gem that owns the feature, not in a catch-all integration gem.
The GS_Complete collapse
This effort dissolved GS_Complete’s bridge components: a paper-facing camera handler moved to GS_Performer, and a dialogue-select button, a possession→cam-target utility, and a cinematic controller all repointed to Core contracts and dropped their producing-gem includes.The Three Contract Kinds
The layer collects exactly three kinds of contract. The kind tells you how to extend it.
| Kind | Pattern | One-line | Extend by |
|---|---|---|---|
| TypeBase | Strategy | “Inherit this and you’re plugged in.” | Subclass a *Type base, reflect it → it appears in the editor’s type-picker. |
| Emit | Observance | “Wait for this signal, then act.” | Handle the *EmissionBus (C++ or ScriptCanvas) and override the event you care about. |
| Exchange | Mediator | “Ask, a provider answers.” | Call the *Exchange query bus. (Rare today — mostly forward-looking.) |
Full mechanics, editor/script appearance, and an authoring how-to for each are on the Classifications page.
The Glance Test
The class/bus suffix encodes scope and kind, so you can classify any bus at a glance:
| Suffix | Meaning |
|---|---|
*Requests / *Notifications | In-gem bus — internal to one gem, not a cross-gem contract. |
*Type (a base class) | TypeBase contract — a pickable Strategy base. |
*Emissions / *EmissionBus | Emit contract — a one-way observation bus. |
*Exchange / *ExchangeBus | Exchange contract — a two-way request/fulfill bus. |
Never named *Service
A contract bus is never named*Service — that collides with O3DE component-service CRCs (GetProvidedServices). A command/query bus that has not yet earned Exchange status keeps the in-gem *Requests name.Status at a Glance
| Kind | Shipped | Notes |
|---|---|---|
| TypeBase | 9 Strategy bases — built & verified | The compiled, reflected contracts. |
| Emit | 13 observation buses across 8 gems | All built, except GS_Cinematics’ three (Typewriter / Cinematic / DialogueSequence) which are code-complete but pending a build — treat their detail as provisional. |
| Exchange | 1 (CamCoreExchange) | The rest (Play/Stop family, graph parameters, surface query, CamManager queries) are planned and not yet shipped. |
The full per-contract breakdown is in the Contract Reference.
Where Contracts Live
Contracts are collected under GS_Core/Interfaces/<Capability>/ by capability (Camera, Pulse, Trigger, Dialogue, Motion, Targeting, UI, Possession, Cinematics, Time) — not by gem. One capability may be produced by one gem and consumed by several.
- Emit / Exchange buses are header-only in Core (an EBus is runtime, not serialized). The producing gem reflects them to ScriptCanvas.
- TypeBase classes are compiled (
.h+.cpp) and registered in the Core reflection aggregator, so a base is reflected ahead of any gem’s subtypes by module load order.
See the Contract Reference for the full capability-folder map and which gem produces each.
See Also
- Classifications — the three kinds in depth, with an authoring how-to for each.
- Contract Reference — every contract by capability + producer, with status.
- Framework API: GS_Core — the gem that houses this layer.
Get GS_Core
GS_Core — Explore this gem on the product page and add it to your project.