@flighthq/skeleton2d 0.3.0-next.1783.cd11ab1 → 0.3.0-next.1848.58f06fb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/boundingBoxAttachment2D.d.ts +3 -0
  2. package/dist/boundingBoxAttachment2D.d.ts.map +1 -0
  3. package/dist/boundingBoxAttachment2D.js +14 -0
  4. package/dist/boundingBoxAttachment2D.js.map +1 -0
  5. package/dist/clippingAttachment2D.d.ts +7 -0
  6. package/dist/clippingAttachment2D.d.ts.map +1 -0
  7. package/dist/clippingAttachment2D.js +26 -0
  8. package/dist/clippingAttachment2D.js.map +1 -0
  9. package/dist/contract.d.ts +8 -0
  10. package/dist/contract.d.ts.map +1 -1
  11. package/dist/contract.js +8 -0
  12. package/dist/contract.js.map +1 -1
  13. package/dist/deformAnimationTarget2D.d.ts +2 -0
  14. package/dist/deformAnimationTarget2D.d.ts.map +1 -0
  15. package/dist/deformAnimationTarget2D.js +40 -0
  16. package/dist/deformAnimationTarget2D.js.map +1 -0
  17. package/dist/deformMeshAttachment2D.d.ts.map +1 -1
  18. package/dist/deformMeshAttachment2D.js +2 -57
  19. package/dist/deformMeshAttachment2D.js.map +1 -1
  20. package/dist/deformPathAttachment2D.d.ts.map +1 -1
  21. package/dist/deformPathAttachment2D.js +2 -57
  22. package/dist/deformPathAttachment2D.js.map +1 -1
  23. package/dist/explainSkeleton2DDeformLength.d.ts +3 -0
  24. package/dist/explainSkeleton2DDeformLength.d.ts.map +1 -0
  25. package/dist/explainSkeleton2DDeformLength.js +23 -0
  26. package/dist/explainSkeleton2DDeformLength.js.map +1 -0
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/pointAttachment2D.d.ts +4 -0
  32. package/dist/pointAttachment2D.d.ts.map +1 -0
  33. package/dist/pointAttachment2D.js +34 -0
  34. package/dist/pointAttachment2D.js.map +1 -0
  35. package/dist/skeleton2dAnimationTarget.d.ts +8 -0
  36. package/dist/skeleton2dAnimationTarget.d.ts.map +1 -1
  37. package/dist/skeleton2dAnimationTarget.js +19 -11
  38. package/dist/skeleton2dAnimationTarget.js.map +1 -1
  39. package/dist/skeleton2dDrawOrderTarget.d.ts +38 -0
  40. package/dist/skeleton2dDrawOrderTarget.d.ts.map +1 -0
  41. package/dist/skeleton2dDrawOrderTarget.js +107 -0
  42. package/dist/skeleton2dDrawOrderTarget.js.map +1 -0
  43. package/dist/skinAttachment2DPoints.d.ts +3 -0
  44. package/dist/skinAttachment2DPoints.d.ts.map +1 -0
  45. package/dist/skinAttachment2DPoints.js +85 -0
  46. package/dist/skinAttachment2DPoints.js.map +1 -0
  47. package/dist/slotDeform2D.d.ts +4 -0
  48. package/dist/slotDeform2D.d.ts.map +1 -0
  49. package/dist/slotDeform2D.js +38 -0
  50. package/dist/slotDeform2D.js.map +1 -0
  51. package/package.json +9 -8
  52. package/src/boundingBoxAttachment2D.test.ts +84 -0
  53. package/src/clippingAttachment2D.test.ts +76 -0
  54. package/src/deformAnimationTarget2D.test.ts +143 -0
  55. package/src/explainSkeleton2DDeformLength.test.ts +55 -0
  56. package/src/ikConstraint2D.test.ts +11 -1
  57. package/src/pathConstraint2D.test.ts +15 -2
  58. package/src/pointAttachment2D.test.ts +81 -0
  59. package/src/skeleton2dAnimationTarget.test.ts +17 -0
  60. package/src/skeleton2dConstraint.test.ts +16 -2
  61. package/src/skeleton2dDrawOrderTarget.test.ts +213 -0
  62. package/src/skinAttachment2DPoints.test.ts +138 -0
  63. package/src/slotDeform2D.test.ts +132 -0
  64. package/src/transformConstraint2D.test.ts +15 -2
