Documentation
    Preparing search index...

    Class KinematicSystem

    Advances every tracked node's KinematicController once per fixed step (§39 step 4).

    const system = new KinematicSystem();
    registry.register(system);
    node.addComponent(new KinematicController());
    node.transformAuthority = "kinematic"; // §42
    system.track(node);

    This system also advances §12's CharacterController and §44's FirstPersonLook, for ConstraintSystem's reason: all three components write a transform under the same "kinematic" authority, and §42's check compares the authority, not the system instance — so a second system would be a second writer that nothing could catch. Within a node the order is fixed:

    1. locomotion — CharacterController (position and yaw);
    2. free look — FirstPersonLook (rotation only);
    3. commands — KinematicController (moveTo, rotateTo, followPath).

    The command channel runs last deliberately: a scripted move is what takes a character away from the player, so an active command wins over locomotion for the steps it runs. They are alternatives, not layers — as an OrbitRig and a FollowRig on one node are.

    A component is stepped only when it is active, and a node whose components are all idle is skipped before the §42 check, so it reports no conflict.

    Tracking is explicit and mirrors MotionSystem's mechanism exactly, for the reasons documented there: the component is looked up every step (so attaching, detaching, or replacing it needs no re-tracking), the tracked set is iterated in insertion order (§33), a node with enabled === false is skipped, and mutating the set during a step follows Set iteration semantics. Stepping allocates nothing (plan D7).

    Implements

    Index
    priority: number

    Execution order key (§39); default PRIORITY_KINEMATICS.

    • get disposed(): boolean

      Whether KinematicSystem.dispose has run. Disposal is terminal (§83): a disposed system refuses its mutating entry points with INVALID_APPLICATION_STATE (§89) rather than silently working.

      Returns boolean

    • get nodes(): IterableIterator<Node>

      Tracked nodes, in the order they will be advanced.

      Returns IterableIterator<Node>

    • get size(): number

      Number of tracked nodes.

      Returns number

    • Stops advancing every node. The system stays registered.

      Returns void

    • Drops every tracked node (§39 teardown).

      Returns void

    • Advances every tracked node's active locomotion and commands by time.fixedDeltaTime, in the order documented on the class.

      Parameters

      Returns void

    • Whether node is tracked.

      Parameters

      Returns boolean

    • No per-registration setup is needed (§39).

      Returns void

    • Starts advancing node. Idempotent — tracking a node twice keeps its original position in the iteration order. Returns node.

      The node need not have a KinematicController yet; it is looked up every step, so tracking first and attaching later is fine.

      Parameters

      Returns Node

    • Stops advancing node. Returns whether it was tracked.

      Parameters

      Returns boolean