Struct AbilityObjectRedirectBroadcast
Tells observers that an ability object's OnHit chain turned it onto a new heading — the fork case, where the hit was accepted and its events redirected the survivor.
public struct AbilityObjectRedirectBroadcast : IBroadcast
- Implements
-
IBroadcast
- Inherited Members
Remarks
The deflect redirect rides AbilityObjectHitBroadcast because a deflection IS the whole outcome; a fork's redirect happens INSIDE the OnHit events, after that message has already gone (it is deliberately sent before the events so a hit is reported even when an authored action destroys the object handling it). So the post-chain heading travels as its own message, on the same reliable ordered channel, and therefore always lands after the hit it belongs to.
An ABSOLUTE heading, for the same reason the deflect's is. A peer that ran the fork
itself — the owner predicting with its reconciled RNG, or an observer that resolved the hit
locally — already holds this exact heading and applies the message as a no-op (the receiver
compares before re-anchoring, because Redirect resets the trajectory leg). The peer
this exists for is the one that could NOT resolve the victim: it dropped the hit, skipped
the fork's RNG draw, and without this flew the old line until the destroy caught up —
re-deriving the heading there was impossible by construction, its generator having missed
the draw.
Fields
AbilityID
Ability the object belongs to.
public long AbilityID
Field Value
CasterObjectID
NetworkObject id of the casting character.
public int CasterObjectID
Field Value
ContainerID
Deterministic container id the object lives in (identical on every peer).
public int ContainerID
Field Value
ObjectID
Object id within the container (identical on every peer).
public int ObjectID
Field Value
PackedHeading
The heading the object left on, packed by AimDirectionCompression.
public uint PackedHeading
Field Value
ServerTick
Server tick the turn happened on.
public uint ServerTick
Field Value
Remarks
AbilityObject.Redirect resets the trajectory leg to zero elapsed ticks, and the
closed-form pose reads that counter — so a receiver applying this message without
advancing it restarts the new leg from the corner at the moment of ARRIVAL, and its
copy trails the server's by the transit delay for the rest of the object's life. The
receiver subtracts its own render lag the same way every other observer clock does; see
AbilityController.ComputeObserverFastForwardTicks.