@flighthq/physics2d-abi 0.4.0-next.1836.147ae1e

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 (39) hide show
  1. package/dist/contract.d.ts +6 -0
  2. package/dist/contract.d.ts.map +1 -0
  3. package/dist/contract.js +6 -0
  4. package/dist/contract.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/physics2DAbi.d.ts +11 -0
  10. package/dist/physics2DAbi.d.ts.map +1 -0
  11. package/dist/physics2DAbi.js +32 -0
  12. package/dist/physics2DAbi.js.map +1 -0
  13. package/dist/physics2DAbiBuffer.d.ts +10 -0
  14. package/dist/physics2DAbiBuffer.d.ts.map +1 -0
  15. package/dist/physics2DAbiBuffer.js +81 -0
  16. package/dist/physics2DAbiBuffer.js.map +1 -0
  17. package/dist/physics2DAbiCommand.d.ts +17 -0
  18. package/dist/physics2DAbiCommand.d.ts.map +1 -0
  19. package/dist/physics2DAbiCommand.js +459 -0
  20. package/dist/physics2DAbiCommand.js.map +1 -0
  21. package/dist/physics2DAbiLayout.d.ts +220 -0
  22. package/dist/physics2DAbiLayout.d.ts.map +1 -0
  23. package/dist/physics2DAbiLayout.js +250 -0
  24. package/dist/physics2DAbiLayout.js.map +1 -0
  25. package/dist/physics2DAbiQuery.d.ts +7 -0
  26. package/dist/physics2DAbiQuery.d.ts.map +1 -0
  27. package/dist/physics2DAbiQuery.js +16 -0
  28. package/dist/physics2DAbiQuery.js.map +1 -0
  29. package/dist/referencePhysics2DAbi.d.ts +3 -0
  30. package/dist/referencePhysics2DAbi.d.ts.map +1 -0
  31. package/dist/referencePhysics2DAbi.js +1089 -0
  32. package/dist/referencePhysics2DAbi.js.map +1 -0
  33. package/package.json +50 -0
  34. package/src/physics2DAbi.test.ts +348 -0
  35. package/src/physics2DAbiBuffer.test.ts +121 -0
  36. package/src/physics2DAbiCommand.test.ts +337 -0
  37. package/src/physics2DAbiLayout.test.ts +293 -0
  38. package/src/physics2DAbiQuery.test.ts +145 -0
  39. package/src/referencePhysics2DAbi.test.ts +271 -0
