@newkrok/nape-js 3.8.2 → 3.9.1

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.
@@ -1,4 +1,4 @@
1
- import { T as Space } from '../ConvexResult-CYFNMlT2.cjs';
1
+ import { T as Space } from '../ConvexResult-Hai2aEI-.cjs';
2
2
 
3
3
  /**
4
4
  * Snapshot types for the nape-js serialization API (P37).
@@ -227,4 +227,80 @@ declare function spaceToJSON(space: Space): SpaceSnapshot;
227
227
  */
228
228
  declare function spaceFromJSON(snapshot: SpaceSnapshot): Space;
229
229
 
230
- export { type AngleJointData, type BodyData, type BodyTypeData, type CircleShapeData, type CompoundData, type ConstraintBaseData, type ConstraintData, type DistanceJointData, type FluidPropertiesData, type GravMassModeData, type InertiaModeData, type InteractionFilterData, type LineJointData, type MassModeData, type MaterialData, type MotorJointData, type PivotJointData, type PolygonShapeData, type PulleyJointData, SNAPSHOT_VERSION, type ShapeData, type SpaceSnapshot, type Vec2Data, type WeldJointData, spaceFromJSON, spaceToJSON };
230
+ /**
231
+ * spaceToBinary — converts a live Space into a compact Uint8Array snapshot.
232
+ *
233
+ * Designed for sub-millisecond rollback netcode. The binary format captures the
234
+ * same physics state as spaceToJSON but skips userData (arbitrary JSON cannot be
235
+ * efficiently binary-encoded; use spaceToJSON for userData).
236
+ *
237
+ * UserConstraint instances are skipped (not serializable).
238
+ *
239
+ * Binary layout (little-endian):
240
+ * Header: magic "NAPE" (4B), version u16, bodyCount u32, constraintCount u32, compoundCount u32
241
+ * Space: gravity (2×f64), worldLinearDrag f64, worldAngularDrag f64, sortContacts u8, broadphase u8
242
+ * Bodies: [per body — see writeBinaryBody]
243
+ * Constraints: [per constraint — see writeBinaryConstraint]
244
+ * Compounds: [per compound — bodyCount u16, bodyIds u32[], constraintCount u16, constraintIdxs u32[], childCount u16, childIdxs u32[]]
245
+ */
246
+
247
+ /** Binary format version — bumped on breaking layout changes. */
248
+ declare const BINARY_SNAPSHOT_VERSION = 1;
249
+ /**
250
+ * Serialize the complete physics state of a Space into a compact binary Uint8Array.
251
+ *
252
+ * This is the high-performance counterpart to `spaceToJSON`. It produces a much
253
+ * smaller payload and is significantly faster to encode/decode — suitable for
254
+ * per-frame rollback netcode, client-side prediction, and fast save/load.
255
+ *
256
+ * **Differences from spaceToJSON:**
257
+ * - `userData` is NOT included (arbitrary JSON cannot be efficiently binary-encoded).
258
+ * Use `spaceToJSON` if you need userData.
259
+ * - UserConstraint instances are skipped (same as JSON).
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * import { spaceToBinary, spaceFromBinary } from '@newkrok/nape-js/serialization';
264
+ *
265
+ * const snapshot = spaceToBinary(space);
266
+ * // snapshot is a Uint8Array — send over network, save to IndexedDB, etc.
267
+ *
268
+ * const restored = spaceFromBinary(snapshot);
269
+ * restored.step(1 / 60);
270
+ * ```
271
+ */
272
+ declare function spaceToBinary(space: Space): Uint8Array;
273
+
274
+ /**
275
+ * spaceFromBinary — reconstructs a Space from a binary Uint8Array snapshot.
276
+ *
277
+ * Counterpart to spaceToBinary. Reads the compact binary layout and rebuilds
278
+ * all bodies, shapes, constraints, and compounds.
279
+ *
280
+ * Note: userData is NOT restored (it is not included in the binary format).
281
+ */
282
+
283
+ /**
284
+ * Reconstruct a Space from a binary Uint8Array snapshot.
285
+ *
286
+ * The returned Space is fully configured: bodies, shapes, constraints, and
287
+ * compounds are all added and ready for simulation. Call `space.step(dt)` to
288
+ * start simulating.
289
+ *
290
+ * **Note:** `userData` is NOT restored — binary snapshots do not include it.
291
+ * Use `spaceFromJSON` if you need userData.
292
+ *
293
+ * @throws If the magic bytes or version are invalid.
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * import { spaceToBinary, spaceFromBinary } from '@newkrok/nape-js/serialization';
298
+ *
299
+ * const snapshot = spaceToBinary(space);
300
+ * const restored = spaceFromBinary(snapshot);
301
+ * restored.step(1 / 60);
302
+ * ```
303
+ */
304
+ declare function spaceFromBinary(data: Uint8Array): Space;
305
+
306
+ export { type AngleJointData, BINARY_SNAPSHOT_VERSION, type BodyData, type BodyTypeData, type CircleShapeData, type CompoundData, type ConstraintBaseData, type ConstraintData, type DistanceJointData, type FluidPropertiesData, type GravMassModeData, type InertiaModeData, type InteractionFilterData, type LineJointData, type MassModeData, type MaterialData, type MotorJointData, type PivotJointData, type PolygonShapeData, type PulleyJointData, SNAPSHOT_VERSION, type ShapeData, type SpaceSnapshot, type Vec2Data, type WeldJointData, spaceFromBinary, spaceFromJSON, spaceToBinary, spaceToJSON };
@@ -1,4 +1,4 @@
1
- import { T as Space } from '../ConvexResult-CYFNMlT2.js';
1
+ import { T as Space } from '../ConvexResult-Hai2aEI-.js';
2
2
 
3
3
  /**
4
4
  * Snapshot types for the nape-js serialization API (P37).
@@ -227,4 +227,80 @@ declare function spaceToJSON(space: Space): SpaceSnapshot;
227
227
  */
228
228
  declare function spaceFromJSON(snapshot: SpaceSnapshot): Space;
229
229
 
