Log inGet started
World

Builtin Library

Branchmain
Branchesmainpublish
Commit65083fe8f2

README.md

Node

Base class for AnimGraph nodes. Subclasses (Clip, Mixer, BlendSpace2D) typically wrap setmetatable(Node.new(), <Subclass>) and then set subclass-specific fields before overriding the three lifecycle methods.

Exports

  • Node.new() -> Node — allocate a bare Node table (no Channels, no buffer).
  • Node:update(dt: number) — advance internal state (clip playhead, weight ramps, …). Default is a no-op; subclasses override.
  • Node:evaluate() -> TypedBuffer? — produce a pose buffer. Caller MUST NOT destroy. Default returns nil; subclasses override.
  • Node:destroy() — free owned Channel/buffer/Layout handles. Default is a no-op; subclasses override.

Types:

  • Node = { kind: string? }

Usage

local Node = require("@builtin::systems.anim.AnimGraph.Node")

-- Subclassing pattern:
local MyNode = setmetatable({}, { __index = Node })
MyNode.__index = MyNode
MyNode.kind = "MyNode"

function MyNode.new()
    local self = setmetatable(Node.new(), MyNode)
    -- subclass-specific fields
    return self
end

function MyNode:update(dt) ... end
function MyNode:evaluate() ... end
function MyNode:destroy() ... end

Notes

  • Node is the base. Subclasses live next door under AnimGraph.module/Node.module/ (Clip, Mixer, BlendSpace2D).
  • Override semantics: default update / evaluate / destroy are safe no-ops, so subclasses that only need one of them can leave the rest at the base implementation.
  • Buffer ownership: the buffer returned by evaluate is owned by the node and must NOT be destroyed by the caller.