@@ -0,0 +1,3 @@
1
+ import type { BoundingBoxAttachment2D, Skeleton2D } from '@flighthq/types/contract';
2
+ export declare function computeSkeleton2DBoundingBoxAttachmentVertices(out: Float32Array, attachment: Readonly<BoundingBoxAttachment2D>, skeleton: Readonly<Skeleton2D>, boneIndex: number, deform?: Readonly<Float32Array> | null): void;
3
+ //# sourceMappingURL=boundingBoxAttachment2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundingBoxAttachment2D.d.ts","sourceRoot":"","sources":["../src/boundingBoxAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAapF,wBAAgB,8CAA8C,CAC5D,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAC7C,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CAUN"}
@@ -0,0 +1,14 @@
1
+ import { skinSkeleton2DAttachmentPoints } from './skinAttachment2DPoints';
2
+ // Produces a bounding box's world polygon as flat interleaved `[x0, y0, x1, y1, …]` in `out` (length
3
+ // ≥ 2 × attachment.pointCount), for hit testing and region queries. Requires
4
+ // `computeSkeleton2DWorldTransforms` to have filled `skeleton.worldMatrices`. Out-parameter,
5
+ // allocation-free.
6
+ //
7
+ // It is `compute*` rather than `deform*` because nothing here is being drawn: the result is queried. The
8
+ // skinning underneath is identical to a mesh's, which is the point — a hit box bound to the same bones as
9
+ // the art it covers tracks that art exactly, rather than approximating it with a shape that drifts as the
10
+ // rig moves.
11
+ export function computeSkeleton2DBoundingBoxAttachmentVertices(out, attachment, skeleton, boneIndex, deform = null) {
12
+ skinSkeleton2DAttachmentPoints(out, attachment.skin, attachment.vertices, skeleton, boneIndex, deform, 'BoundingBoxAttachment2D');
13
+ }
14
+ //# sourceMappingURL=boundingBoxAttachment2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundingBoxAttachment2D.js","sourceRoot":"","sources":["../src/boundingBoxAttachment2D.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,qGAAqG;AACrG,6EAA6E;AAC7E,6FAA6F;AAC7F,mBAAmB;AACnB,EAAE;AACF,yGAAyG;AACzG,0GAA0G;AAC1G,0GAA0G;AAC1G,aAAa;AACb,MAAM,UAAU,8CAA8C,CAC5D,GAAiB,EACjB,UAA6C,EAC7C,QAA8B,EAC9B,SAAiB,EACjB,SAAwC,IAAI;IAE5C,8BAA8B,CAC5B,GAAG,EACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,QAAQ,EACnB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,yBAAyB,CAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ClippingAttachment2D, Skeleton2D } from '@flighthq/types/contract';
2
+ export declare function computeSkeleton2DClippingAttachmentVertices(out: Float32Array, attachment: Readonly<ClippingAttachment2D>, skeleton: Readonly<Skeleton2D>, boneIndex: number, deform?: Readonly<Float32Array> | null): void;
3
+ export declare function getSkeleton2DClippingAttachmentSlotRange(attachment: Readonly<ClippingAttachment2D>, slotIndex: number, slotCount: number): {
4
+ end: number;
5
+ start: number;
6
+ };
7
+ //# sourceMappingURL=clippingAttachment2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clippingAttachment2D.d.ts","sourceRoot":"","sources":["../src/clippingAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAYjF,wBAAgB,2CAA2C,CACzD,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CAUN;AASD,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKhC"}
@@ -0,0 +1,26 @@
1
+ import { skinSkeleton2DAttachmentPoints } from './skinAttachment2DPoints';
2
+ // Produces a clipping polygon's world points as flat interleaved `[x0, y0, x1, y1, …]` in `out` (length
3
+ // ≥ 2 × attachment.pointCount). Requires `computeSkeleton2DWorldTransforms` to have filled
4
+ // `skeleton.worldMatrices`. Out-parameter, allocation-free.
5
+ //
6
+ // This computes the polygon and NOTHING ELSE. It does not clip, does not build a `ClipRegion`, and does
7
+ // not consult `endSlotIndex` — turning a polygon plus a slot range into an applied clip is the display
8
+ // layer's job, and doing it here would make a query function mutate a scene. See
9
+ // `getSkeleton2DClippingAttachmentSlotRange` for the range half.
10
+ export function computeSkeleton2DClippingAttachmentVertices(out, attachment, skeleton, boneIndex, deform = null) {
11
+ skinSkeleton2DAttachmentPoints(out, attachment.skin, attachment.vertices, skeleton, boneIndex, deform, 'ClippingAttachment2D');
12
+ }
13
+ // The half-open slot range a clipping attachment covers, given the slot it sits on: `[start, end)` into
14
+ // the skeleton's draw-order slot array. Clipping starts AFTER its own slot and runs through
15
+ // `endSlotIndex` INCLUSIVE, so the returned `end` is one past it; an `endSlotIndex` of -1, or one at or
16
+ // before the clipping slot, runs to the end of the draw order.
17
+ //
18
+ // It exists so a consumer does not re-derive the off-by-one from the field's prose. The two conventions
19
+ // in play — inclusive in the format, half-open in the result — are exactly where that mistake lives.
20
+ export function getSkeleton2DClippingAttachmentSlotRange(attachment, slotIndex, slotCount) {
21
+ const start = slotIndex + 1;
22
+ const declared = attachment.endSlotIndex;
23
+ const end = declared < start ? slotCount : Math.min(declared + 1, slotCount);
24
+ return { end: Math.max(start, end), start };
25
+ }
26
+ //# sourceMappingURL=clippingAttachment2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clippingAttachment2D.js","sourceRoot":"","sources":["../src/clippingAttachment2D.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,wGAAwG;AACxG,2FAA2F;AAC3F,4DAA4D;AAC5D,EAAE;AACF,wGAAwG;AACxG,uGAAuG;AACvG,iFAAiF;AACjF,iEAAiE;AACjE,MAAM,UAAU,2CAA2C,CACzD,GAAiB,EACjB,UAA0C,EAC1C,QAA8B,EAC9B,SAAiB,EACjB,SAAwC,IAAI;IAE5C,8BAA8B,CAC5B,GAAG,EACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,QAAQ,EACnB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,4FAA4F;AAC5F,wGAAwG;AACxG,+DAA+D;AAC/D,EAAE;AACF,wGAAwG;AACxG,qGAAqG;AACrG,MAAM,UAAU,wCAAwC,CACtD,UAA0C,EAC1C,SAAiB,EACjB,SAAiB;IAEjB,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7E,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC"}
@@ -11,4 +11,12 @@ export * from './pathConstraint2D';
11
11
  export * from './skeleton2dGuards';
12
12
  export * from './enableSkeleton2DGuards';
13
13
  export * from './explainSkeleton2DChannel';
14
+ export * from './skinAttachment2DPoints';
15
+ export * from './boundingBoxAttachment2D';
16
+ export * from './clippingAttachment2D';
17
+ export * from './pointAttachment2D';
18
+ export * from './explainSkeleton2DDeformLength';
19
+ export * from './slotDeform2D';
20
+ export * from './deformAnimationTarget2D';
21
+ export * from './skeleton2dDrawOrderTarget';
14
22
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC"}
package/dist/contract.js CHANGED
@@ -11,4 +11,12 @@ export * from './pathConstraint2D';
11
11
  export * from './skeleton2dGuards';
