namespace AcDream.Core.Physics.Motion;
///
/// R4-V2 — verbatim port of retail's MoveToManager::MovementNode
/// (acclient.h:57702, struct #6350):
///
/// struct __cppobj MoveToManager::MovementNode : DLListData
/// { // +0 dllist_next, +4 dllist_prev (DLListData)
/// MovementTypes::Type type; // +8 — only 7 (MoveToPosition) and 9 (TurnToHeading) ever queued
/// float heading; // +0xc — only meaningful for type 9
/// };
///
///
///
/// NAME WATCH (r4-port-plan.md §3 "New code target"): named
/// MoveToNode, NOT MovementNode, to avoid colliding with R2's
/// (the UNRELATED CMotionInterp::pending_motions
/// node — a different queue on a different class; see the AD-34 register
/// wording on both node types' shared "managed collection standing in for
/// retail's intrusive DLList/LList" pattern).
///
///
///
/// Retail allocates these with operator new(0x10) and links them onto
/// MoveToManager::pending_actions (a DLList — doubly-linked,
/// unlike CMotionInterp's singly-linked LList) via
/// DLListBase::InsertAfter (tail-append; r4-moveto-decomp.md §4a).
/// Ported as a managed
/// of this value type — same pattern as 's port
/// (AD-34 wording): node identity semantics preserved via
/// LinkedListNode<MoveToNode> references rather than raw
/// prev/next pointers, FIFO order preserved via tail-append +
/// RemoveFirst.
///
///
/// Retail type (+8) — only
/// (7) and
/// (9) are ever queued
/// (r4-moveto-decomp.md §4a: AddMoveToPositionNode /
/// AddTurnToHeadingNode are the only two producers;
/// 's dispatch is a defensive
/// if/if, not a full switch — an unknown type stalls rather than
/// throwing, matching the raw's shape).
/// Retail heading (+0xc) — only meaningful for
/// nodes; zero/unused for
/// nodes.
public readonly record struct MoveToNode(MovementType Type, float Heading);