Interfaces

The cross-gem contract layer — neutral agreements collected in GS_Core so feature gems depend on contracts instead of on each other’s internals. Covers the three contract kinds (TypeBase, Emit, Exchange).

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

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 Three Contract Kinds

The layer collects exactly three kinds of contract. The kind tells you how to extend it.

KindPatternOne-lineExtend by
TypeBaseStrategy“Inherit this and you’re plugged in.”Subclass a *Type base, reflect it → it appears in the editor’s type-picker.
EmitObservance“Wait for this signal, then act.”Handle the *EmissionBus (C++ or ScriptCanvas) and override the event you care about.
ExchangeMediator“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:

SuffixMeaning
*Requests / *NotificationsIn-gem bus — internal to one gem, not a cross-gem contract.
*Type (a base class)TypeBase contract — a pickable Strategy base.
*Emissions / *EmissionBusEmit contract — a one-way observation bus.
*Exchange / *ExchangeBusExchange contract — a two-way request/fulfill bus.

Status at a Glance

KindShippedNotes
TypeBase9 Strategy bases — built & verifiedThe compiled, reflected contracts.
Emit13 observation buses across 8 gemsAll built, except GS_Cinematics’ three (Typewriter / Cinematic / DialogueSequence) which are code-complete but pending a build — treat their detail as provisional.
Exchange1 (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


Get GS_Core

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