Aetheria/Assets/Scripts/Gameplay/CapabilityPresenters.cs
Meta Vens 48b42992ee Loot 3 group A: the grab is presented, not simulated
IGrabPresenter.Grab(GrabEvent) only; the binder's Transform and velocity resolvers go. TractorBeam
presents a running grab (aims at Started's TargetPosition, emits at Power, dark otherwise). FieldDriver
draws its tendril from GrabEvents alone with a real-time phase clock over each event's PhaseDuration and
writes no transform and destroys nothing; its grab times move to FieldTester, now the scene's stand-in sim
that owns its pickup's timeline and pose. ItemPickup keeps its label lit while held. ImpactPresenterSmoke
becomes CapabilityPresentationSmoke with a grab section; its two untracked-ship expectations follow
DrawsAt since contact-hud. Builds (Unity 6000.3.24f1 batchmode: smoke ok, scene opens, no missing script).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:43:15 +02:00

27 lines
893 B
C#

using UnityEngine;
// Presentation-side contract for the capability events in Assets/Scripts/ServerShared/CapabilityEvents.cs
// (docs/headless-playground-cut.md fork L). A presentation implements whichever of these interfaces
// match what it visualizes -- one presentation may implement all four (the field shield), or just one
// (a dedicated melee-blade effect). CapabilityPresentationBinder is what actually wires a presenter's
// method to the matching event stream; a presenter never talks to CapabilityEvents itself.
public interface IAbsorbPresenter
{
void Absorb(AbsorbEvent e);
}
// Presenters read the event and the simulated pose, never a Transform the sim does not own.
public interface IGrabPresenter
{
void Grab(GrabEvent e);
}
public interface IMeleePresenter
{
void Melee(MeleeEvent e);
}
public interface IThrustPresenter
{
void Thrust(ThrustEvent e);
}