12
12
  export * from './enableSkeleton2DGuards';
13
13
  export * from './explainSkeleton2DChannel';
14
+ export * from './skinAttachment2DPoints';
15
+ export * from './boundingBoxAttachment2D';
16
+ export * from './clippingAttachment2D';
17
+ export * from './pointAttachment2D';
18
+ export * from './explainSkeleton2DDeformLength';
19
+ export * from './slotDeform2D';
20
+ export * from './deformAnimationTarget2D';
21
+ export * from './skeleton2dDrawOrderTarget';
14
22
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerSkeleton2DDeformAnimationTarget(): void;
2
+ //# sourceMappingURL=deformAnimationTarget2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deformAnimationTarget2D.d.ts","sourceRoot":"","sources":["../src/deformAnimationTarget2D.ts"],"names":[],"mappings":"AAUA,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D"}
@@ -0,0 +1,40 @@
1
+ import { sampleAnimationTrack } from '@flighthq/animation/contract';
2
+ import { Skeleton2DAnimationTargetKind } from '@flighthq/types/contract';
3
+ import { registerSkeleton2DAnimationTargetBinder } from './skeleton2dAnimationTarget';
4
+ import { setSkeleton2DSlotDeform } from './slotDeform2D';
5
+ // Opts a bundle into deform channels. Unlike the bone and slot binders — which are pre-entered because a
6
+ // bundle that shed them would leave the pose pass a silent no-op — a rig with no deform timeline should
7
+ // not carry this, so it registers explicitly like a constraint solver does.
8
+ export function registerSkeleton2DDeformAnimationTarget() {
9
+ registerSkeleton2DAnimationTargetBinder(Skeleton2DAnimationTargetKind.Deform, bindSkeleton2DDeformChannel);
10
+ }
11
+ // Samples a deform channel onto its slot, stamping the attachment the offsets were authored for so the
12
+ // pull seam can reject them once the slot shows something else.
13
+ //
14
+ // The track is ordinary and numeric: `components` is the whole offset stream length, so a keyframe is one
15
+ // complete set of offsets and `sampleAnimationTrack` interpolates between them normally. That is the right
16
+ // behaviour here and the opposite of an attachment-swap index — a morph that snapped between drawn keys
17
+ // instead of blending would be the bug.
18
+ //
19
+ // A channel whose slot is out of range writes nothing rather than throwing; a rig can carry a timeline for
20
+ // a slot a trimmed skeleton no longer has.
21
+ function bindSkeleton2DDeformChannel(channel, _setup, pose, target, time) {
22
+ const deformTarget = target;
23
+ const slots = pose.slots;
24
+ if (slots === undefined || slots === null)
25
+ return;
26
+ const slotIndex = deformTarget.slotIndex;
27
+ if (typeof slotIndex !== 'number' || slotIndex < 0 || slotIndex >= slots.length)
28
+ return;
29
+ const components = channel.track.components;
30
+ if (components <= 0)
31
+ return;
32
+ if (_scratch.length < components)
33
+ _scratch = new Float32Array(components);
34
+ sampleAnimationTrack(_scratch, channel.track, time);
35
+ // `_scratch` may be longer than the stream after a previous, wider channel, so only the components this
36
+ // track actually carries are written.
37
+ setSkeleton2DSlotDeform(slots[slotIndex], deformTarget.attachment ?? null, _scratch.subarray(0, components));
38
+ }
39
+ let _scratch = new Float32Array(0);
40
+ //# sourceMappingURL=deformAnimationTarget2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deformAnimationTarget2D.js","sourceRoot":"","sources":["../src/deformAnimationTarget2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,uCAAuC,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,yGAAyG;AACzG,wGAAwG;AACxG,4EAA4E;AAC5E,MAAM,UAAU,uCAAuC;IACrD,uCAAuC,CAAC,6BAA6B,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;AAC7G,CAAC;AAED,uGAAuG;AACvG,gEAAgE;AAChE,EAAE;AACF,0GAA0G;AAC1G,2GAA2G;AAC3G,wGAAwG;AACxG,wCAAwC;AACxC,EAAE;AACF,2GAA2G;AAC3G,2CAA2C;AAC3C,SAAS,2BAA2B,CAClC,OAAmC,EACnC,MAA4B,EAC5B,IAAgB,EAChB,MAAe,EACf,IAAY;IAEZ,MAAM,YAAY,GAAG,MAAmD,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAClD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACzC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO;IAExF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;IAC5C,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO;IAC5B,IAAI,QAAQ,CAAC,MAAM,GAAG,UAAU;QAAE,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1E,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,wGAAwG;IACxG,sCAAsC;IACtC,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,UAAU,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,IAAI,QAAQ,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deformMeshAttachment2D.d.ts","sourceRoot":"","sources":["../src/deformMeshAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA+B7E,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CAuDN"}
1
+ {"version":3,"file":"deformMeshAttachment2D.d.ts","sourceRoot":"","sources":["../src/deformMeshAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA4B7E,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CAUN"}
@@ -1,6 +1,4 @@
1
- import { reportSkeleton2DDeformLengthMismatch } from './skeleton2dGuards';
2
- // 6 floats per bone in the flat world-transform buffer (a, b, c, d, tx, ty).
3
- const MATRIX_STRIDE = 6;
1
+ import { skinSkeleton2DAttachmentPoints } from './skinAttachment2DPoints';
4
2
  // Deforms a MeshAttachment2D's vertices into flat interleaved world positions `[x0, y0, x1, y1, …]` in
5
3
  // `out` (length ≥ 2 × attachment.vertexCount), for the display layer to draw. Requires
6
4
  // `computeSkeleton2DWorldTransforms` to have filled `skeleton.worldMatrices`. Out-parameter,
@@ -26,59 +24,6 @@ const MATRIX_STRIDE = 6;
26
24
  // sizing that buffer from vertex count instead of influence count is an expected failure, not a
27
25
  // programmer error, so it takes the sentinel.
28
26
  export function deformSkeleton2DMeshAttachment(out, attachment, skeleton, boneIndex, deform = null) {
29
- const world = skeleton.worldMatrices;
30
- const skin = attachment.skin;
31
- if (skin !== null && skin !== undefined) {
32
- const counts = skin.influenceCounts;
33
- const inf = skin.influences;
34
- // Hoisted out of the loop: a rig with no deform timeline pays one test for the whole attachment.
35
- const offsets = deform !== null && deform.length * 2 >= inf.length ? deform : null;
36
- if (deform !== null && offsets === null) {
37
- reportSkeleton2DDeformLengthMismatch('MeshAttachment2D', deform.length, inf.length / 2);
38
- }
39
- let vi = 0; // influence-stream cursor (stride 4: boneIndex, localX, localY, weight)
40
- let di = 0; // deform cursor (stride 2, one pair per influence)
41
- let oi = 0; // output cursor (stride 2)
42
- for (let v = 0; v < counts.length; v++) {
43
- let wx = 0;
44
- let wy = 0;
45
- const n = counts[v];
46
- for (let k = 0; k < n; k++) {
47
- const b = inf[vi] * MATRIX_STRIDE;
48
- const lx = offsets === null ? inf[vi + 1] : inf[vi + 1] + offsets[di];
49
- const ly = offsets === null ? inf[vi + 2] : inf[vi + 2] + offsets[di + 1];
50
- const weight = inf[vi + 3];
51
- wx += weight * (world[b] * lx + world[b + 2] * ly + world[b + 4]);
52
- wy += weight * (world[b + 1] * lx + world[b + 3] * ly + world[b + 5]);
53
- vi += 4;
54
- di += 2;
55
- }
56
- out[oi] = wx;
57
- out[oi + 1] = wy;
58
- oi += 2;
59
- }
60
- return;
61
- }
62
- // Rigid mesh: the whole attachment follows one bone's world transform.
63
- const vertices = attachment.vertices;
64
- if (vertices === null || vertices === undefined)
65
- return;
66
- const offsets = deform !== null && deform.length >= vertices.length ? deform : null;
67
- if (deform !== null && offsets === null) {
68
- reportSkeleton2DDeformLengthMismatch('MeshAttachment2D', deform.length, vertices.length);
69
- }
70
- const b = boneIndex * MATRIX_STRIDE;
71
- const a = world[b];
72
- const bb = world[b + 1];
73
- const c = world[b + 2];
74
- const d = world[b + 3];
75
- const tx = world[b + 4];
76
- const ty = world[b + 5];
77
- for (let i = 0; i < vertices.length; i += 2) {
78
- const vx = offsets === null ? vertices[i] : vertices[i] + offsets[i];
79
- const vy = offsets === null ? vertices[i + 1] : vertices[i + 1] + offsets[i + 1];
80
- out[i] = a * vx + c * vy + tx;
81
- out[i + 1] = bb * vx + d * vy + ty;
82
- }
27
+ skinSkeleton2DAttachmentPoints(out, attachment.skin, attachment.vertices, skeleton, boneIndex, deform, 'MeshAttachment2D');
83
28
  }
84
29
  //# sourceMappingURL=deformMeshAttachment2D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deformMeshAttachment2D.js","sourceRoot":"","sources":["../src/deformMeshAttachment2D.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deformMeshAttachment2D.js","sourceRoot":"","sources":["../src/deformMeshAttachment2D.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,uGAAuG;AACvG,uFAAuF;AACvF,6FAA6F;AAC7F,mBAAmB;AACnB,EAAE;AACF,2GAA2G;AAC3G,2GAA2G;AAC3G,mFAAmF;AACnF,iGAAiG;AACjG,4GAA4G;AAC5G,mFAAmF;AACnF,EAAE;AACF,oGAAoG;AACpG,wGAAwG;AACxG,kGAAkG;AAClG,wGAAwG;AACxG,2GAA2G;AAC3G,0GAA0G;AAC1G,yGAAyG;AACzG,4BAA4B;AAC5B,EAAE;AACF,0GAA0G;AAC1G,gGAAgG;AAChG,8CAA8C;AAC9C,MAAM,UAAU,8BAA8B,CAC5C,GAAiB,EACjB,UAAsC,EACtC,QAA8B,EAC9B,SAAiB,EACjB,SAAwC,IAAI;IAE5C,8BAA8B,CAC5B,GAAG,EACH,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,QAAQ,EACnB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,kBAAkB,CACnB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deformPathAttachment2D.d.ts","sourceRoot":"","sources":["../src/deformPathAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA8BnF,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,IAAI,EACT,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CA+DN"}
1
+ {"version":3,"file":"deformPathAttachment2D.d.ts","sourceRoot":"","sources":["../src/deformPathAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA2BnF,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,IAAI,EACT,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAW,GAC3C,IAAI,CAkBN"}
@@ -1,6 +1,4 @@
1
- import { reportSkeleton2DDeformLengthMismatch } from './skeleton2dGuards';
2
- // 6 floats per bone in the flat world-transform buffer (a, b, c, d, tx, ty).
3
- const MATRIX_STRIDE = 6;
1
+ import { skinSkeleton2DAttachmentPoints } from './skinAttachment2DPoints';
4
2
  // Deforms a PathAttachment2D into `out`, filling its `data` with world coordinates under the attachment's
5
3
  // own verb stream. Requires `computeSkeleton2DWorldTransforms` to have filled `skeleton.worldMatrices`.
6
4
  // Out-parameter; allocates only when `out`'s arrays have to grow to fit.
@@ -33,59 +31,6 @@ export function deformSkeleton2DPathAttachment(out, attachment, skeleton, boneIn
33
31
  outCommands[i] = commands[i];
34
32
  out.winding = attachment.winding;
35
33
  data.length = attachment.pointCount * 2;
36
- const world = skeleton.worldMatrices;
37
- const skin = attachment.skin;
38
- if (skin !== null && skin !== undefined) {
39
- const counts = skin.influenceCounts;
40
- const inf = skin.influences;
41
- // Hoisted out of the loop: a rig with no deform timeline pays one test for the whole attachment.
42
- const offsets = deform !== null && deform.length * 2 >= inf.length ? deform : null;
43
- if (deform !== null && offsets === null) {
44
- reportSkeleton2DDeformLengthMismatch('PathAttachment2D', deform.length, inf.length / 2);
45
- }
46
- let vi = 0; // influence-stream cursor (stride 4: boneIndex, localX, localY, weight)
47
- let di = 0; // deform cursor (stride 2, one pair per influence)
48
- let oi = 0; // output cursor (stride 2)
49
- for (let v = 0; v < counts.length; v++) {
50
- let wx = 0;
51
- let wy = 0;
52
- const n = counts[v];
53
- for (let k = 0; k < n; k++) {
54
- const b = inf[vi] * MATRIX_STRIDE;
55
- const lx = offsets === null ? inf[vi + 1] : inf[vi + 1] + offsets[di];
56
- const ly = offsets === null ? inf[vi + 2] : inf[vi + 2] + offsets[di + 1];
57
- const weight = inf[vi + 3];
58
- wx += weight * (world[b] * lx + world[b + 2] * ly + world[b + 4]);
59
- wy += weight * (world[b + 1] * lx + world[b + 3] * ly + world[b + 5]);
60
- vi += 4;
61
- di += 2;
62
- }
63
- data[oi] = wx;
64
- data[oi + 1] = wy;
65
- oi += 2;
66
- }
67
- return;
68
- }
69
- // Rigid path: every point follows one bone's world transform.
70
- const vertices = attachment.vertices;
71
- if (vertices === null || vertices === undefined)
72
- return;
73
- const offsets = deform !== null && deform.length >= vertices.length ? deform : null;
74
- if (deform !== null && offsets === null) {
75
- reportSkeleton2DDeformLengthMismatch('PathAttachment2D', deform.length, vertices.length);
76
- }
77
- const b = boneIndex * MATRIX_STRIDE;
78
- const a = world[b];
79
- const bb = world[b + 1];
80
- const c = world[b + 2];
81
- const d = world[b + 3];
82
- const tx = world[b + 4];
83
- const ty = world[b + 5];
84
- for (let i = 0; i < vertices.length; i += 2) {
85
- const vx = offsets === null ? vertices[i] : vertices[i] + offsets[i];
86
- const vy = offsets === null ? vertices[i + 1] : vertices[i + 1] + offsets[i + 1];
87
- data[i] = a * vx + c * vy + tx;
88
- data[i + 1] = bb * vx + d * vy + ty;
89
- }
34
+ skinSkeleton2DAttachmentPoints(data, attachment.skin, attachment.vertices, skeleton, boneIndex, deform, 'PathAttachment2D');
90
35
  }
91
36
  //# sourceMappingURL=deformPathAttachment2D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deformPathAttachment2D.js","sourceRoot":"","sources":["../src/deformPathAttachment2D.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deformPathAttachment2D.js","sourceRoot":"","sources":["../src/deformPathAttachment2D.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,0GAA0G;AAC1G,wGAAwG;AACxG,yEAAyE;AACzE,EAAE;AACF,mGAAmG;AACnG,0GAA0G;AAC1G,sGAAsG;AACtG,6BAA6B;AAC7B,EAAE;AACF,qGAAqG;AACrG,mGAAmG;AACnG,wGAAwG;AACxG,oGAAoG;AACpG,2DAA2D;AAC3D,EAAE;AACF,yGAAyG;AACzG,oGAAoG;AACpG,yGAAyG;AACzG,kFAAkF;AAClF,EAAE;AACF,uGAAuG;AACvG,yGAAyG;AACzG,gDAAgD;AAChD,MAAM,UAAU,8BAA8B,CAC5C,GAAS,EACT,UAAsC,EACtC,QAA8B,EAC9B,SAAiB,EACjB,SAAwC,IAAI;IAE5C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;IAExC,8BAA8B,CAC5B,IAAI,EACJ,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,QAAQ,EACnB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,kBAAkB,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Skeleton2DDeformLengthExplanation, Skin2D } from '@flighthq/types/contract';
2
+ export declare function explainSkeleton2DDeformLength(skin: Readonly<Skin2D> | null | undefined, vertices: Readonly<Float32Array> | null | undefined, deform: Readonly<Float32Array> | null): Skeleton2DDeformLengthExplanation;
3
+ //# sourceMappingURL=explainSkeleton2DDeformLength.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainSkeleton2DDeformLength.d.ts","sourceRoot":"","sources":["../src/explainSkeleton2DDeformLength.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAa1F,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EACnD,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,GACpC,iCAAiC,CAUnC"}
@@ -0,0 +1,23 @@
1
+ // Answers, as plain data, why a deform offset stream was applied or ignored — the shakeable query paired
2
+ // with the silent sentinel in `skinSkeleton2DAttachmentPoints`. The guard reports THAT a mismatch happened;
3
+ // this reports what the length should have been, which is what a caller needs in order to fix it.
4
+ //
5
+ // It takes the SAME two inputs the skinning primitive dispatches on — the skin and the setup vertices —
6
+ // rather than an attachment. That is deliberate: every deformable attachment reduces to those two, so this
7
+ // cannot drift as attachment kinds are added, and it answers the question for a kind it has never heard of.
8
+ //
9
+ // The number that surprises is the weighted one: offsets are addressed PER INFLUENCE, not per vertex, so a
10
+ // mesh whose vertices average three bones needs three times the stream a per-vertex reading predicts. An
11
+ // importer sizing from vertex count is the mistake this exists to name.
12
+ export function explainSkeleton2DDeformLength(skin, vertices, deform) {
13
+ const weighted = skin !== null && skin !== undefined;
14
+ const addressed = weighted ? skin.influences.length / 2 : (vertices?.length ?? 0);
15
+ const offsets = deform === null ? 0 : deform.length;
16
+ return {
17
+ accepted: deform !== null && offsets >= addressed,
18
+ addressed,
19
+ addressing: weighted ? 'weighted' : 'rigid',
20
+ offsets,
21
+ };
22
+ }
23
+ //# sourceMappingURL=explainSkeleton2DDeformLength.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainSkeleton2DDeformLength.js","sourceRoot":"","sources":["../src/explainSkeleton2DDeformLength.ts"],"names":[],"mappings":"AAEA,yGAAyG;AACzG,4GAA4G;AAC5G,kGAAkG;AAClG,EAAE;AACF,wGAAwG;AACxG,2GAA2G;AAC3G,4GAA4G;AAC5G,EAAE;AACF,2GAA2G;AAC3G,yGAAyG;AACzG,wEAAwE;AACxE,MAAM,UAAU,6BAA6B,CAC3C,IAAyC,EACzC,QAAmD,EACnD,MAAqC;IAErC,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACpD,OAAO;QACL,QAAQ,EAAE,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,SAAS;QACjD,SAAS;QACT,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;QAC3C,OAAO;KACR,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { applyAnimationClipToSkeleton2D, cloneSkeleton2D, computeSkeleton2DBoneMatrices, computeSkeleton2DBoneWorldTransform, computeSkeleton2DRegionAttachmentVertices, computeSkeleton2DWorldTransforms, createSkeleton2D, createSkeleton2DBoneAnimationTarget, createSkeleton2DSlotAnimationTarget, deformSkeleton2DMeshAttachment, deformSkeleton2DPathAttachment, disposeSkeleton2D, equalsSkeleton2D, getSkeleton2DBoneIndexByName, getSkeleton2DBoneWorldMatrix, registerSkeleton2DAnimationTargetBinder, registerSkeleton2DConstraintSolver, registerSkeleton2DIkConstraintSolver, registerSkeleton2DPathConstraintSolver, registerSkeleton2DTransformConstraintSolver, setSkeleton2DBindPose, solveSkeleton2DConstraints, validateSkeleton2D, } from './contract';
1
+ export { applyAnimationClipToSkeleton2D, cloneSkeleton2D, computeSkeleton2DBoneMatrices, computeSkeleton2DBoneWorldTransform, computeSkeleton2DBoundingBoxAttachmentVertices, computeSkeleton2DClippingAttachmentVertices, computeSkeleton2DPointAttachmentPosition, computeSkeleton2DPointAttachmentRotation, computeSkeleton2DRegionAttachmentVertices, computeSkeleton2DWorldTransforms, createSkeleton2D, createSkeleton2DBoneAnimationTarget, createSkeleton2DSlotAnimationTarget, deformSkeleton2DMeshAttachment, deformSkeleton2DPathAttachment, disposeSkeleton2D, explainSkeleton2DDeformLength, equalsSkeleton2D, getSkeleton2DBoneIndexByName, getSkeleton2DBoneWorldMatrix, getSkeleton2DClippingAttachmentSlotRange, getSkeleton2DSlotDeformOffsets, registerSkeleton2DAnimationTargetBinder, registerSkeleton2DConstraintSolver, registerSkeleton2DDeformAnimationTarget, registerSkeleton2DIkConstraintSolver, registerSkeleton2DPathConstraintSolver, registerSkeleton2DTransformConstraintSolver, setSkeleton2DBindPose, setSkeleton2DSlotDeform, solveSkeleton2DConstraints, validateSkeleton2D, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,6BAA6B,EAC7B,mCAAmC,EACnC,yCAAyC,EACzC,gCAAgC,EAChC,gBAAgB,EAChB,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,sCAAsC,EACtC,2CAA2C,EAC3C,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,6BAA6B,EAC7B,mCAAmC,EACnC,8CAA8C,EAC9C,2CAA2C,EAC3C,wCAAwC,EACxC,wCAAwC,EACxC,yCAAyC,EACzC,gCAAgC,EAChC,gBAAgB,EAChB,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,6BAA6B,EAC7B,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,wCAAwC,EACxC,8BAA8B,EAC9B,uCAAuC,EACvC,kCAAkC,EAClC,uCAAuC,EACvC,oCAAoC,EACpC,sCAAsC,EACtC,2CAA2C,EAC3C,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { applyAnimationClipToSkeleton2D, cloneSkeleton2D, computeSkeleton2DBoneMatrices, computeSkeleton2DBoneWorldTransform, computeSkeleton2DRegionAttachmentVertices, computeSkeleton2DWorldTransforms, createSkeleton2D, createSkeleton2DBoneAnimationTarget, createSkeleton2DSlotAnimationTarget, deformSkeleton2DMeshAttachment, deformSkeleton2DPathAttachment, disposeSkeleton2D, equalsSkeleton2D, getSkeleton2DBoneIndexByName, getSkeleton2DBoneWorldMatrix, registerSkeleton2DAnimationTargetBinder, registerSkeleton2DConstraintSolver, registerSkeleton2DIkConstraintSolver, registerSkeleton2DPathConstraintSolver, registerSkeleton2DTransformConstraintSolver, setSkeleton2DBindPose, solveSkeleton2DConstraints, validateSkeleton2D, } from './contract';
1
+ export { applyAnimationClipToSkeleton2D, cloneSkeleton2D, computeSkeleton2DBoneMatrices, computeSkeleton2DBoneWorldTransform, computeSkeleton2DBoundingBoxAttachmentVertices, computeSkeleton2DClippingAttachmentVertices, computeSkeleton2DPointAttachmentPosition, computeSkeleton2DPointAttachmentRotation, computeSkeleton2DRegionAttachmentVertices, computeSkeleton2DWorldTransforms, createSkeleton2D, createSkeleton2DBoneAnimationTarget, createSkeleton2DSlotAnimationTarget, deformSkeleton2DMeshAttachment, deformSkeleton2DPathAttachment, disposeSkeleton2D, explainSkeleton2DDeformLength, equalsSkeleton2D, getSkeleton2DBoneIndexByName, getSkeleton2DBoneWorldMatrix, getSkeleton2DClippingAttachmentSlotRange, getSkeleton2DSlotDeformOffsets, registerSkeleton2DAnimationTargetBinder, registerSkeleton2DConstraintSolver, registerSkeleton2DDeformAnimationTarget, registerSkeleton2DIkConstraintSolver, registerSkeleton2DPathConstraintSolver, registerSkeleton2DTransformConstraintSolver, setSkeleton2DBindPose, setSkeleton2DSlotDeform, solveSkeleton2DConstraints, validateSkeleton2D, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,6BAA6B,EAC7B,mCAAmC,EACnC,yCAAyC,EACzC,gCAAgC,EAChC,gBAAgB,EAChB,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,sCAAsC,EACtC,2CAA2C,EAC3C,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,6BAA6B,EAC7B,mCAAmC,EACnC,8CAA8C,EAC9C,2CAA2C,EAC3C,wCAAwC,EACxC,wCAAwC,EACxC,yCAAyC,EACzC,gCAAgC,EAChC,gBAAgB,EAChB,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,6BAA6B,EAC7B,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,wCAAwC,EACxC,8BAA8B,EAC9B,uCAAuC,EACvC,kCAAkC,EAClC,uCAAuC,EACvC,oCAAoC,EACpC,sCAAsC,EACtC,2CAA2C,EAC3C,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PointAttachment2D, Skeleton2D, Vector2Like } from '@flighthq/types/contract';
2
+ export declare function computeSkeleton2DPointAttachmentPosition(out: Vector2Like, attachment: Readonly<PointAttachment2D>, skeleton: Readonly<Skeleton2D>, boneIndex: number): void;
3
+ export declare function computeSkeleton2DPointAttachmentRotation(attachment: Readonly<PointAttachment2D>, skeleton: Readonly<Skeleton2D>, boneIndex: number): number;
4
+ //# sourceMappingURL=pointAttachment2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointAttachment2D.d.ts","sourceRoot":"","sources":["../src/pointAttachment2D.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAO3F,wBAAgB,wCAAwC,CACtD,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACvC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,GAChB,IAAI,CAQN;AAOD,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACvC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,SAAS,EAAE,MAAM,GAChB,MAAM,CAUR"}
@@ -0,0 +1,34 @@
1
+ import { DEG_TO_RAD, RAD_TO_DEG } from '@flighthq/math/contract';
2
+ // 6 floats per bone in the flat world-transform buffer (a, b, c, d, tx, ty).
3
+ const MATRIX_STRIDE = 6;
4
+ // Writes a point attachment's world position into `out`. Requires `computeSkeleton2DWorldTransforms` to
5
+ // have filled `skeleton.worldMatrices`. Out-parameter, allocation-free.
6
+ export function computeSkeleton2DPointAttachmentPosition(out, attachment, skeleton, boneIndex) {
7
+ const world = skeleton.worldMatrices;
8
+ if (boneIndex < 0 || boneIndex * MATRIX_STRIDE >= world.length)
9
+ return;
10
+ const b = boneIndex * MATRIX_STRIDE;
11
+ const x = attachment.x;
12
+ const y = attachment.y;
13
+ out.x = world[b] * x + world[b + 2] * y + world[b + 4];
14
+ out.y = world[b + 1] * x + world[b + 3] * y + world[b + 5];
15
+ }
16
+ // The point's world direction in DEGREES — its local rotation carried through the bone's world basis.
17
+ //
18
+ // It is derived from the bone's transformed X AXIS rather than by adding the bone's world rotation,
19
+ // because those differ the moment a bone carries non-uniform scale or shear: the axis is where the bone
20
+ // actually points, and the rotation angle is only where it would point if the basis were square. A point
21
+ // naming a muzzle direction on a squashed limb has to follow the axis.
22
+ export function computeSkeleton2DPointAttachmentRotation(attachment, skeleton, boneIndex) {
23
+ const world = skeleton.worldMatrices;
24
+ if (boneIndex < 0 || boneIndex * MATRIX_STRIDE >= world.length)
25
+ return attachment.rotation;
26
+ const b = boneIndex * MATRIX_STRIDE;
27
+ const radians = attachment.rotation * DEG_TO_RAD;
28
+ const cos = Math.cos(radians);
29
+ const sin = Math.sin(radians);
30
+ const x = world[b] * cos + world[b + 2] * sin;
31
+ const y = world[b + 1] * cos + world[b + 3] * sin;
32
+ return Math.atan2(y, x) * RAD_TO_DEG;
33
+ }
34
+ //# sourceMappingURL=pointAttachment2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointAttachment2D.js","sourceRoot":"","sources":["../src/pointAttachment2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGjE,6EAA6E;AAC7E,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,wGAAwG;AACxG,wEAAwE;AACxE,MAAM,UAAU,wCAAwC,CACtD,GAAgB,EAChB,UAAuC,EACvC,QAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,aAAa,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO;IACvE,MAAM,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC;IACpC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AACD,sGAAsG;AACtG,EAAE;AACF,oGAAoG;AACpG,wGAAwG;AACxG,yGAAyG;AACzG,uEAAuE;AACvE,MAAM,UAAU,wCAAwC,CACtD,UAAuC,EACvC,QAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,aAAa,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC3F,MAAM,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC;AACvC,CAAC"}
@@ -1,6 +1,14 @@
1
1
  import type { Attachment2D, Skeleton2DAnimationPath, Skeleton2DAnimationTarget, Skeleton2DAnimationTargetBinder, Skeleton2DAnimationTargetKind, Skeleton2DSlotAnimationPath, Skeleton2DSlotAnimationTarget } from '@flighthq/types/contract';
2
2
  export declare function createSkeleton2DBoneAnimationTarget(boneIndex: number, path: Skeleton2DAnimationPath): Skeleton2DAnimationTarget;
3
3
  export declare function createSkeleton2DSlotAnimationTarget(slotIndex: number, path: Skeleton2DSlotAnimationPath, attachments?: readonly (Attachment2D | null)[] | null): Skeleton2DSlotAnimationTarget;
4
+ /**
5
+ * The last keyframe at or before `time`, or -1 when the track holds none. Before the first keyframe the
6
+ * first value holds, which is why an early time resolves to 0 rather than to nothing.
7
+ *
8
+ * Shared by every family whose value cannot be blended — attachment indices and draw orders both — so the
9
+ * two walk identically instead of drifting apart in separate copies of the same loop.
10
+ */
11
+ export declare function findSkeleton2DStepKeyframe(times: ArrayLike<number>, time: number): number;
4
12
  export declare function getSkeleton2DAnimationTargetBinder(kind: Skeleton2DAnimationTargetKind): Skeleton2DAnimationTargetBinder | null;
5
13
  export declare function registerSkeleton2DAnimationTargetBinder(kind: Skeleton2DAnimationTargetKind, bind: Skeleton2DAnimationTargetBinder): void;
6
14
  export declare function unregisterSkeleton2DAnimationTargetBinder(kind: Skeleton2DAnimationTargetKind): void;
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton2dAnimationTarget.d.ts","sourceRoot":"","sources":["../src/skeleton2dAnimationTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,YAAY,EAEZ,uBAAuB,EACvB,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAE9B,MAAM,0BAA0B,CAAC;AAWlC,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,uBAAuB,GAC5B,yBAAyB,CAE3B;AAID,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,EACjC,WAAW,GAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,GAAG,IAAW,GAC1D,6BAA6B,CAE/B;AAID,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,6BAA6B,GAClC,+BAA+B,GAAG,IAAI,CAExC;AAMD,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,6BAA6B,EACnC,IAAI,EAAE,+BAA+B,GACpC,IAAI,CAEN;AAED,wBAAgB,yCAAyC,CAAC,IAAI,EAAE,6BAA6B,GAAG,IAAI,CAEnG"}
1
+ {"version":3,"file":"skeleton2dAnimationTarget.d.ts","sourceRoot":"","sources":["../src/skeleton2dAnimationTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,YAAY,EAEZ,uBAAuB,EACvB,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAE9B,MAAM,0BAA0B,CAAC;AAWlC,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,uBAAuB,GAC5B,yBAAyB,CAE3B;AAID,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,EACjC,WAAW,GAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,GAAG,IAAW,GAC1D,6BAA6B,CAE/B;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOzF;AAID,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,6BAA6B,GAClC,+BAA+B,GAAG,IAAI,CAExC;AAMD,wBAAgB,uCAAuC,CACrD,IAAI,EAAE,6BAA6B,EACnC,IAAI,EAAE,+BAA+B,GACpC,IAAI,CAEN;AAED,wBAAgB,yCAAyC,CAAC,IAAI,EAAE,6BAA6B,GAAG,IAAI,CAEnG"}
@@ -11,6 +11,23 @@ export function createSkeleton2DBoneAnimationTarget(boneIndex, path) {
11
11
  export function createSkeleton2DSlotAnimationTarget(slotIndex, path, attachments = null) {
12
12
  return { attachments, kind: TargetKind.Slot, path, slotIndex };
13
13
  }
14
+ /**
15
+ * The last keyframe at or before `time`, or -1 when the track holds none. Before the first keyframe the
16
+ * first value holds, which is why an early time resolves to 0 rather than to nothing.
17
+ *
18
+ * Shared by every family whose value cannot be blended — attachment indices and draw orders both — so the
19
+ * two walk identically instead of drifting apart in separate copies of the same loop.
20
+ */
21
+ export function findSkeleton2DStepKeyframe(times, time) {
22
+ const count = times.length;
23
+ if (count === 0)
24
+ return -1;
25
+ for (let i = count - 1; i >= 0; i--) {
26
+ if (times[i] <= time)
27
+ return i;
28
+ }
29
+ return 0;
30
+ }
14
31
  // The binder registered for a target kind, or null when nothing claims it — the sentinel a channel with a
15
32
  // foreign or unregistered target is skipped on.
16
33
  export function getSkeleton2DAnimationTargetBinder(kind) {
@@ -126,18 +143,9 @@ function bindSkeleton2DSlotAttachment(channel, slot, target, time) {
126
143
  const table = target.attachments;
127
144
  if (table === undefined || table === null)
128
145
  return;
129
- const times = channel.track.times;
130
- const count = times.length;
131
- if (count === 0)
146
+ const keyframe = findSkeleton2DStepKeyframe(channel.track.times, time);
147
+ if (keyframe < 0)
132
148
  return;
133
- // The last keyframe at or before `time`; before the first keyframe the first value holds.
134
- let keyframe = 0;
135
- for (let i = count - 1; i >= 0; i--) {
136
- if (times[i] <= time) {
137
- keyframe = i;
138
- break;
139
- }
140
- }
141
149
  // The coercion is correct but must not be invisible: an author who set an easing here would
142
150
  // otherwise never learn it had no effect. enableSkeleton2DGuards turns this into a message.
143
151
  if (channel.track.interpolation !== STEP_INTERPOLATION) {
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton2dAnimationTarget.js","sourceRoot":"","sources":["../src/skeleton2dAnimationTarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skeleton2dAnimationTarget.js","sourceRoot":"","sources":["../src/skeleton2dAnimationTarget.ts"],"names":[],"mappings":"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"}