IAbsorbPresenter/IGrabPresenter/IMeleePresenter/IThrustPresenter let a Unity component declare which capability events it visualizes without knowing about CapabilityEvents itself. CapabilityPresentationBinder is the only thing that subscribes a presenter to its matching stream, resolving a GrabEvent's plain target handle to a live Transform (and initial velocity) through delegates its owner supplies, since the engine-free GrabEvent can't carry a Unity reference. Neither file knows about FieldDriver or any other concrete presentation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.2 KiB
C#
30 lines
1.2 KiB
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);
|
|
}
|
|
|
|
// Grab needs a live Transform to animate, which the engine-free GrabEvent cannot carry (its
|
|
// TargetHandle is a plain identity, not a Unity reference). The binder resolves the handle through a
|
|
// delegate supplied by the event source's owner and hands the presenter the result, along with the
|
|
// initial velocity the target was already moving with (also owner-supplied, for the same reason).
|
|
public interface IGrabPresenter
|
|
{
|
|
void Grab(GrabEvent e, Transform target, Vector3 initialVelocity);
|
|
}
|
|
|
|
public interface IMeleePresenter
|
|
{
|
|
void Melee(MeleeEvent e);
|
|
}
|
|
|
|
public interface IThrustPresenter
|
|
{
|
|
void Thrust(ThrustEvent e);
|
|
}
|