using Unity.Entities;
namespace ProjectM.Simulation
{
/// 07-21 G6 (socket honesty, design review wf_98bf1268): SERVER-ONLY scheduled Cone-socket cleave —
/// the schedule-and-consume idiom applied to the SpecialSlam (Cone archetype)
/// socket, so its damage lands at the animation's visual contact instead of the fire tick. Stamped by
/// AbilityFireSystem when a Cone socket fires (ResolveTick = fire + TuningConfig.ConeContactTicks; knob 0 =
/// legacy immediate, no stamp), fired on a wrap-safe elapsed compare from LIVE state (cast-turn steers the
/// cone until contact; stats re-folded at resolve), CONSUMED by zeroing. A still-armed pending is FLUSHED
/// (fired early) before a recast overwrites it. Cleared on death (PlayerDeathStateSystem — an armed pending
/// must never fire from the respawn position) and by the dev SetClass swap (socket identity changes).
/// At resolve the socket is re-validated (bounds + still a Cone Spark) — consume-drop on mismatch.
/// Not replicated; client contact cues are presentation-side (CombatFeedbackSystem). Baked zeroed.
public struct ConeContactPending : IComponentData
{
/// NonZero tick the armed cone's slam lands; 0 = nothing pending.
public uint ResolveTick;
/// Socket index (0..SocketId.Count-1) of the ARMED cast — stats/aim re-read live at resolve.
public byte Socket;
}
}