230
- export { type AngleJointData, type BodyData, type BodyTypeData, type CircleShapeData, type CompoundData, type ConstraintBaseData, type ConstraintData, type DistanceJointData, type FluidPropertiesData, type GravMassModeData, type InertiaModeData, type InteractionFilterData, type LineJointData, type MassModeData, type MaterialData, type MotorJointData, type PivotJointData, type PolygonShapeData, type PulleyJointData, SNAPSHOT_VERSION, type ShapeData, type SpaceSnapshot, type Vec2Data, type WeldJointData, spaceFromJSON, spaceToJSON };
230
+ /**
231
+ * spaceToBinary — converts a live Space into a compact Uint8Array snapshot.
232
+ *
233
+ * Designed for sub-millisecond rollback netcode. The binary format captures the
234
+ * same physics state as spaceToJSON but skips userData (arbitrary JSON cannot be
235
+ * efficiently binary-encoded; use spaceToJSON for userData).
236
+ *
237
+ * UserConstraint instances are skipped (not serializable).
238
+ *
239
+ * Binary layout (little-endian):
240
+ * Header: magic "NAPE" (4B), version u16, bodyCount u32, constraintCount u32, compoundCount u32
241
+ * Space: gravity (2×f64), worldLinearDrag f64, worldAngularDrag f64, sortContacts u8, broadphase u8
242
+ * Bodies: [per body — see writeBinaryBody]
243
+ * Constraints: [per constraint — see writeBinaryConstraint]
244
+ * Compounds: [per compound — bodyCount u16, bodyIds u32[], constraintCount u16, constraintIdxs u32[], childCount u16, childIdxs u32[]]
245
+ */
246
+
247
+ /** Binary format version — bumped on breaking layout changes. */
248
+ declare const BINARY_SNAPSHOT_VERSION = 1;
249
+ /**
250
+ * Serialize the complete physics state of a Space into a compact binary Uint8Array.
251
+ *
252
+ * This is the high-performance counterpart to `spaceToJSON`. It produces a much
253
+ * smaller payload and is significantly faster to encode/decode — suitable for
254
+ * per-frame rollback netcode, client-side prediction, and fast save/load.
255
+ *
256
+ * **Differences from spaceToJSON:**
257
+ * - `userData` is NOT included (arbitrary JSON cannot be efficiently binary-encoded).
258
+ * Use `spaceToJSON` if you need userData.
259
+ * - UserConstraint instances are skipped (same as JSON).
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * import { spaceToBinary, spaceFromBinary } from '@newkrok/nape-js/serialization';
264
+ *
265
+ * const snapshot = spaceToBinary(space);
266
+ * // snapshot is a Uint8Array — send over network, save to IndexedDB, etc.
267
+ *
268
+ * const restored = spaceFromBinary(snapshot);
269
+ * restored.step(1 / 60);
270
+ * ```
271
+ */
272
+ declare function spaceToBinary(space: Space): Uint8Array;
273
+
274
+ /**
275
+ * spaceFromBinary — reconstructs a Space from a binary Uint8Array snapshot.
276
+ *
277
+ * Counterpart to spaceToBinary. Reads the compact binary layout and rebuilds
278
+ * all bodies, shapes, constraints, and compounds.
279
+ *
280
+ * Note: userData is NOT restored (it is not included in the binary format).
281
+ */
282
+
283
+ /**
284
+ * Reconstruct a Space from a binary Uint8Array snapshot.
285
+ *
286
+ * The returned Space is fully configured: bodies, shapes, constraints, and
287
+ * compounds are all added and ready for simulation. Call `space.step(dt)` to
288
+ * start simulating.
289
+ *
290
+ * **Note:** `userData` is NOT restored — binary snapshots do not include it.
291
+ * Use `spaceFromJSON` if you need userData.
292
+ *
293
+ * @throws If the magic bytes or version are invalid.
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * import { spaceToBinary, spaceFromBinary } from '@newkrok/nape-js/serialization';
298
+ *
299
+ * const snapshot = spaceToBinary(space);
300
+ * const restored = spaceFromBinary(snapshot);
301
+ * restored.step(1 / 60);
302
+ * ```
303
+ */
304
+ declare function spaceFromBinary(data: Uint8Array): Space;
305
+
306
+ export { type AngleJointData, BINARY_SNAPSHOT_VERSION, type BodyData, type BodyTypeData, type CircleShapeData, type CompoundData, type ConstraintBaseData, type ConstraintData, type DistanceJointData, type FluidPropertiesData, type GravMassModeData, type InertiaModeData, type InteractionFilterData, type LineJointData, type MassModeData, type MaterialData, type MotorJointData, type PivotJointData, type PolygonShapeData, type PulleyJointData, SNAPSHOT_VERSION, type ShapeData, type SpaceSnapshot, type Vec2Data, type WeldJointData, spaceFromBinary, spaceFromJSON, spaceToBinary, spaceToJSON };
@@ -1,2 +1,2 @@
1
- import{$ as S,H as v,T as k,X as j,_ as T,aa as N,ba as L,ca as A,da as O,ea as _,fa as U,ga as R,ha as P,ia as G,ka as W,la as X,ma as q,na as z,oa as Y,pa as H,qa as K}from"../chunk-3TXNIYBK.js";var J=1;function s(t){return{x:t.x,y:t.y}}function $(t){if(t==null)return null;try{let e=JSON.stringify(t);return e==="{}"?null:JSON.parse(e)}catch{return null}}function ot(t){return{elasticity:t.elasticity,dynamicFriction:t.dynamicFriction,staticFriction:t.staticFriction,density:t.density,rollingFriction:t.rollingFriction}}function et(t){return{collisionGroup:t.collisionGroup,collisionMask:t.collisionMask,sensorGroup:t.sensorGroup,sensorMask:t.sensorMask,fluidGroup:t.fluidGroup,fluidMask:t.fluidMask}}function at(t){if(t==null)return null;let e=t.gravity;return{density:t.density,viscosity:t.viscosity,gravity:e!=null?s(e):null}}function rt(t){let e=ot(t.material),o=et(t.filter),n=t.fluidEnabled,a=n?at(t.fluidProperties):null,u=t.sensorEnabled;if(t.isCircle()){let p=t,r=t.localCOM;return{type:"circle",radius:p.radius,localCOM:s(r),material:e,filter:o,sensorEnabled:u,fluidEnabled:n,fluidProperties:a}}else{let r=t.localVerts,m=[],c=r.length;for(let d=0;d<c;d++)m.push(s(r.at(d)));return{type:"polygon",localVerts:m,material:e,filter:o,sensorEnabled:u,fluidEnabled:n,fluidProperties:a}}}var it={1:"STATIC",2:"DYNAMIC",3:"KINEMATIC"},st={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},ct={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},lt={0:"DEFAULT",1:"FIXED",2:"SCALED"};function ut(t,e){let o=t.zpp_inner,n=st[o.massMode]??"DEFAULT",a=ct[o.inertiaMode]??"DEFAULT",u=lt[o.gravMassMode]??"DEFAULT",p=[],r=t.shapes,m=r.length;for(let c=0;c<m;c++)p.push(rt(r.at(c)));return{id:e,type:it[o.type]??"DYNAMIC",position:s(t.position),rotation:t.rotation,velocity:s(t.velocity),angularVel:t.angularVel,kinematicVel:s(t.kinematicVel),kinAngVel:t.kinAngVel,surfaceVel:s(t.surfaceVel),force:s(t.force),torque:o.type===2?t.torque:0,massMode:n,mass:n==="FIXED"?o.cmass:null,inertiaMode:a,inertia:a==="FIXED"?o.cinertia:null,gravMassMode:u,gravMassScale:o.gravMassScale,allowMovement:t.allowMovement,allowRotation:t.allowRotation,bullet:t.isBullet,shapes:p,userData:$(o.userData)}}function M(t,e,o,n){let a=t.zpp_inner,u=o!=null?e.get(o.zpp_inner.id)??null:null,p=n!=null?e.get(n.zpp_inner.id)??null:null;return{body1Id:u,body2Id:p,active:a.active,ignore:a.ignore,stiff:a.stiff,frequency:a.frequency,damping:a.damping,maxForce:a.maxForce,maxError:a.maxError,breakUnderForce:a.breakUnderForce,breakUnderError:a.breakUnderError,removeOnBreak:a.removeOnBreak,userData:$(a.userData)}}function pt(t,e){switch(t.constructor?.name??""){case"PivotJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"PivotJoint",anchor1:s(n.anchor1),anchor2:s(n.anchor2)}}case"DistanceJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"DistanceJoint",anchor1:s(n.anchor1),anchor2:s(n.anchor2),jointMin:n.jointMin,jointMax:n.jointMax}}case"AngleJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"AngleJoint",jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"MotorJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"MotorJoint",rate:n.rate,ratio:n.ratio}}case"LineJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"LineJoint",anchor1:s(n.anchor1),anchor2:s(n.anchor2),direction:s(n.direction),jointMin:n.jointMin,jointMax:n.jointMax}}case"PulleyJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"PulleyJoint",anchor1:s(n.anchor1),anchor2:s(n.anchor2),anchor3:s(n.anchor3),anchor4:s(n.anchor4),jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"WeldJoint":{let n=t;return{...M(t,e,n.body1,n.body2),type:"WeldJoint",anchor1:s(n.anchor1),anchor2:s(n.anchor2),phase:n.phase}}default:return null}}function mt(t){let e=[],o=new Map,n=new Map;function a(i){let y=i.zpp_inner.id;if(n.has(y))return;let D=e.length;o.set(i,D),n.set(y,D),e.push(ut(i,D))}let u=t.bodies,p=u.length;for(let i=0;i<p;i++)a(u.at(i));let r=t.compounds,m=r.length;for(let i=0;i<m;i++){let D=r.at(i).bodies,C=D.length;for(let f=0;f<C;f++)a(D.at(f))}let c=[],d=new Map;function I(i){if(d.has(i))return;let y=pt(i,n);y!=null&&(d.set(i,c.length),c.push(y))}let x=t.constraints,Q=x.length;for(let i=0;i<Q;i++)I(x.at(i));for(let i=0;i<m;i++){let D=r.at(i).constraints,C=D.length;for(let f=0;f<C;f++)I(D.at(f))}let V=[];for(let i=0;i<m;i++){let y=r.at(i),D=[],C=y.bodies,f=C.length;for(let b=0;b<f;b++){let F=C.at(b),E=o.get(F);E!=null&&D.push(E)}let B=[],w=y.constraints,nt=w.length;for(let b=0;b<nt;b++){let F=w.at(b),E=d.get(F);E!=null&&B.push(E)}V.push({bodyIds:D,constraintIndices:B,childIndices:[]})}let Z=t.zpp_inner.bphase.is_sweep?"SWEEP_AND_PRUNE":"DYNAMIC_AABB_TREE",tt=t.gravity;return{version:1,gravity:s(tt),worldLinearDrag:t.worldLinearDrag,worldAngularDrag:t.worldAngularDrag,sortContacts:t.sortContacts,broadphase:Z,bodies:e,constraints:c,compounds:V}}function h(t){return v.get(t.x,t.y)}function l(t){return v.weak(t.x,t.y)}function Dt(t){return new L(t.elasticity,t.dynamicFriction,t.staticFriction,t.density,t.rollingFriction)}function yt(t){let e=new G;return e.collisionGroup=t.collisionGroup,e.collisionMask=t.collisionMask,e.sensorGroup=t.sensorGroup,e.sensorMask=t.sensorMask,e.fluidGroup=t.fluidGroup,e.fluidMask=t.fluidMask,e}function ft(t){let e=new k(t.density,t.viscosity);return t.gravity!=null&&(e.gravity=h(t.gravity)),e}function dt(t){let e=Dt(t.material),o=yt(t.filter),n;if(t.type==="circle"){let a=h(t.localCOM);n=new U(t.radius,a,e,o)}else{let a=t.localVerts.map(u=>h(u));n=new R(a,e,o)}return n.sensorEnabled=t.sensorEnabled,n.fluidEnabled=t.fluidEnabled,t.fluidEnabled&&t.fluidProperties!=null&&(n.fluidProperties=ft(t.fluidProperties)),n}function bt(t){let e=t.type==="STATIC"?S.STATIC:t.type==="KINEMATIC"?S.KINEMATIC:S.DYNAMIC,o=new T(e,l(t.position));o.rotation=t.rotation,t.type!=="STATIC"&&(o.velocity=h(t.velocity),o.angularVel=t.angularVel),o.kinematicVel=h(t.kinematicVel),o.kinAngVel=t.kinAngVel,o.surfaceVel=h(t.surfaceVel),t.type==="DYNAMIC"&&(o.force=h(t.force),o.torque=t.torque),t.massMode==="FIXED"&&t.mass!=null?o.mass=t.mass:t.massMode==="DEFAULT"&&(o.massMode=_.DEFAULT),t.inertiaMode==="FIXED"&&t.inertia!=null?o.inertia=t.inertia:t.inertiaMode==="DEFAULT"&&(o.inertiaMode=O.DEFAULT),t.gravMassMode==="SCALED"?(o.gravMassMode=A.SCALED,o.gravMassScale=t.gravMassScale):t.gravMassMode==="FIXED"&&(o.gravMassMode=A.FIXED),o.allowMovement=t.allowMovement,o.allowRotation=t.allowRotation,o.isBullet=t.bullet;for(let n of t.shapes)dt(n).body=o;return t.userData!=null&&Object.assign(o.userData,t.userData),o}function g(t,e){t.active=e.active,t.ignore=e.ignore,t.stiff=e.stiff,t.frequency=e.frequency,t.damping=e.damping,t.maxForce=e.maxForce,t.maxError=e.maxError,t.breakUnderForce=e.breakUnderForce,t.breakUnderError=e.breakUnderError,t.removeOnBreak=e.removeOnBreak,e.userData!=null&&Object.assign(t.userData,e.userData)}function Mt(t,e){let o=t.body1Id!=null?e[t.body1Id]??null:null,n=t.body2Id!=null?e[t.body2Id]??null:null;switch(t.type){case"PivotJoint":{let a=new Y(o,n,l(t.anchor1),l(t.anchor2));return g(a,t),a}case"DistanceJoint":{let a=new X(o,n,l(t.anchor1),l(t.anchor2),t.jointMin,t.jointMax);return g(a,t),a}case"AngleJoint":{let a=new W(o,n,t.jointMin,t.jointMax,t.ratio);return g(a,t),a}case"MotorJoint":{let a=new z(o,n,t.rate,t.ratio);return g(a,t),a}case"LineJoint":{let a=new q(o,n,l(t.anchor1),l(t.anchor2),l(t.direction),t.jointMin,t.jointMax);return g(a,t),a}case"PulleyJoint":{let a=new H(o,n,null,null,l(t.anchor1),l(t.anchor2),l(t.anchor3),l(t.anchor4),t.jointMin,t.jointMax,t.ratio);return g(a,t),a}case"WeldJoint":{let a=new K(o,n,l(t.anchor1),l(t.anchor2),t.phase);return g(a,t),a}}}function gt(t){if(t.version!==1)throw new Error(`nape-js serialization: unsupported snapshot version ${t.version} (expected ${1})`);let e=t.broadphase==="SWEEP_AND_PRUNE"?P.SWEEP_AND_PRUNE:P.DYNAMIC_AABB_TREE,o=new j(l(t.gravity),e);o.worldLinearDrag=t.worldLinearDrag,o.worldAngularDrag=t.worldAngularDrag,o.sortContacts=t.sortContacts;let n=t.bodies.map(bt),a=t.constraints.map(r=>Mt(r,n)),u=new Set,p=new Set;for(let r of t.compounds){let m=new N;for(let c of r.bodyIds)n[c].compound=m,u.add(c);for(let c of r.constraintIndices)a[c].compound=m,p.add(c);m.space=o}for(let r=0;r<n.length;r++)u.has(r)||(n[r].space=o);for(let r=0;r<a.length;r++)p.has(r)||(a[r].space=o);return o}export{J as SNAPSHOT_VERSION,gt as spaceFromJSON,mt as spaceToJSON};
1
+ import{$ as x,H as f,T as L,X as R,_ as j,aa as G,ba as W,ca as N,da as Y,ea as X,fa as q,ga as z,ha as V,ia as H,ka as $,la as K,ma as Q,na as Z,oa as tt,pa as ot,qa as et}from"../chunk-7HUI2OS2.js";var nt=1;function b(t){return{x:t.x,y:t.y}}function st(t){if(t==null)return null;try{let o=JSON.stringify(t);return o==="{}"?null:JSON.parse(o)}catch{return null}}function dt(t){return{elasticity:t.elasticity,dynamicFriction:t.dynamicFriction,staticFriction:t.staticFriction,density:t.density,rollingFriction:t.rollingFriction}}function mt(t){return{collisionGroup:t.collisionGroup,collisionMask:t.collisionMask,sensorGroup:t.sensorGroup,sensorMask:t.sensorMask,fluidGroup:t.fluidGroup,fluidMask:t.fluidMask}}function yt(t){if(t==null)return null;let o=t.gravity;return{density:t.density,viscosity:t.viscosity,gravity:o!=null?b(o):null}}function ft(t){let o=dt(t.material),n=mt(t.filter),e=t.fluidEnabled,r=e?yt(t.fluidProperties):null,a=t.sensorEnabled;if(t.isCircle()){let i=t,s=t.localCOM;return{type:"circle",radius:i.radius,localCOM:b(s),material:o,filter:n,sensorEnabled:a,fluidEnabled:e,fluidProperties:r}}else{let s=t.localVerts,c=[],u=s.length;for(let y=0;y<u;y++)c.push(b(s.at(y)));return{type:"polygon",localVerts:c,material:o,filter:n,sensorEnabled:a,fluidEnabled:e,fluidProperties:r}}}var bt={1:"STATIC",2:"DYNAMIC",3:"KINEMATIC"},Ft={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},Dt={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},Mt={0:"DEFAULT",1:"FIXED",2:"SCALED"};function ht(t,o){let n=t.zpp_inner,e=Ft[n.massMode]??"DEFAULT",r=Dt[n.inertiaMode]??"DEFAULT",a=Mt[n.gravMassMode]??"DEFAULT",i=[],s=t.shapes,c=s.length;for(let u=0;u<c;u++)i.push(ft(s.at(u)));return{id:o,type:bt[n.type]??"DYNAMIC",position:b(t.position),rotation:t.rotation,velocity:b(t.velocity),angularVel:t.angularVel,kinematicVel:b(t.kinematicVel),kinAngVel:t.kinAngVel,surfaceVel:b(t.surfaceVel),force:b(t.force),torque:n.type===2?t.torque:0,massMode:e,mass:e==="FIXED"?n.cmass:null,inertiaMode:r,inertia:r==="FIXED"?n.cinertia:null,gravMassMode:a,gravMassScale:n.gravMassScale,allowMovement:t.allowMovement,allowRotation:t.allowRotation,bullet:t.isBullet,shapes:i,userData:st(n.userData)}}function P(t,o,n,e){let r=t.zpp_inner,a=n!=null?o.get(n.zpp_inner.id)??null:null,i=e!=null?o.get(e.zpp_inner.id)??null:null;return{body1Id:a,body2Id:i,active:r.active,ignore:r.ignore,stiff:r.stiff,frequency:r.frequency,damping:r.damping,maxForce:r.maxForce,maxError:r.maxError,breakUnderForce:r.breakUnderForce,breakUnderError:r.breakUnderError,removeOnBreak:r.removeOnBreak,userData:st(r.userData)}}function gt(t,o){switch(t.constructor?.name??""){case"PivotJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"PivotJoint",anchor1:b(e.anchor1),anchor2:b(e.anchor2)}}case"DistanceJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"DistanceJoint",anchor1:b(e.anchor1),anchor2:b(e.anchor2),jointMin:e.jointMin,jointMax:e.jointMax}}case"AngleJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"AngleJoint",jointMin:e.jointMin,jointMax:e.jointMax,ratio:e.ratio}}case"MotorJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"MotorJoint",rate:e.rate,ratio:e.ratio}}case"LineJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"LineJoint",anchor1:b(e.anchor1),anchor2:b(e.anchor2),direction:b(e.direction),jointMin:e.jointMin,jointMax:e.jointMax}}case"PulleyJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"PulleyJoint",anchor1:b(e.anchor1),anchor2:b(e.anchor2),anchor3:b(e.anchor3),anchor4:b(e.anchor4),jointMin:e.jointMin,jointMax:e.jointMax,ratio:e.ratio}}case"WeldJoint":{let e=t;return{...P(t,o,e.body1,e.body2),type:"WeldJoint",anchor1:b(e.anchor1),anchor2:b(e.anchor2),phase:e.phase}}default:return null}}function vt(t){let o=[],n=new Map,e=new Map;function r(p){let d=p.zpp_inner.id;if(e.has(d))return;let m=o.length;n.set(p,m),e.set(d,m),o.push(ht(p,m))}let a=t.bodies,i=a.length;for(let p=0;p<i;p++)r(a.at(p));let s=t.compounds,c=s.length;for(let p=0;p<c;p++){let m=s.at(p).bodies,w=m.length;for(let A=0;A<w;A++)r(m.at(A))}let u=[],y=new Map;function F(p){if(y.has(p))return;let d=gt(p,e);d!=null&&(y.set(p,u.length),u.push(d))}let v=t.constraints,I=v.length;for(let p=0;p<I;p++)F(v.at(p));for(let p=0;p<c;p++){let m=s.at(p).constraints,w=m.length;for(let A=0;A<w;A++)F(m.at(A))}let D=[];for(let p=0;p<c;p++){let d=s.at(p),m=[],w=d.bodies,A=w.length;for(let E=0;E<A;E++){let it=w.at(E),O=n.get(it);O!=null&&m.push(O)}let g=[],h=d.constraints,S=h.length;for(let E=0;E<S;E++){let it=h.at(E),O=y.get(it);O!=null&&g.push(O)}D.push({bodyIds:m,constraintIndices:g,childIndices:[]})}let l=t.zpp_inner.bphase.is_sweep?"SWEEP_AND_PRUNE":"DYNAMIC_AABB_TREE",M=t.gravity;return{version:1,gravity:b(M),worldLinearDrag:t.worldLinearDrag,worldAngularDrag:t.worldAngularDrag,sortContacts:t.sortContacts,broadphase:l,bodies:o,constraints:u,compounds:D}}function U(t){return f.get(t.x,t.y)}function C(t){return f.weak(t.x,t.y)}function Ct(t){return new W(t.elasticity,t.dynamicFriction,t.staticFriction,t.density,t.rollingFriction)}function wt(t){let o=new H;return o.collisionGroup=t.collisionGroup,o.collisionMask=t.collisionMask,o.sensorGroup=t.sensorGroup,o.sensorMask=t.sensorMask,o.fluidGroup=t.fluidGroup,o.fluidMask=t.fluidMask,o}function At(t){let o=new L(t.density,t.viscosity);return t.gravity!=null&&(o.gravity=U(t.gravity)),o}function It(t){let o=Ct(t.material),n=wt(t.filter),e;if(t.type==="circle"){let r=U(t.localCOM);e=new q(t.radius,r,o,n)}else{let r=t.localVerts.map(a=>U(a));e=new z(r,o,n)}return e.sensorEnabled=t.sensorEnabled,e.fluidEnabled=t.fluidEnabled,t.fluidEnabled&&t.fluidProperties!=null&&(e.fluidProperties=At(t.fluidProperties)),e}function Jt(t){let o=t.type==="STATIC"?x.STATIC:t.type==="KINEMATIC"?x.KINEMATIC:x.DYNAMIC,n=new j(o,C(t.position));n.rotation=t.rotation,t.type!=="STATIC"&&(n.velocity=U(t.velocity),n.angularVel=t.angularVel),n.kinematicVel=U(t.kinematicVel),n.kinAngVel=t.kinAngVel,n.surfaceVel=U(t.surfaceVel),t.type==="DYNAMIC"&&(n.force=U(t.force),n.torque=t.torque),t.massMode==="FIXED"&&t.mass!=null?n.mass=t.mass:t.massMode==="DEFAULT"&&(n.massMode=X.DEFAULT),t.inertiaMode==="FIXED"&&t.inertia!=null?n.inertia=t.inertia:t.inertiaMode==="DEFAULT"&&(n.inertiaMode=Y.DEFAULT),t.gravMassMode==="SCALED"?(n.gravMassMode=N.SCALED,n.gravMassScale=t.gravMassScale):t.gravMassMode==="FIXED"&&(n.gravMassMode=N.FIXED),n.allowMovement=t.allowMovement,n.allowRotation=t.allowRotation,n.isBullet=t.bullet;for(let e of t.shapes)It(e).body=n;return t.userData!=null&&Object.assign(n.userData,t.userData),n}function B(t,o){t.active=o.active,t.ignore=o.ignore,t.stiff=o.stiff,t.frequency=o.frequency,t.damping=o.damping,t.maxForce=o.maxForce,t.maxError=o.maxError,t.breakUnderForce=o.breakUnderForce,t.breakUnderError=o.breakUnderError,t.removeOnBreak=o.removeOnBreak,o.userData!=null&&Object.assign(t.userData,o.userData)}function St(t,o){let n=t.body1Id!=null?o[t.body1Id]??null:null,e=t.body2Id!=null?o[t.body2Id]??null:null;switch(t.type){case"PivotJoint":{let r=new tt(n,e,C(t.anchor1),C(t.anchor2));return B(r,t),r}case"DistanceJoint":{let r=new K(n,e,C(t.anchor1),C(t.anchor2),t.jointMin,t.jointMax);return B(r,t),r}case"AngleJoint":{let r=new $(n,e,t.jointMin,t.jointMax,t.ratio);return B(r,t),r}case"MotorJoint":{let r=new Z(n,e,t.rate,t.ratio);return B(r,t),r}case"LineJoint":{let r=new Q(n,e,C(t.anchor1),C(t.anchor2),C(t.direction),t.jointMin,t.jointMax);return B(r,t),r}case"PulleyJoint":{let r=new ot(n,e,null,null,C(t.anchor1),C(t.anchor2),C(t.anchor3),C(t.anchor4),t.jointMin,t.jointMax,t.ratio);return B(r,t),r}case"WeldJoint":{let r=new et(n,e,C(t.anchor1),C(t.anchor2),t.phase);return B(r,t),r}}}function xt(t){if(t.version!==1)throw new Error(`nape-js serialization: unsupported snapshot version ${t.version} (expected ${1})`);let o=t.broadphase==="SWEEP_AND_PRUNE"?V.SWEEP_AND_PRUNE:V.DYNAMIC_AABB_TREE,n=new R(C(t.gravity),o);n.worldLinearDrag=t.worldLinearDrag,n.worldAngularDrag=t.worldAngularDrag,n.sortContacts=t.sortContacts;let e=t.bodies.map(Jt),r=t.constraints.map(s=>St(s,e)),a=new Set,i=new Set;for(let s of t.compounds){let c=new G;for(let u of s.bodyIds)e[u].compound=c,a.add(u);for(let u of s.constraintIndices)r[u].compound=c,i.add(u);c.space=n}for(let s=0;s<e.length;s++)a.has(s)||(e[s].space=n);for(let s=0;s<r.length;s++)i.has(s)||(r[s].space=n);return n}var at=class{constructor(o=4096){this.pos=0;this.buf=new ArrayBuffer(o),this.view=new DataView(this.buf)}ensure(o){let n=this.pos+o;if(n<=this.buf.byteLength)return;let e=this.buf.byteLength;for(;e<n;)e*=2;let r=new ArrayBuffer(e);new Uint8Array(r).set(new Uint8Array(this.buf)),this.buf=r,this.view=new DataView(this.buf)}writeUint8(o){this.ensure(1),this.view.setUint8(this.pos,o),this.pos+=1}writeUint16(o){this.ensure(2),this.view.setUint16(this.pos,o,!0),this.pos+=2}writeUint32(o){this.ensure(4),this.view.setUint32(this.pos,o,!0),this.pos+=4}writeInt32(o){this.ensure(4),this.view.setInt32(this.pos,o,!0),this.pos+=4}writeFloat64(o){this.ensure(8),this.view.setFloat64(this.pos,o,!0),this.pos+=8}writeBool(o){this.writeUint8(o?1:0)}finish(){return new Uint8Array(this.buf,0,this.pos)}};var Et=1312903237,_=1,Pt=0,Bt=1,Ut=2,kt=3,Tt=4,Nt=5,Vt=6;function Ot(t,o){t.writeFloat64(o.elasticity),t.writeFloat64(o.dynamicFriction),t.writeFloat64(o.staticFriction),t.writeFloat64(o.density),t.writeFloat64(o.rollingFriction)}function _t(t,o){t.writeInt32(o.collisionGroup),t.writeInt32(o.collisionMask),t.writeInt32(o.sensorGroup),t.writeInt32(o.sensorMask),t.writeInt32(o.fluidGroup),t.writeInt32(o.fluidMask)}function Lt(t,o){if(o==null)return;t.writeFloat64(o.density),t.writeFloat64(o.viscosity);let n=o.gravity;t.writeBool(n!=null),n!=null&&(t.writeFloat64(n.x),t.writeFloat64(n.y))}function Rt(t,o){if(o.isCircle()){t.writeUint8(0);let a=o;t.writeFloat64(a.radius);let i=o.localCOM;t.writeFloat64(i.x),t.writeFloat64(i.y)}else{t.writeUint8(1);let i=o.localVerts,s=i.length;t.writeUint16(s);for(let c=0;c<s;c++){let u=i.at(c);t.writeFloat64(u.x),t.writeFloat64(u.y)}}Ot(t,o.material),_t(t,o.filter);let n=o.fluidEnabled,e=n&&o.fluidProperties!=null,r=(o.sensorEnabled?1:0)|(n?2:0)|(e?4:0);t.writeUint8(r),e&&Lt(t,o.fluidProperties)}function jt(t,o){let n=o.zpp_inner;t.writeUint8(n.type),t.writeFloat64(o.position.x),t.writeFloat64(o.position.y),t.writeFloat64(o.rotation),t.writeFloat64(o.velocity.x),t.writeFloat64(o.velocity.y),t.writeFloat64(o.angularVel),t.writeFloat64(o.kinematicVel.x),t.writeFloat64(o.kinematicVel.y),t.writeFloat64(o.kinAngVel),t.writeFloat64(o.surfaceVel.x),t.writeFloat64(o.surfaceVel.y),t.writeFloat64(o.force.x),t.writeFloat64(o.force.y),t.writeFloat64(n.type===2?o.torque:0),t.writeUint8(n.massMode),t.writeFloat64(n.massMode===1?n.cmass:0),t.writeUint8(n.inertiaMode),t.writeFloat64(n.inertiaMode===1?n.cinertia:0),t.writeUint8(n.gravMassMode),t.writeFloat64(n.gravMassScale);let e=(o.allowMovement?1:0)|(o.allowRotation?2:0)|(o.isBullet?4:0);t.writeUint8(e);let r=o.shapes,a=r.length;t.writeUint16(a);for(let i=0;i<a;i++)Rt(t,r.at(i))}var lt={PivotJoint:Pt,DistanceJoint:Bt,AngleJoint:Ut,MotorJoint:kt,LineJoint:Tt,PulleyJoint:Nt,WeldJoint:Vt};function k(t,o,n,e,r){let a=e!=null?n.get(e.zpp_inner.id)??-1:-1,i=r!=null?n.get(r.zpp_inner.id)??-1:-1;t.writeInt32(a),t.writeInt32(i);let s=o.zpp_inner,c=(s.active?1:0)|(s.ignore?2:0)|(s.stiff?4:0)|(s.breakUnderForce?8:0)|(s.breakUnderError?16:0)|(s.removeOnBreak?32:0);t.writeUint8(c),t.writeFloat64(s.frequency),t.writeFloat64(s.damping),t.writeFloat64(s.maxForce),t.writeFloat64(s.maxError)}function Gt(t,o,n){let e=o.constructor?.name??"",r=lt[e];if(r===void 0)return!1;switch(t.writeUint8(r),e){case"PivotJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.anchor1.x),t.writeFloat64(a.anchor1.y),t.writeFloat64(a.anchor2.x),t.writeFloat64(a.anchor2.y);break}case"DistanceJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.anchor1.x),t.writeFloat64(a.anchor1.y),t.writeFloat64(a.anchor2.x),t.writeFloat64(a.anchor2.y),t.writeFloat64(a.jointMin),t.writeFloat64(a.jointMax);break}case"AngleJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.jointMin),t.writeFloat64(a.jointMax),t.writeFloat64(a.ratio);break}case"MotorJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.rate),t.writeFloat64(a.ratio);break}case"LineJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.anchor1.x),t.writeFloat64(a.anchor1.y),t.writeFloat64(a.anchor2.x),t.writeFloat64(a.anchor2.y),t.writeFloat64(a.direction.x),t.writeFloat64(a.direction.y),t.writeFloat64(a.jointMin),t.writeFloat64(a.jointMax);break}case"PulleyJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.anchor1.x),t.writeFloat64(a.anchor1.y),t.writeFloat64(a.anchor2.x),t.writeFloat64(a.anchor2.y),t.writeFloat64(a.anchor3.x),t.writeFloat64(a.anchor3.y),t.writeFloat64(a.anchor4.x),t.writeFloat64(a.anchor4.y),t.writeFloat64(a.jointMin),t.writeFloat64(a.jointMax),t.writeFloat64(a.ratio);break}case"WeldJoint":{let a=o;k(t,o,n,a.body1,a.body2),t.writeFloat64(a.anchor1.x),t.writeFloat64(a.anchor1.y),t.writeFloat64(a.anchor2.x),t.writeFloat64(a.anchor2.y),t.writeFloat64(a.phase);break}}return!0}function Wt(t){let o=new at,n=[],e=new Map,r=new Map;function a(l){let M=l.zpp_inner.id;if(e.has(M))return;let p=n.length;r.set(l,p),e.set(M,p),n.push(l)}let i=t.bodies,s=i.length;for(let l=0;l<s;l++)a(i.at(l));let c=t.compounds,u=c.length;for(let l=0;l<u;l++){let p=c.at(l).bodies,d=p.length;for(let m=0;m<d;m++)a(p.at(m))}let y=[],F=new Map;function v(l){if(F.has(l))return;let M=l.constructor?.name??"";lt[M]!==void 0&&(F.set(l,y.length),y.push(l))}let I=t.constraints,D=I.length;for(let l=0;l<D;l++)v(I.at(l));for(let l=0;l<u;l++){let p=c.at(l).constraints,d=p.length;for(let m=0;m<d;m++)v(p.at(m))}o.writeUint32(Et),o.writeUint16(_),o.writeUint32(n.length),o.writeUint32(y.length),o.writeUint32(u);let J=t.gravity;o.writeFloat64(J.x),o.writeFloat64(J.y),o.writeFloat64(t.worldLinearDrag),o.writeFloat64(t.worldAngularDrag),o.writeBool(t.sortContacts),o.writeUint8(t.zpp_inner.bphase.is_sweep?0:1);for(let l=0;l<n.length;l++)jt(o,n[l]);for(let l=0;l<y.length;l++)Gt(o,y[l],e);for(let l=0;l<u;l++){let M=c.at(l),p=M.bodies,d=p.length;o.writeUint16(d);for(let g=0;g<d;g++){let h=p.at(g),S=r.get(h)??0;o.writeUint32(S)}let m=M.constraints,w=m.length,A=0;for(let g=0;g<w;g++){let h=m.at(g);F.has(h)&&A++}o.writeUint16(A);for(let g=0;g<w;g++){let h=m.at(g),S=F.get(h);S!=null&&o.writeUint32(S)}o.writeUint16(0)}return o.finish()}var rt=class{constructor(o){this.pos=0;this.view=new DataView(o.buffer,o.byteOffset,o.byteLength)}readUint8(){let o=this.view.getUint8(this.pos);return this.pos+=1,o}readUint16(){let o=this.view.getUint16(this.pos,!0);return this.pos+=2,o}readUint32(){let o=this.view.getUint32(this.pos,!0);return this.pos+=4,o}readInt32(){let o=this.view.getInt32(this.pos,!0);return this.pos+=4,o}readFloat64(){let o=this.view.getFloat64(this.pos,!0);return this.pos+=8,o}readBool(){return this.readUint8()!==0}};var ct=1312903237,Yt=0,Xt=1,qt=2,zt=3,Ht=4,$t=5,Kt=6,Qt={1:x.STATIC,2:x.DYNAMIC,3:x.KINEMATIC};function ut(t){let o=t.readFloat64(),n=t.readFloat64(),e=t.readFloat64(),r=t.readFloat64(),a=t.readFloat64();return new W(o,n,e,r,a)}function pt(t){let o=new H;return o.collisionGroup=t.readInt32(),o.collisionMask=t.readInt32(),o.sensorGroup=t.readInt32(),o.sensorMask=t.readInt32(),o.fluidGroup=t.readInt32(),o.fluidMask=t.readInt32(),o}function Zt(t){let o=t.readFloat64(),n=t.readFloat64(),e=new L(o,n);return t.readBool()&&(e.gravity=f.get(t.readFloat64(),t.readFloat64())),e}function to(t){let o=t.readUint8(),n;if(o===0){let a=t.readFloat64(),i=t.readFloat64(),s=t.readFloat64(),c=ut(t),u=pt(t);n=new q(a,f.weak(i,s),c,u)}else{let a=t.readUint16(),i=[];for(let u=0;u<a;u++)i.push(f.get(t.readFloat64(),t.readFloat64()));let s=ut(t),c=pt(t);n=new z(i,s,c)}let e=t.readUint8();return n.sensorEnabled=(e&1)!==0,n.fluidEnabled=(e&2)!==0,(e&4)!==0&&(n.fluidProperties=Zt(t)),n}function oo(t){let o=t.readUint8(),n=Qt[o]??x.DYNAMIC,e=t.readFloat64(),r=t.readFloat64(),a=t.readFloat64(),i=new j(n,f.weak(e,r));i.rotation=a;let s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64();o!==1&&(i.velocity=f.get(s,c),i.angularVel=u),i.kinematicVel=f.get(t.readFloat64(),t.readFloat64()),i.kinAngVel=t.readFloat64(),i.surfaceVel=f.get(t.readFloat64(),t.readFloat64());let y=t.readFloat64(),F=t.readFloat64(),v=t.readFloat64();o===2&&(i.force=f.get(y,F),i.torque=v);let I=t.readUint8(),D=t.readFloat64();I===1&&D!==0?i.mass=D:I===0&&(i.massMode=X.DEFAULT);let J=t.readUint8(),l=t.readFloat64();J===1&&l!==0?i.inertia=l:J===0&&(i.inertiaMode=Y.DEFAULT);let M=t.readUint8(),p=t.readFloat64();M===2?(i.gravMassMode=N.SCALED,i.gravMassScale=p):M===1&&(i.gravMassMode=N.FIXED);let d=t.readUint8();i.allowMovement=(d&1)!==0,i.allowRotation=(d&2)!==0,i.isBullet=(d&4)!==0;let m=t.readUint16();for(let w=0;w<m;w++)to(t).body=i;return i}function eo(t){let o=t.readInt32(),n=t.readInt32(),e=t.readUint8(),r=t.readFloat64(),a=t.readFloat64(),i=t.readFloat64(),s=t.readFloat64();return{body1Id:o,body2Id:n,active:(e&1)!==0,ignore:(e&2)!==0,stiff:(e&4)!==0,breakUnderForce:(e&8)!==0,breakUnderError:(e&16)!==0,removeOnBreak:(e&32)!==0,frequency:r,damping:a,maxForce:i,maxError:s}}function T(t,o){t.active=o.active,t.ignore=o.ignore,t.stiff=o.stiff,t.frequency=o.frequency,t.damping=o.damping,t.maxForce=o.maxForce,t.maxError=o.maxError,t.breakUnderForce=o.breakUnderForce,t.breakUnderError=o.breakUnderError,t.removeOnBreak=o.removeOnBreak}function no(t,o){let n=t.readUint8(),e=eo(t),r=e.body1Id>=0?o[e.body1Id]??null:null,a=e.body2Id>=0?o[e.body2Id]??null:null;switch(n){case Yt:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64(),y=new tt(r,a,f.weak(i,s),f.weak(c,u));return T(y,e),y}case Xt:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64(),y=t.readFloat64(),F=t.readFloat64(),v=new K(r,a,f.weak(i,s),f.weak(c,u),y,F);return T(v,e),v}case qt:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=new $(r,a,i,s,c);return T(u,e),u}case zt:{let i=t.readFloat64(),s=t.readFloat64(),c=new Z(r,a,i,s);return T(c,e),c}case Ht:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64(),y=t.readFloat64(),F=t.readFloat64(),v=t.readFloat64(),I=t.readFloat64(),D=new Q(r,a,f.weak(i,s),f.weak(c,u),f.weak(y,F),v,I);return T(D,e),D}case $t:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64(),y=t.readFloat64(),F=t.readFloat64(),v=t.readFloat64(),I=t.readFloat64(),D=t.readFloat64(),J=t.readFloat64(),l=t.readFloat64(),M=new ot(r,a,null,null,f.weak(i,s),f.weak(c,u),f.weak(y,F),f.weak(v,I),D,J,l);return T(M,e),M}case Kt:{let i=t.readFloat64(),s=t.readFloat64(),c=t.readFloat64(),u=t.readFloat64(),y=t.readFloat64(),F=new et(r,a,f.weak(i,s),f.weak(c,u),y);return T(F,e),F}default:throw new Error(`nape-js binary: unknown constraint type tag ${n}`)}}function ao(t){let o=new rt(t),n=o.readUint32();if(n!==ct)throw new Error(`nape-js binary: invalid magic bytes 0x${n.toString(16)} (expected 0x${ct.toString(16)})`);let e=o.readUint16();if(e!==_)throw new Error(`nape-js binary: unsupported version ${e} (expected ${_})`);let r=o.readUint32(),a=o.readUint32(),i=o.readUint32(),s=o.readFloat64(),c=o.readFloat64(),u=o.readFloat64(),y=o.readFloat64(),F=o.readBool(),I=o.readUint8()===0?V.SWEEP_AND_PRUNE:V.DYNAMIC_AABB_TREE,D=new R(f.weak(s,c),I);D.worldLinearDrag=u,D.worldAngularDrag=y,D.sortContacts=F;let J=new Array(r);for(let d=0;d<r;d++)J[d]=oo(o);let l=new Array(a);for(let d=0;d<a;d++)l[d]=no(o,J);let M=new Set,p=new Set;for(let d=0;d<i;d++){let m=new G,w=o.readUint16();for(let h=0;h<w;h++){let S=o.readUint32();J[S].compound=m,M.add(S)}let A=o.readUint16();for(let h=0;h<A;h++){let S=o.readUint32();l[S].compound=m,p.add(S)}let g=o.readUint16();for(let h=0;h<g;h++)o.readUint32();m.space=D}for(let d=0;d<r;d++)M.has(d)||(J[d].space=D);for(let d=0;d<a;d++)p.has(d)||(l[d].space=D);return D}export{_ as BINARY_SNAPSHOT_VERSION,nt as SNAPSHOT_VERSION,ao as spaceFromBinary,xt as spaceFromJSON,Wt as spaceToBinary,vt as spaceToJSON};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newkrok/nape-js",
3
- "version": "3.8.2",
3
+ "version": "3.9.1",
4
4
  "description": "Nape Physics Engine - Modern TypeScript wrapper for 2D physics simulation",
5
5
  "type": "module",
6
6
  "sideEffects": [