Builtin Library
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 returnsnil; 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
Nodeis the base. Subclasses live next door underAnimGraph.module/Node.module/(Clip,Mixer,BlendSpace2D).- Override semantics: default
update/evaluate/destroyare 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
evaluateis owned by the node and must NOT be destroyed by the caller.