Present landed impacts: shield ripple, hull reaction and camera kick through one ImpactPresenter

ImpactPresenter (bound on every EntityInstance by SetEntity through the one CapabilityPresentationBinder) renders
feedback-1's absorbs: Feedback.Cue decides intensity and shake, DrawAhead.Carried the drawn point; a hull absorb
spawns ImpactFeedback's pooled effect under the instance, and a cue with shake raises a Cinemachine impulse.
ShieldManager ripples on a Shield-layer absorb. MainMenu gains a Screen Shake slider that persists on Back.
Editor: WireImpactFeedback (scene wiring, scene diff in the next commit) and ImpactPresenterSmoke.
Unity batchmode compile 0 error CS; ImpactPresenterSmoke exit 0. The scene is not yet wired in this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-12 21:10:04 +02:00
commit 97d94ecfae
11 changed files with 310 additions and 1 deletions

View file

@ -167,6 +167,13 @@ public class EntityInstance : MonoBehaviour
if(Shield)
Shield.Entity = entity;
// Landed impacts reach the screen through the entity's one binding: the shield ripple (ShieldManager) and the
// hull reaction and camera kick (ImpactPresenter) subscribe to the Absorb stream the simulation publishes.
var impacts = gameObject.GetComponent<ImpactPresenter>() ?? gameObject.AddComponent<ImpactPresenter>();
impacts.Entity = entity;
(gameObject.GetComponent<CapabilityPresentationBinder>() ?? gameObject.AddComponent<CapabilityPresentationBinder>())
.Bind(entity.Capabilities);
foreach (var hullCollider in HullColliders) hullCollider.Entity = entity;
foreach (var item in entity.Equipment)