Aetheria/Assets/Scripts/Gameplay/CapabilityPresenters.cs
Meta Vens 5aa989abbf Pickup is a capability: PickupData/Pickup run a timed grab through Zone's hold API and TryPickUp (group A, sim)
GrabEvent carries a FloatingBodyId; Zone gains TryHold/SetHeldProgress/Free and places a held item instead of
integrating it; Entity.TractorPower is derived from Pickup.Power and TractorCommand is the pilot's input
(ActionGameManager writes it undamped, the Time.deltaTime ramp is deleted). Binder and FieldTester change the
delegate type only. PickupTests and a save round-trip pin for the player's zone index.

Group A builds; no beam is on any generated ship until group B.

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

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
// Target is a plain identity, not a Unity reference). The binder resolves the id 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);
}