ReadonlycolumnsReadonlyheightReadonlyrowsReadonlywidththe current position of one point: rest plus whatever drag/nudge applied
Move one control point to an absolute local position. Only that point changes; every other point stays pinned at rest.
Move a batch of control points, validating the entire batch before changing any.
the flat index of the point at (column, row); throws a RangeError outside the grid
whether a point currently sits away from its rest position
how many points currently sit away from their rest positions
Shift one control point by a delta; the rest stay pinned, as with drag.
a copy of every current position, row-major (x, y) pairs for a mesh buffer
Adopt externally built rest positions, clearing every offset. DeformableSprite
uses this to adopt the GPU plane's own floats, so pinned vertices stay
bit-identical to what the mesh already renders instead of nearly equal.
Return one point to rest, or every point when called without an index.
Optionalindex: numberthe rest position of one point; the value pinned points always report
Write every current position into into, which must hold exactly
count * 2 floats. The mesh side calls this with its GPU position array.
A pinned-point deformation grid: the renderer-free math behind roadmap item 414.
The grid holds
columns * rowscontrol points over awidth * heightrest rectangle. Every point stays exactly at its rest position until the game drags it with PinnedDeform.drag (or PinnedDeform.nudge); there is no falloff onto neighbours, no smoothing pass and no whole-sprite rotation, so a Pontifex wingtip can move while the wing root stays bit-identical. UVs are not modelled here at all: this class only tracks positions, and the GPU side (DeformableSprite) leaves its UV buffer untouched.Example