@@ -0,0 +1,459 @@
1
+ import { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWeldJointKind, Physics2DWheelJointKind, } from '@flighthq/physics2d/contract';
2
+ import { Physics2DAbiBodyFlag, Physics2DAbiBodyType, Physics2DAbiCommandByteLength, Physics2DAbiCommandHeaderByteLength, Physics2DAbiCommandKind, Physics2DAbiCommandMagic, Physics2DAbiCommandRecordHeaderByteLength, Physics2DAbiJointFlag, Physics2DAbiJointKind, Physics2DAbiJointKindValueCount, Physics2DAbiSetColliderPayloadOffset, Physics2DAbiSetJointPayloadOffset, Physics2DAbiShapeHeaderByteLength, Physics2DAbiShapeKind, Physics2DAbiSolverConfigFlag, Physics2DAbiVersion, } from './physics2DAbiLayout';
3
+ export function getPhysics2DAbiSetColliderCommandByteLength(collider) {
4
+ const shapeByteLength = getShapeByteLength(collider.local);
5
+ if (shapeByteLength < 0)
6
+ return -1;
7
+ const byteLength = Physics2DAbiCommandRecordHeaderByteLength + Physics2DAbiSetColliderPayloadOffset.Shape + shapeByteLength;
8
+ return Number.isSafeInteger(byteLength) && byteLength <= 0xffffffff ? byteLength : -1;
9
+ }
10
+ export function writePhysics2DAbiApplyForceAtPointCommand(out, bodyId, x, y, pointX, pointY) {
11
+ return writeBodyAction(out, Physics2DAbiCommandKind.ApplyForceAtPoint, bodyId, x, y, pointX, pointY);
12
+ }
13
+ export function writePhysics2DAbiApplyForceCommand(out, bodyId, x, y) {
14
+ return writeBodyAction(out, Physics2DAbiCommandKind.ApplyForce, bodyId, x, y, 0, 0);
15
+ }
16
+ export function writePhysics2DAbiApplyLinearImpulseAtPointCommand(out, bodyId, x, y, pointX, pointY) {
17
+ return writeBodyAction(out, Physics2DAbiCommandKind.ApplyLinearImpulseAtPoint, bodyId, x, y, pointX, pointY);
18
+ }
19
+ export function writePhysics2DAbiApplyLinearImpulseCommand(out, bodyId, x, y) {
20
+ return writeBodyAction(out, Physics2DAbiCommandKind.ApplyLinearImpulse, bodyId, x, y, 0, 0);
21
+ }
22
+ // A plane's torque is one scalar, so this carries a single value where the 3D record carries a vector.
23
+ // It still travels in the shared body-action record with the unused slots zeroed, so every body action
24
+ // has one fixed length and a reader needs no per-kind size table.
25
+ export function writePhysics2DAbiApplyTorqueCommand(out, bodyId, torque) {
26
+ return writeBodyAction(out, Physics2DAbiCommandKind.ApplyTorque, bodyId, torque, 0, 0, 0);
27
+ }
28
+ export function writePhysics2DAbiDestroyBodyCommand(out, bodyId) {
29
+ return writeEmptyCommand(out, Physics2DAbiCommandKind.DestroyBody, bodyId);
30
+ }
31
+ export function writePhysics2DAbiDestroyColliderCommand(out, colliderId) {
32
+ return writeEmptyCommand(out, Physics2DAbiCommandKind.DestroyCollider, colliderId);
33
+ }
34
+ export function writePhysics2DAbiDestroyJointCommand(out, jointId) {
35
+ return writeEmptyCommand(out, Physics2DAbiCommandKind.DestroyJoint, jointId);
36
+ }
37
+ export function writePhysics2DAbiSetBodyCommand(out, bodyId, body) {
38
+ if (!isObjectId(bodyId))
39
+ return false;
40
+ const type = encodeBodyType(body.type);
41
+ if (type < 0)
42
+ return false;
43
+ const record = beginCommand(out, Physics2DAbiCommandKind.SetBody, Physics2DAbiCommandByteLength.SetBody, bodyId, 0);
44
+ if (record === null)
45
+ return false;
46
+ let flags = type;
47
+ if (body.fixedRotation)
48
+ flags |= Physics2DAbiBodyFlag.FixedRotation;
49
+ if (body.bullet)
50
+ flags |= Physics2DAbiBodyFlag.Bullet;
51
+ if (body.sleeping)
52
+ flags |= Physics2DAbiBodyFlag.Sleeping;
53
+ if (body.sleepEnabled)
54
+ flags |= Physics2DAbiBodyFlag.SleepEnabled;
55
+ record.view.setUint32(record.payload, flags, true);
56
+ record.view.setUint32(record.payload + 4, 0, true);
57
+ writeFloat64Values(record.view, record.payload + 8, [
58
+ body.x,
59
+ body.y,
60
+ body.angle,
61
+ body.velocityX,
62
+ body.velocityY,
63
+ body.angularVelocity,
64
+ body.forceX,
65
+ body.forceY,
66
+ body.torque,
67
+ body.mass,
68
+ body.inertia,
69
+ body.centerX,
70
+ body.centerY,
71
+ body.linearDamping,
72
+ body.angularDamping,
73
+ body.gravityScale,
74
+ body.sleepTimer,
75
+ ]);
76
+ finishCommand(out, record);
77
+ return true;
78
+ }
79
+ export function writePhysics2DAbiSetColliderCommand(out, colliderId, bodyId, collider) {
80
+ if (!isObjectId(colliderId) ||
81
+ !isObjectId(bodyId) ||
82
+ !isUint32(collider.filter.categoryBits) ||
83
+ !isUint32(collider.filter.maskBits) ||
84
+ !isInt32(collider.filter.groupIndex)) {
85
+ return false;
86
+ }
87
+ const shapeByteLength = getShapeByteLength(collider.local);
88
+ if (shapeByteLength < 0)
89
+ return false;
90
+ const record = beginCommand(out, Physics2DAbiCommandKind.SetCollider, Physics2DAbiCommandRecordHeaderByteLength + Physics2DAbiSetColliderPayloadOffset.Shape + shapeByteLength, colliderId, bodyId);
91
+ if (record === null)
92
+ return false;
93
+ record.view.setUint32(record.payload, collider.sensor ? 1 : 0, true);
94
+ record.view.setUint32(record.payload + 4, collider.filter.categoryBits >>> 0, true);
95
+ record.view.setUint32(record.payload + 8, collider.filter.maskBits >>> 0, true);
96
+ record.view.setInt32(record.payload + 12, collider.filter.groupIndex | 0, true);
97
+ record.view.setFloat64(record.payload + 16, collider.material.density, true);
98
+ record.view.setFloat64(record.payload + 24, collider.material.friction, true);
99
+ record.view.setFloat64(record.payload + 32, collider.material.restitution, true);
100
+ writeShape(record.view, record.payload + Physics2DAbiSetColliderPayloadOffset.Shape, collider.local);
101
+ finishCommand(out, record);
102
+ return true;
103
+ }
104
+ export function writePhysics2DAbiSetGravityCommand(out, x, y) {
105
+ const record = beginCommand(out, Physics2DAbiCommandKind.SetGravity, Physics2DAbiCommandByteLength.SetGravity, 0, 0);
106
+ if (record === null)
107
+ return false;
108
+ record.view.setFloat64(record.payload, x, true);
109
+ record.view.setFloat64(record.payload + 8, y, true);
110
+ finishCommand(out, record);
111
+ return true;
112
+ }
113
+ export function writePhysics2DAbiSetJointCommand(out, jointId, bodyAId, bodyBId, joint) {
114
+ if (!isObjectId(jointId) || !isObjectId(bodyAId) || !isObjectId(bodyBId))
115
+ return false;
116
+ const kind = encodeJointKind(joint.kind);
117
+ if (kind < 0)
118
+ return false;
119
+ const record = beginCommand(out, Physics2DAbiCommandKind.SetJoint, Physics2DAbiCommandByteLength.SetJoint, jointId, 0);
120
+ if (record === null)
121
+ return false;
122
+ record.view.setUint32(record.payload + Physics2DAbiSetJointPayloadOffset.Kind, kind, true);
123
+ record.view.setUint32(record.payload + Physics2DAbiSetJointPayloadOffset.BodyA, bodyAId >>> 0, true);
124
+ record.view.setUint32(record.payload + Physics2DAbiSetJointPayloadOffset.BodyB, bodyBId >>> 0, true);
125
+ record.view.setUint32(record.payload + Physics2DAbiSetJointPayloadOffset.Flags, encodeJointFlags(joint, kind), true);
126
+ writeFloat64Values(record.view, record.payload + Physics2DAbiSetJointPayloadOffset.CommonValues, [
127
+ joint.localAnchorAX,
128
+ joint.localAnchorAY,
129
+ joint.localAnchorBX,
130
+ joint.localAnchorBY,
131
+ joint.breakForce,
132
+ joint.breakTorque,
133
+ ]);
134
+ writeFloat64Values(record.view, record.payload + Physics2DAbiSetJointPayloadOffset.KindValues, getJointKindValues(joint, kind));
135
+ finishCommand(out, record);
136
+ return true;
137
+ }
138
+ export function writePhysics2DAbiSetSolverConfigCommand(out, config) {
139
+ if (!isUint32(config.velocityIterations) ||
140
+ !isUint32(config.positionIterations) ||
141
+ !isUint32(config.maxCcdSubsteps) ||
142
+ !isUint32(config.maxCcdRotationSubsteps)) {
143
+ return false;
144
+ }
145
+ const record = beginCommand(out, Physics2DAbiCommandKind.SetSolverConfig, Physics2DAbiCommandByteLength.SetSolverConfig, 0, 0);
146
+ if (record === null)
147
+ return false;
148
+ let flags = 0;
149
+ if (config.allowSleeping)
150
+ flags |= Physics2DAbiSolverConfigFlag.AllowSleeping;
151
+ if (config.continuousCollision)
152
+ flags |= Physics2DAbiSolverConfigFlag.ContinuousCollision;
153
+ if (config.warmStarting)
154
+ flags |= Physics2DAbiSolverConfigFlag.WarmStarting;
155
+ record.view.setUint32(record.payload, flags, true);
156
+ record.view.setUint32(record.payload + 4, 0, true);
157
+ record.view.setUint32(record.payload + 8, config.maxCcdSubsteps >>> 0, true);
158
+ record.view.setUint32(record.payload + 12, config.maxCcdRotationSubsteps >>> 0, true);
159
+ record.view.setUint32(record.payload + 16, config.velocityIterations >>> 0, true);
160
+ record.view.setUint32(record.payload + 20, config.positionIterations >>> 0, true);
161
+ record.view.setUint32(record.payload + 24, 0, true);
162
+ record.view.setUint32(record.payload + 28, 0, true);
163
+ writeFloat64Values(record.view, record.payload + 32, [
164
+ config.sleepLinearThreshold,
165
+ config.sleepAngularThreshold,
166
+ config.timeToSleep,
167
+ config.penetrationSlop,
168
+ config.positionCorrection,
169
+ config.restitutionThreshold,
170
+ ]);
171
+ finishCommand(out, record);
172
+ return true;
173
+ }
174
+ export function writePhysics2DAbiWakeBodyCommand(out, bodyId) {
175
+ return writeEmptyCommand(out, Physics2DAbiCommandKind.WakeBody, bodyId);
176
+ }
177
+ function beginCommand(out, kind, byteLength, objectId, relatedId) {
178
+ if (!Number.isSafeInteger(byteLength) ||
179
+ byteLength < Physics2DAbiCommandRecordHeaderByteLength ||
180
+ byteLength > 0xffffffff ||
181
+ byteLength % 8 !== 0 ||
182
+ !Number.isSafeInteger(out.byteLength) ||
183
+ out.byteLength < Physics2DAbiCommandHeaderByteLength ||
184
+ !Number.isSafeInteger(out.commandCount) ||
185
+ out.commandCount < 0 ||
186
+ !Number.isSafeInteger(out.byteLength + byteLength) ||
187
+ out.byteLength + byteLength > out.data.byteLength) {
188
+ return null;
189
+ }
190
+ const view = new DataView(out.data.buffer, out.data.byteOffset, out.data.byteLength);
191
+ // The stream header is re-read rather than trusted, so a buffer mutated behind the record's back —
192
+ // or one never initialized by `clearPhysics2DAbiCommandBuffer` — is refused instead of producing a
193
+ // stream whose header disagrees with its contents.
194
+ if (view.getUint32(0, true) !== Physics2DAbiCommandMagic ||
195
+ view.getUint32(4, true) !== Physics2DAbiVersion ||
196
+ view.getUint32(8, true) !== out.byteLength ||
197
+ view.getUint32(12, true) !== out.commandCount) {
198
+ return null;
199
+ }
200
+ const start = out.byteLength;
201
+ view.setUint32(start, kind, true);
202
+ view.setUint32(start + 4, byteLength, true);
203
+ view.setUint32(start + 8, objectId >>> 0, true);
204
+ view.setUint32(start + 12, relatedId >>> 0, true);
205
+ return { view, start, payload: start + Physics2DAbiCommandRecordHeaderByteLength, byteLength };
206
+ }
207
+ function encodeBodyType(type) {
208
+ if (type === 'dynamic')
209
+ return Physics2DAbiBodyType.Dynamic;
210
+ if (type === 'kinematic')
211
+ return Physics2DAbiBodyType.Kinematic;
212
+ if (type === 'static')
213
+ return Physics2DAbiBodyType.Static;
214
+ return -1;
215
+ }
216
+ // The Broken bit is deliberately never set here. A 2D joint has no `broken` field, because breaking
217
+ // REMOVES the joint from the world and records it in `world.jointEvents.broke`; the bit exists only on
218
+ // the readback side, where it is the sole way a buffer-based caller can learn that a joint it owns is
219
+ // gone. A SetJoint record carrying it is rejected rather than ignored.
220
+ function encodeJointFlags(joint, kind) {
221
+ let flags = joint.collideConnected ? Physics2DAbiJointFlag.CollideConnected : 0;
222
+ if (kind === Physics2DAbiJointKind.Revolute) {
223
+ const value = joint;
224
+ if (value.enableMotor)
225
+ flags |= Physics2DAbiJointFlag.EnableMotor;
226
+ if (value.enableLimit)
227
+ flags |= Physics2DAbiJointFlag.EnableLimit;
228
+ if (value.enableLimitSpring)
229
+ flags |= Physics2DAbiJointFlag.EnableLimitSpring;
230
+ }
231
+ else if (kind === Physics2DAbiJointKind.Prismatic) {
232
+ const value = joint;
233
+ if (value.enableMotor)
234
+ flags |= Physics2DAbiJointFlag.EnableMotor;
235
+ if (value.enableLimit)
236
+ flags |= Physics2DAbiJointFlag.EnableLimit;
237
+ if (value.enableLimitSpring)
238
+ flags |= Physics2DAbiJointFlag.EnableLimitSpring;
239
+ }
240
+ else if (kind === Physics2DAbiJointKind.Wheel) {
241
+ if (joint.enableMotor)
242
+ flags |= Physics2DAbiJointFlag.EnableMotor;
243
+ }
244
+ else if (kind === Physics2DAbiJointKind.Gear) {
245
+ const value = joint;
246
+ if (value.coordinateA === 'linear')
247
+ flags |= Physics2DAbiJointFlag.LinearCoordinateA;
248
+ if (value.coordinateB === 'linear')
249
+ flags |= Physics2DAbiJointFlag.LinearCoordinateB;
250
+ }
251
+ return flags;
252
+ }
253
+ function encodeJointKind(kind) {
254
+ if (kind === Physics2DDistanceJointKind)
255
+ return Physics2DAbiJointKind.Distance;
256
+ if (kind === Physics2DRevoluteJointKind)
257
+ return Physics2DAbiJointKind.Revolute;
258
+ if (kind === Physics2DPrismaticJointKind)
259
+ return Physics2DAbiJointKind.Prismatic;
260
+ if (kind === Physics2DWeldJointKind)
261
+ return Physics2DAbiJointKind.Weld;
262
+ if (kind === Physics2DWheelJointKind)
263
+ return Physics2DAbiJointKind.Wheel;
264
+ if (kind === Physics2DRopeJointKind)
265
+ return Physics2DAbiJointKind.Rope;
266
+ if (kind === Physics2DMouseJointKind)
267
+ return Physics2DAbiJointKind.Mouse;
268
+ if (kind === Physics2DPulleyJointKind)
269
+ return Physics2DAbiJointKind.Pulley;
270
+ if (kind === Physics2DGearJointKind)
271
+ return Physics2DAbiJointKind.Gear;
272
+ return -1;
273
+ }
274
+ function encodeShapeKind(shape) {
275
+ if (shape.kind === 'circle')
276
+ return Physics2DAbiShapeKind.Circle;
277
+ if (shape.kind === 'aabb')
278
+ return Physics2DAbiShapeKind.Aabb;
279
+ if (shape.kind === 'obb')
280
+ return Physics2DAbiShapeKind.Obb;
281
+ if (shape.kind === 'capsule')
282
+ return Physics2DAbiShapeKind.Capsule;
283
+ if (shape.kind === 'polygon')
284
+ return Physics2DAbiShapeKind.Polygon;
285
+ if (shape.kind === 'segment')
286
+ return Physics2DAbiShapeKind.Segment;
287
+ return Physics2DAbiShapeKind.Point;
288
+ }
289
+ function finishCommand(out, command) {
290
+ out.byteLength = command.start + command.byteLength;
291
+ out.commandCount += 1;
292
+ command.view.setUint32(8, out.byteLength, true);
293
+ command.view.setUint32(12, out.commandCount, true);
294
+ }
295
+ function getJointKindValues(joint, kind) {
296
+ const values = new Array(Physics2DAbiJointKindValueCount).fill(0);
297
+ if (kind === Physics2DAbiJointKind.Distance) {
298
+ const value = joint;
299
+ values[0] = value.length;
300
+ values[1] = value.frequencyHz;
301
+ values[2] = value.dampingRatio;
302
+ }
303
+ else if (kind === Physics2DAbiJointKind.Revolute) {
304
+ const value = joint;
305
+ values[0] = value.lowerAngle;
306
+ values[1] = value.upperAngle;
307
+ values[2] = value.referenceAngle;
308
+ values[3] = value.motorSpeed;
309
+ values[4] = value.maxMotorTorque;
310
+ values[5] = value.limitFrequencyHz;
311
+ values[6] = value.limitDampingRatio;
312
+ }
313
+ else if (kind === Physics2DAbiJointKind.Prismatic) {
314
+ const value = joint;
315
+ values[0] = value.localAxisAX;
316
+ values[1] = value.localAxisAY;
317
+ values[2] = value.referenceAngle;
318
+ values[3] = value.lowerTranslation;
319
+ values[4] = value.upperTranslation;
320
+ values[5] = value.motorSpeed;
321
+ values[6] = value.maxMotorForce;
322
+ values[7] = value.limitFrequencyHz;
323
+ values[8] = value.limitDampingRatio;
324
+ }
325
+ else if (kind === Physics2DAbiJointKind.Weld) {
326
+ values[0] = joint.referenceAngle;
327
+ }
328
+ else if (kind === Physics2DAbiJointKind.Wheel) {
329
+ const value = joint;
330
+ values[0] = value.localAxisAX;
331
+ values[1] = value.localAxisAY;
332
+ values[2] = value.restTranslation;
333
+ values[3] = value.frequencyHz;
334
+ values[4] = value.dampingRatio;
335
+ values[5] = value.motorSpeed;
336
+ values[6] = value.maxMotorTorque;
337
+ }
338
+ else if (kind === Physics2DAbiJointKind.Rope) {
339
+ values[0] = joint.maxLength;
340
+ }
341
+ else if (kind === Physics2DAbiJointKind.Mouse) {
342
+ const value = joint;
343
+ values[0] = value.targetX;
344
+ values[1] = value.targetY;
345
+ values[2] = value.maxForce;
346
+ values[3] = value.frequencyHz;
347
+ values[4] = value.dampingRatio;
348
+ }
349
+ else if (kind === Physics2DAbiJointKind.Pulley) {
350
+ const value = joint;
351
+ values[0] = value.groundAnchorAX;
352
+ values[1] = value.groundAnchorAY;
353
+ values[2] = value.groundAnchorBX;
354
+ values[3] = value.groundAnchorBY;
355
+ values[4] = value.ratio;
356
+ values[5] = value.constant;
357
+ }
358
+ else if (kind === Physics2DAbiJointKind.Gear) {
359
+ const value = joint;
360
+ values[0] = value.axisAX;
361
+ values[1] = value.axisAY;
362
+ values[2] = value.axisBX;
363
+ values[3] = value.axisBY;
364
+ values[4] = value.ratio;
365
+ values[5] = value.constant;
366
+ }
367
+ return values;
368
+ }
369
+ function getShapeByteLength(shape) {
370
+ const scalarCount = getShapeScalarCount(shape);
371
+ if (scalarCount < 0)
372
+ return -1;
373
+ return Physics2DAbiShapeHeaderByteLength + scalarCount * 8;
374
+ }
375
+ // Every 2D built-in is a fixed field list or a flat point list, so no shape carries an integer payload
376
+ // and none needs end padding: a Float64 block is already eight-aligned. The integer count stays in the
377
+ // header rather than being dropped, because a reader shared with the 3D stream must not need a
378
+ // dimension-specific header parser.
379
+ function getShapeScalarCount(shape) {
380
+ if (shape.kind === 'circle')
381
+ return 3;
382
+ if (shape.kind === 'aabb')
383
+ return 4;
384
+ if (shape.kind === 'obb')
385
+ return 5;
386
+ if (shape.kind === 'capsule')
387
+ return 5;
388
+ if (shape.kind === 'polygon') {
389
+ const count = shape.points.length;
390
+ return Number.isSafeInteger(count) && count >= 0 && count % 2 === 0 ? count : -1;
391
+ }
392
+ if (shape.kind === 'segment')
393
+ return 4;
394
+ return 2;
395
+ }
396
+ function isInt32(value) {
397
+ return Number.isInteger(value) && value >= -0x80000000 && value <= 0x7fffffff;
398
+ }
399
+ function isObjectId(value) {
400
+ return Number.isInteger(value) && value > 0 && value <= 0xffffffff;
401
+ }
402
+ function isUint32(value) {
403
+ return Number.isInteger(value) && value >= 0 && value <= 0xffffffff;
404
+ }
405
+ function writeBodyAction(out, kind, bodyId, x, y, pointX, pointY) {
406
+ if (!isObjectId(bodyId))
407
+ return false;
408
+ const record = beginCommand(out, kind, Physics2DAbiCommandByteLength.BodyAction, bodyId, 0);
409
+ if (record === null)
410
+ return false;
411
+ writeFloat64Values(record.view, record.payload, [x, y, pointX, pointY]);
412
+ finishCommand(out, record);
413
+ return true;
414
+ }
415
+ function writeEmptyCommand(out, kind, objectId) {
416
+ if (!isObjectId(objectId))
417
+ return false;
418
+ const record = beginCommand(out, kind, Physics2DAbiCommandRecordHeaderByteLength, objectId, 0);
419
+ if (record === null)
420
+ return false;
421
+ finishCommand(out, record);
422
+ return true;
423
+ }
424
+ function writeFloat64Values(view, byteOffset, values) {
425
+ for (let i = 0; i < values.length; i += 1)
426
+ view.setFloat64(byteOffset + i * 8, values[i], true);
427
+ }
428
+ function writeShape(view, byteOffset, shape) {
429
+ const scalarCount = getShapeScalarCount(shape);
430
+ view.setUint32(byteOffset, encodeShapeKind(shape), true);
431
+ view.setUint32(byteOffset + 4, scalarCount, true);
432
+ view.setUint32(byteOffset + 8, 0, true);
433
+ view.setUint32(byteOffset + 12, 0, true);
434
+ writeShapeScalars(view, byteOffset + Physics2DAbiShapeHeaderByteLength, shape);
435
+ }
436
+ function writeShapeScalars(view, byteOffset, shape) {
437
+ if (shape.kind === 'circle') {
438
+ writeFloat64Values(view, byteOffset, [shape.x, shape.y, shape.radius]);
439
+ }
440
+ else if (shape.kind === 'aabb') {
441
+ writeFloat64Values(view, byteOffset, [shape.minX, shape.minY, shape.maxX, shape.maxY]);
442
+ }
443
+ else if (shape.kind === 'obb') {
444
+ writeFloat64Values(view, byteOffset, [shape.x, shape.y, shape.halfW, shape.halfH, shape.rotation]);
445
+ }
446
+ else if (shape.kind === 'capsule') {
447
+ writeFloat64Values(view, byteOffset, [shape.x0, shape.y0, shape.x1, shape.y1, shape.radius]);
448
+ }
449
+ else if (shape.kind === 'polygon') {
450
+ writeFloat64Values(view, byteOffset, [...shape.points]);
451
+ }
452
+ else if (shape.kind === 'segment') {
453
+ writeFloat64Values(view, byteOffset, [shape.x0, shape.y0, shape.x1, shape.y1]);
454
+ }
455
+ else {
456
+ writeFloat64Values(view, byteOffset, [shape.x, shape.y]);
457
+ }
458
+ }
459
+ //# sourceMappingURL=physics2DAbiCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physics2DAbiCommand.js","sourceRoot":"","sources":["../src/physics2DAbiCommand.ts"],"names":[],"mappings":"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"}