Skip to content

Status Effects Teaching Demos

This folder contains interactive teaching panels for the Status Effects system.

Unlike the panels in ../HostileConsumers/, these demos attach helper components to the targets they operate on, so that receiver-side behaviour can be demonstrated in a scene that does not already have it wired up.


What These Panels Are Allowed To Do

Panels in this folder may:

  • Attach teaching-only helper components from ../Support/ to a bound target
  • Install an implementation of a public seam onto an object the panel does not own
  • Remove those helpers again when the demo is finished
  • Provide interactive controls for exploring runtime state

Because of this, they are not used as verification of the public API surface.

That is a statement about what they prove, not about what they are allowed to touch. These panels still use only public APIs, still contain no reflection, and are still covered by the TeachablesNoReflectionGate and TeachablesNoInternalNamespaceGate export gates like every other panel in the framework.


Panels in This Folder

Panel Teaches Attaches
StatusCleanseDispelPanel Removal and protection: cleanse, dispel, immunity, and resistance DemoStatusImmunity, DemoStatusResistance
StatusPotencyAurasPanel Receiver-side scaling: potency multipliers and aura patterns DemoStatusPotency, DemoStatusResistance
StatusSnapshotsTimePanel Snapshot capture and restore, and time modes a panel-local ITimeSource implementation

The helpers are not cleaned up on their own. Nothing here removes an attached helper when the panel is disabled, when the target changes, or when Play Mode ends — a helper stays on the GameObject it was added to, and in Edit Mode it is added to the scene for real and will be saved with it.

Removal is a control, not a lifecycle. StatusCleanseDispelPanel and StatusPotencyAurasPanel destroy their adapters only when you ask them to: turn Enabled off and press Apply Immunity / Apply Resistance, or press Remove Aura. StatusSnapshotsTimePanel has no removal control at all — the ITimeSource it installs stays until you delete the component yourself.

That is deliberate: a helper that vanished under you would make the seam it demonstrates impossible to inspect. But it means a demo scene you have been experimenting in can be carrying adapters you have forgotten about, and they keep affecting applies. If a status is behaving oddly, check the target's component list before suspecting the controller.


A Judgement Call Worth Recording

StatusSnapshotsTimePanel is the least obvious member of this folder, and it was placed here deliberately rather than by default.

It installs a small ITimeSource implementation, defined inside the panel file itself, onto the bound target in order to demonstrate scaled time. Writing your own ITimeSource and plugging it in is the supported extension path, which is the most hostile-consumer thing a panel can do — a real consumer implementing a public seam.

It sits here anyway because the classification rule is about whose object changes, not about whether the API used is public. The panel modifies a test target during Play Mode, and that is the line the other systems' Demos/ folders already draw.

The cost of the call is worth naming: the clearest worked example of the ITimeSource seam now lives in a folder labelled "not proof of the public surface". If that trade stops looking right, the panel moves and this section goes with it — the rule should not bend quietly for one sympathetic case.


Reading These Panels

The service calls and result handling are still worth copying. What is not worth copying is the helper-attachment: in your own project you would author those components onto your actors deliberately, rather than having a panel install them at runtime to keep a demo self-contained.

The helper components themselves are documented in ../Support/.


Related