@react-three/rapier 0.8.2 → 0.9.0
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.
- package/dist/declarations/src/Physics.d.ts +10 -2
- package/dist/declarations/src/types.d.ts +25 -13
- package/dist/declarations/src/utils-collider.d.ts +1 -1
- package/dist/react-three-rapier.cjs.dev.js +348 -246
- package/dist/react-three-rapier.cjs.prod.js +348 -246
- package/dist/react-three-rapier.esm.js +349 -247
- package/package.json +1 -1
- package/readme.md +39 -0
@@ -3,10 +3,10 @@
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
4
4
|
|
5
5
|
var rapier3dCompat = require('@dimforge/rapier3d-compat');
|
6
|
-
var React = require('react');
|
7
|
-
var useAsset = require('use-asset');
|
8
6
|
var fiber = require('@react-three/fiber');
|
7
|
+
var React = require('react');
|
9
8
|
var three = require('three');
|
9
|
+
var useAsset = require('use-asset');
|
10
10
|
var threeStdlib = require('three-stdlib');
|
11
11
|
|
12
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
@@ -252,7 +252,8 @@ const Physics = ({
|
|
252
252
|
children,
|
253
253
|
timeStep: _timeStep = 1 / 60,
|
254
254
|
paused: _paused = false,
|
255
|
-
updatePriority
|
255
|
+
updatePriority,
|
256
|
+
interpolate: _interpolate = true
|
256
257
|
}) => {
|
257
258
|
const rapier = useAsset.useAsset(importRapier);
|
258
259
|
const worldRef = React.useRef();
|
@@ -288,12 +289,40 @@ const Physics = ({
|
|
288
289
|
}
|
289
290
|
}, [_gravity]);
|
290
291
|
const [steppingState] = React.useState({
|
292
|
+
previousState: {},
|
291
293
|
accumulator: 0
|
292
294
|
});
|
293
295
|
/* Check if the timestep is supposed to be variable. We'll do this here
|
294
296
|
once so we don't have to string-check every frame. */
|
295
297
|
|
296
298
|
const timeStepVariable = _timeStep === "vary";
|
299
|
+
const getSourceFromColliderHandle = React.useCallback(handle => {
|
300
|
+
const world = worldRef.current;
|
301
|
+
|
302
|
+
if (world) {
|
303
|
+
var _collider$parent;
|
304
|
+
|
305
|
+
const collider = world.getCollider(handle);
|
306
|
+
const colEvents = colliderEvents.get(handle);
|
307
|
+
const colliderState = colliderStates.get(handle);
|
308
|
+
const rigidBodyHandle = collider === null || collider === void 0 ? void 0 : (_collider$parent = collider.parent()) === null || _collider$parent === void 0 ? void 0 : _collider$parent.handle;
|
309
|
+
const rigidBody = rigidBodyHandle ? world.getRigidBody(rigidBodyHandle) : undefined;
|
310
|
+
const rbEvents = rigidBody && rigidBodyHandle ? rigidBodyEvents.get(rigidBodyHandle) : undefined;
|
311
|
+
const rigidBodyState = rigidBodyHandle ? rigidBodyStates.get(rigidBodyHandle) : undefined;
|
312
|
+
return {
|
313
|
+
collider: {
|
314
|
+
object: collider,
|
315
|
+
events: colEvents,
|
316
|
+
state: colliderState
|
317
|
+
},
|
318
|
+
rigidBody: {
|
319
|
+
object: rigidBody,
|
320
|
+
events: rbEvents,
|
321
|
+
state: rigidBodyState
|
322
|
+
}
|
323
|
+
};
|
324
|
+
}
|
325
|
+
}, []);
|
297
326
|
fiber.useFrame((_, dt) => {
|
298
327
|
const world = worldRef.current;
|
299
328
|
if (!world) return;
|
@@ -315,13 +344,25 @@ const Physics = ({
|
|
315
344
|
|
316
345
|
if (!_paused) {
|
317
346
|
while (steppingState.accumulator >= _timeStep) {
|
347
|
+
if (_interpolate) {
|
348
|
+
// Set up previous state
|
349
|
+
// needed for accurate interpolations if the world steps more than once
|
350
|
+
steppingState.previousState = {};
|
351
|
+
world.forEachRigidBody(body => {
|
352
|
+
steppingState.previousState[body.handle] = {
|
353
|
+
position: body.translation(),
|
354
|
+
rotation: body.rotation()
|
355
|
+
};
|
356
|
+
});
|
357
|
+
}
|
358
|
+
|
318
359
|
world.step(eventQueue);
|
319
360
|
steppingState.accumulator -= _timeStep;
|
320
361
|
}
|
321
362
|
}
|
322
363
|
}
|
323
364
|
|
324
|
-
const interpolationAlpha = timeStepVariable ? 1 : steppingState.accumulator
|
365
|
+
const interpolationAlpha = timeStepVariable || !_interpolate ? 1 : steppingState.accumulator / _timeStep; // Update meshes
|
325
366
|
|
326
367
|
rigidBodyStates.forEach((state, handle) => {
|
327
368
|
const rigidBody = world.getRigidBody(handle);
|
@@ -348,7 +389,20 @@ const Physics = ({
|
|
348
389
|
}
|
349
390
|
|
350
391
|
let t = rigidBody.translation();
|
351
|
-
let r = rigidBody.rotation();
|
392
|
+
let r = rigidBody.rotation();
|
393
|
+
let previousState = steppingState.previousState[handle];
|
394
|
+
|
395
|
+
if (previousState) {
|
396
|
+
// Get previous simulated world position
|
397
|
+
_matrix4.compose(previousState.position, rapierQuaternionToQuaternion(previousState.rotation), state.scale).premultiply(state.invertedWorldMatrix).decompose(_position, _rotation, _scale); // Apply previous tick position
|
398
|
+
|
399
|
+
|
400
|
+
if (!(state.object instanceof three.InstancedMesh)) {
|
401
|
+
state.object.position.copy(_position);
|
402
|
+
state.object.quaternion.copy(_rotation);
|
403
|
+
}
|
404
|
+
} // Get new position
|
405
|
+
|
352
406
|
|
353
407
|
_matrix4.compose(t, rapierQuaternionToQuaternion(r), state.scale).premultiply(state.invertedWorldMatrix).decompose(_position, _rotation, _scale);
|
354
408
|
|
@@ -356,146 +410,182 @@ const Physics = ({
|
|
356
410
|
state.setMatrix(_matrix4);
|
357
411
|
state.object.instanceMatrix.needsUpdate = true;
|
358
412
|
} else {
|
359
|
-
// Interpolate
|
413
|
+
// Interpolate to new position
|
360
414
|
state.object.position.lerp(_position, interpolationAlpha);
|
361
415
|
state.object.quaternion.slerp(_rotation, interpolationAlpha);
|
362
416
|
}
|
363
417
|
});
|
364
418
|
eventQueue.drainCollisionEvents((handle1, handle2, started) => {
|
365
|
-
|
366
|
-
|
367
|
-
const collider1 = world.getCollider(handle1);
|
368
|
-
const collider2 = world.getCollider(handle2);
|
369
|
-
const rigidBodyHandle1 = (_collider1$parent = collider1.parent()) === null || _collider1$parent === void 0 ? void 0 : _collider1$parent.handle;
|
370
|
-
const rigidBodyHandle2 = (_collider2$parent = collider2.parent()) === null || _collider2$parent === void 0 ? void 0 : _collider2$parent.handle; // Collision Events
|
419
|
+
const source1 = getSourceFromColliderHandle(handle1);
|
420
|
+
const source2 = getSourceFromColliderHandle(handle2); // Collision Events
|
371
421
|
|
372
|
-
if (!
|
422
|
+
if (!(source1 !== null && source1 !== void 0 && source1.collider.object) || !(source2 !== null && source2 !== void 0 && source2.collider.object)) {
|
373
423
|
return;
|
374
424
|
}
|
375
425
|
|
376
|
-
const collider1Events = colliderEvents.get(collider1.handle);
|
377
|
-
const collider2Events = colliderEvents.get(collider2.handle);
|
378
|
-
const rigidBody1 = rigidBodyHandle1 ? world.getRigidBody(rigidBodyHandle1) : undefined;
|
379
|
-
const rigidBody2 = rigidBodyHandle2 ? world.getRigidBody(rigidBodyHandle2) : undefined;
|
380
|
-
const rigidBody1Events = rigidBodyHandle1 ? rigidBodyEvents.get(rigidBodyHandle1) : undefined;
|
381
|
-
const rigidBody2Events = rigidBodyHandle2 ? rigidBodyEvents.get(rigidBodyHandle2) : undefined;
|
382
|
-
const collider1State = colliderStates.get(collider1.handle);
|
383
|
-
const collider2State = colliderStates.get(collider2.handle);
|
384
|
-
const rigidBody1State = rigidBodyHandle1 ? rigidBodyStates.get(rigidBodyHandle1) : undefined;
|
385
|
-
const rigidBody2State = rigidBodyHandle2 ? rigidBodyStates.get(rigidBodyHandle2) : undefined;
|
386
|
-
|
387
426
|
if (started) {
|
388
|
-
world.contactPair(
|
389
|
-
var
|
427
|
+
world.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {
|
428
|
+
var _source1$rigidBody$ev, _source1$rigidBody$ev2, _source2$collider$sta, _source2$rigidBody$st, _source2$rigidBody$ev, _source2$rigidBody$ev2, _source1$collider$sta, _source1$rigidBody$st, _source1$collider$eve, _source1$collider$eve2, _source2$collider$sta2, _source2$rigidBody$st2, _source2$collider$eve, _source2$collider$eve2, _source1$collider$sta2, _source1$rigidBody$st2;
|
390
429
|
|
391
430
|
/* RigidBody events */
|
392
|
-
|
393
|
-
rigidBody:
|
394
|
-
collider:
|
395
|
-
colliderObject:
|
396
|
-
rigidBodyObject:
|
431
|
+
(_source1$rigidBody$ev = source1.rigidBody.events) === null || _source1$rigidBody$ev === void 0 ? void 0 : (_source1$rigidBody$ev2 = _source1$rigidBody$ev.onCollisionEnter) === null || _source1$rigidBody$ev2 === void 0 ? void 0 : _source1$rigidBody$ev2.call(_source1$rigidBody$ev, {
|
432
|
+
rigidBody: source2.rigidBody.object,
|
433
|
+
collider: source2.collider.object,
|
434
|
+
colliderObject: (_source2$collider$sta = source2.collider.state) === null || _source2$collider$sta === void 0 ? void 0 : _source2$collider$sta.object,
|
435
|
+
rigidBodyObject: (_source2$rigidBody$st = source2.rigidBody.state) === null || _source2$rigidBody$st === void 0 ? void 0 : _source2$rigidBody$st.object,
|
397
436
|
manifold,
|
398
437
|
flipped
|
399
438
|
});
|
400
|
-
|
401
|
-
rigidBody:
|
402
|
-
collider:
|
403
|
-
colliderObject:
|
404
|
-
rigidBodyObject:
|
439
|
+
(_source2$rigidBody$ev = source2.rigidBody.events) === null || _source2$rigidBody$ev === void 0 ? void 0 : (_source2$rigidBody$ev2 = _source2$rigidBody$ev.onCollisionEnter) === null || _source2$rigidBody$ev2 === void 0 ? void 0 : _source2$rigidBody$ev2.call(_source2$rigidBody$ev, {
|
440
|
+
rigidBody: source1.rigidBody.object,
|
441
|
+
collider: source1.collider.object,
|
442
|
+
colliderObject: (_source1$collider$sta = source1.collider.state) === null || _source1$collider$sta === void 0 ? void 0 : _source1$collider$sta.object,
|
443
|
+
rigidBodyObject: (_source1$rigidBody$st = source1.rigidBody.state) === null || _source1$rigidBody$st === void 0 ? void 0 : _source1$rigidBody$st.object,
|
405
444
|
manifold,
|
406
445
|
flipped
|
407
446
|
});
|
408
447
|
/* Collider events */
|
409
448
|
|
410
|
-
|
411
|
-
rigidBody:
|
412
|
-
collider:
|
413
|
-
colliderObject:
|
414
|
-
rigidBodyObject:
|
449
|
+
(_source1$collider$eve = source1.collider.events) === null || _source1$collider$eve === void 0 ? void 0 : (_source1$collider$eve2 = _source1$collider$eve.onCollisionEnter) === null || _source1$collider$eve2 === void 0 ? void 0 : _source1$collider$eve2.call(_source1$collider$eve, {
|
450
|
+
rigidBody: source2.rigidBody.object,
|
451
|
+
collider: source2.collider.object,
|
452
|
+
colliderObject: (_source2$collider$sta2 = source2.collider.state) === null || _source2$collider$sta2 === void 0 ? void 0 : _source2$collider$sta2.object,
|
453
|
+
rigidBodyObject: (_source2$rigidBody$st2 = source2.rigidBody.state) === null || _source2$rigidBody$st2 === void 0 ? void 0 : _source2$rigidBody$st2.object,
|
415
454
|
manifold,
|
416
455
|
flipped
|
417
456
|
});
|
418
|
-
|
419
|
-
rigidBody:
|
420
|
-
collider:
|
421
|
-
colliderObject:
|
422
|
-
rigidBodyObject:
|
457
|
+
(_source2$collider$eve = source2.collider.events) === null || _source2$collider$eve === void 0 ? void 0 : (_source2$collider$eve2 = _source2$collider$eve.onCollisionEnter) === null || _source2$collider$eve2 === void 0 ? void 0 : _source2$collider$eve2.call(_source2$collider$eve, {
|
458
|
+
rigidBody: source1.rigidBody.object,
|
459
|
+
collider: source1.collider.object,
|
460
|
+
colliderObject: (_source1$collider$sta2 = source1.collider.state) === null || _source1$collider$sta2 === void 0 ? void 0 : _source1$collider$sta2.object,
|
461
|
+
rigidBodyObject: (_source1$rigidBody$st2 = source1.rigidBody.state) === null || _source1$rigidBody$st2 === void 0 ? void 0 : _source1$rigidBody$st2.object,
|
423
462
|
manifold,
|
424
463
|
flipped
|
425
464
|
});
|
426
465
|
});
|
427
466
|
} else {
|
428
|
-
var
|
467
|
+
var _source1$rigidBody$ev3, _source1$rigidBody$ev4, _source2$rigidBody$ev3, _source2$rigidBody$ev4, _source1$collider$eve3, _source1$collider$eve4, _source2$collider$eve3, _source2$collider$eve4;
|
429
468
|
|
430
|
-
|
431
|
-
rigidBody:
|
432
|
-
collider:
|
469
|
+
(_source1$rigidBody$ev3 = source1.rigidBody.events) === null || _source1$rigidBody$ev3 === void 0 ? void 0 : (_source1$rigidBody$ev4 = _source1$rigidBody$ev3.onCollisionExit) === null || _source1$rigidBody$ev4 === void 0 ? void 0 : _source1$rigidBody$ev4.call(_source1$rigidBody$ev3, {
|
470
|
+
rigidBody: source2.rigidBody.object,
|
471
|
+
collider: source2.collider.object
|
433
472
|
});
|
434
|
-
|
435
|
-
rigidBody:
|
436
|
-
collider:
|
473
|
+
(_source2$rigidBody$ev3 = source2.rigidBody.events) === null || _source2$rigidBody$ev3 === void 0 ? void 0 : (_source2$rigidBody$ev4 = _source2$rigidBody$ev3.onCollisionExit) === null || _source2$rigidBody$ev4 === void 0 ? void 0 : _source2$rigidBody$ev4.call(_source2$rigidBody$ev3, {
|
474
|
+
rigidBody: source1.rigidBody.object,
|
475
|
+
collider: source1.collider.object
|
437
476
|
});
|
438
|
-
|
439
|
-
rigidBody:
|
440
|
-
collider:
|
477
|
+
(_source1$collider$eve3 = source1.collider.events) === null || _source1$collider$eve3 === void 0 ? void 0 : (_source1$collider$eve4 = _source1$collider$eve3.onCollisionExit) === null || _source1$collider$eve4 === void 0 ? void 0 : _source1$collider$eve4.call(_source1$collider$eve3, {
|
478
|
+
rigidBody: source2.rigidBody.object,
|
479
|
+
collider: source2.collider.object
|
441
480
|
});
|
442
|
-
|
443
|
-
rigidBody:
|
444
|
-
collider:
|
481
|
+
(_source2$collider$eve3 = source2.collider.events) === null || _source2$collider$eve3 === void 0 ? void 0 : (_source2$collider$eve4 = _source2$collider$eve3.onCollisionExit) === null || _source2$collider$eve4 === void 0 ? void 0 : _source2$collider$eve4.call(_source2$collider$eve3, {
|
482
|
+
rigidBody: source1.rigidBody.object,
|
483
|
+
collider: source1.collider.object
|
445
484
|
});
|
446
485
|
} // Sensor Intersections
|
447
486
|
|
448
487
|
|
449
488
|
if (started) {
|
450
|
-
if (world.intersectionPair(
|
451
|
-
var
|
452
|
-
|
453
|
-
|
454
|
-
rigidBody:
|
455
|
-
collider:
|
456
|
-
colliderObject:
|
457
|
-
rigidBodyObject:
|
489
|
+
if (world.intersectionPair(source1.collider.object, source2.collider.object)) {
|
490
|
+
var _source1$rigidBody$ev5, _source1$rigidBody$ev6, _source2$collider$sta3, _source2$rigidBody$st3, _source2$rigidBody$ev5, _source2$rigidBody$ev6, _source1$collider$sta3, _source1$rigidBody$st3, _source1$collider$eve5, _source1$collider$eve6, _source2$collider$sta4, _source2$rigidBody$st4, _source2$collider$eve5, _source2$collider$eve6, _source1$collider$sta4, _source1$rigidBody$st4;
|
491
|
+
|
492
|
+
(_source1$rigidBody$ev5 = source1.rigidBody.events) === null || _source1$rigidBody$ev5 === void 0 ? void 0 : (_source1$rigidBody$ev6 = _source1$rigidBody$ev5.onIntersectionEnter) === null || _source1$rigidBody$ev6 === void 0 ? void 0 : _source1$rigidBody$ev6.call(_source1$rigidBody$ev5, {
|
493
|
+
rigidBody: source2.rigidBody.object,
|
494
|
+
collider: source2.collider.object,
|
495
|
+
colliderObject: (_source2$collider$sta3 = source2.collider.state) === null || _source2$collider$sta3 === void 0 ? void 0 : _source2$collider$sta3.object,
|
496
|
+
rigidBodyObject: (_source2$rigidBody$st3 = source2.rigidBody.state) === null || _source2$rigidBody$st3 === void 0 ? void 0 : _source2$rigidBody$st3.object
|
458
497
|
});
|
459
|
-
|
460
|
-
rigidBody:
|
461
|
-
collider:
|
462
|
-
colliderObject:
|
463
|
-
rigidBodyObject:
|
498
|
+
(_source2$rigidBody$ev5 = source2.rigidBody.events) === null || _source2$rigidBody$ev5 === void 0 ? void 0 : (_source2$rigidBody$ev6 = _source2$rigidBody$ev5.onIntersectionEnter) === null || _source2$rigidBody$ev6 === void 0 ? void 0 : _source2$rigidBody$ev6.call(_source2$rigidBody$ev5, {
|
499
|
+
rigidBody: source1.rigidBody.object,
|
500
|
+
collider: source1.collider.object,
|
501
|
+
colliderObject: (_source1$collider$sta3 = source1.collider.state) === null || _source1$collider$sta3 === void 0 ? void 0 : _source1$collider$sta3.object,
|
502
|
+
rigidBodyObject: (_source1$rigidBody$st3 = source1.rigidBody.state) === null || _source1$rigidBody$st3 === void 0 ? void 0 : _source1$rigidBody$st3.object
|
464
503
|
});
|
465
|
-
|
466
|
-
rigidBody:
|
467
|
-
collider:
|
468
|
-
colliderObject:
|
469
|
-
rigidBodyObject:
|
504
|
+
(_source1$collider$eve5 = source1.collider.events) === null || _source1$collider$eve5 === void 0 ? void 0 : (_source1$collider$eve6 = _source1$collider$eve5.onIntersectionEnter) === null || _source1$collider$eve6 === void 0 ? void 0 : _source1$collider$eve6.call(_source1$collider$eve5, {
|
505
|
+
rigidBody: source2.rigidBody.object,
|
506
|
+
collider: source2.collider.object,
|
507
|
+
colliderObject: (_source2$collider$sta4 = source2.collider.state) === null || _source2$collider$sta4 === void 0 ? void 0 : _source2$collider$sta4.object,
|
508
|
+
rigidBodyObject: (_source2$rigidBody$st4 = source2.rigidBody.state) === null || _source2$rigidBody$st4 === void 0 ? void 0 : _source2$rigidBody$st4.object
|
470
509
|
});
|
471
|
-
|
472
|
-
rigidBody:
|
473
|
-
collider:
|
474
|
-
colliderObject:
|
475
|
-
rigidBodyObject:
|
510
|
+
(_source2$collider$eve5 = source2.collider.events) === null || _source2$collider$eve5 === void 0 ? void 0 : (_source2$collider$eve6 = _source2$collider$eve5.onIntersectionEnter) === null || _source2$collider$eve6 === void 0 ? void 0 : _source2$collider$eve6.call(_source2$collider$eve5, {
|
511
|
+
rigidBody: source1.rigidBody.object,
|
512
|
+
collider: source1.collider.object,
|
513
|
+
colliderObject: (_source1$collider$sta4 = source1.collider.state) === null || _source1$collider$sta4 === void 0 ? void 0 : _source1$collider$sta4.object,
|
514
|
+
rigidBodyObject: (_source1$rigidBody$st4 = source1.rigidBody.state) === null || _source1$rigidBody$st4 === void 0 ? void 0 : _source1$rigidBody$st4.object
|
476
515
|
});
|
477
516
|
}
|
478
517
|
} else {
|
479
|
-
var
|
518
|
+
var _source1$rigidBody$ev7, _source1$rigidBody$ev8, _source2$rigidBody$ev7, _source2$rigidBody$ev8, _source1$collider$eve7, _source1$collider$eve8, _source2$collider$eve7, _source2$collider$eve8;
|
480
519
|
|
481
|
-
|
482
|
-
rigidBody:
|
483
|
-
collider:
|
520
|
+
(_source1$rigidBody$ev7 = source1.rigidBody.events) === null || _source1$rigidBody$ev7 === void 0 ? void 0 : (_source1$rigidBody$ev8 = _source1$rigidBody$ev7.onIntersectionExit) === null || _source1$rigidBody$ev8 === void 0 ? void 0 : _source1$rigidBody$ev8.call(_source1$rigidBody$ev7, {
|
521
|
+
rigidBody: source2.rigidBody.object,
|
522
|
+
collider: source2.collider.object
|
484
523
|
});
|
485
|
-
|
486
|
-
rigidBody:
|
487
|
-
collider:
|
524
|
+
(_source2$rigidBody$ev7 = source2.rigidBody.events) === null || _source2$rigidBody$ev7 === void 0 ? void 0 : (_source2$rigidBody$ev8 = _source2$rigidBody$ev7.onIntersectionExit) === null || _source2$rigidBody$ev8 === void 0 ? void 0 : _source2$rigidBody$ev8.call(_source2$rigidBody$ev7, {
|
525
|
+
rigidBody: source1.rigidBody.object,
|
526
|
+
collider: source1.collider.object
|
488
527
|
});
|
489
|
-
|
490
|
-
rigidBody:
|
491
|
-
collider:
|
528
|
+
(_source1$collider$eve7 = source1.collider.events) === null || _source1$collider$eve7 === void 0 ? void 0 : (_source1$collider$eve8 = _source1$collider$eve7.onIntersectionExit) === null || _source1$collider$eve8 === void 0 ? void 0 : _source1$collider$eve8.call(_source1$collider$eve7, {
|
529
|
+
rigidBody: source2.rigidBody.object,
|
530
|
+
collider: source2.collider.object
|
492
531
|
});
|
493
|
-
|
494
|
-
rigidBody:
|
495
|
-
collider:
|
532
|
+
(_source2$collider$eve7 = source2.collider.events) === null || _source2$collider$eve7 === void 0 ? void 0 : (_source2$collider$eve8 = _source2$collider$eve7.onIntersectionExit) === null || _source2$collider$eve8 === void 0 ? void 0 : _source2$collider$eve8.call(_source2$collider$eve7, {
|
533
|
+
rigidBody: source1.rigidBody.object,
|
534
|
+
collider: source1.collider.object
|
496
535
|
});
|
497
536
|
}
|
498
537
|
});
|
538
|
+
eventQueue.drainContactForceEvents(event => {
|
539
|
+
var _source1$rigidBody$ev9, _source1$rigidBody$ev10, _source2$collider$sta5, _source2$rigidBody$st5, _source2$rigidBody$ev9, _source2$rigidBody$ev10, _source1$collider$sta5, _source1$rigidBody$st5, _source1$collider$eve9, _source1$collider$eve10, _source2$collider$sta6, _source2$rigidBody$st6, _source2$collider$eve9, _source2$collider$eve10, _source1$collider$sta6, _source1$rigidBody$st6;
|
540
|
+
|
541
|
+
const source1 = getSourceFromColliderHandle(event.collider1());
|
542
|
+
const source2 = getSourceFromColliderHandle(event.collider2()); // Collision Events
|
543
|
+
|
544
|
+
if (!(source1 !== null && source1 !== void 0 && source1.collider.object) || !(source2 !== null && source2 !== void 0 && source2.collider.object)) {
|
545
|
+
return;
|
546
|
+
}
|
547
|
+
|
548
|
+
(_source1$rigidBody$ev9 = source1.rigidBody.events) === null || _source1$rigidBody$ev9 === void 0 ? void 0 : (_source1$rigidBody$ev10 = _source1$rigidBody$ev9.onContactForce) === null || _source1$rigidBody$ev10 === void 0 ? void 0 : _source1$rigidBody$ev10.call(_source1$rigidBody$ev9, {
|
549
|
+
rigidBody: source2.rigidBody.object,
|
550
|
+
collider: source2.collider.object,
|
551
|
+
colliderObject: (_source2$collider$sta5 = source2.collider.state) === null || _source2$collider$sta5 === void 0 ? void 0 : _source2$collider$sta5.object,
|
552
|
+
rigidBodyObject: (_source2$rigidBody$st5 = source2.rigidBody.state) === null || _source2$rigidBody$st5 === void 0 ? void 0 : _source2$rigidBody$st5.object,
|
553
|
+
totalForce: event.totalForce(),
|
554
|
+
totalForceMagnitude: event.totalForceMagnitude(),
|
555
|
+
maxForceDirection: event.maxForceDirection(),
|
556
|
+
maxForceMagnitude: event.maxForceMagnitude()
|
557
|
+
});
|
558
|
+
(_source2$rigidBody$ev9 = source2.rigidBody.events) === null || _source2$rigidBody$ev9 === void 0 ? void 0 : (_source2$rigidBody$ev10 = _source2$rigidBody$ev9.onContactForce) === null || _source2$rigidBody$ev10 === void 0 ? void 0 : _source2$rigidBody$ev10.call(_source2$rigidBody$ev9, {
|
559
|
+
rigidBody: source1.rigidBody.object,
|
560
|
+
collider: source1.collider.object,
|
561
|
+
colliderObject: (_source1$collider$sta5 = source1.collider.state) === null || _source1$collider$sta5 === void 0 ? void 0 : _source1$collider$sta5.object,
|
562
|
+
rigidBodyObject: (_source1$rigidBody$st5 = source1.rigidBody.state) === null || _source1$rigidBody$st5 === void 0 ? void 0 : _source1$rigidBody$st5.object,
|
563
|
+
totalForce: event.totalForce(),
|
564
|
+
totalForceMagnitude: event.totalForceMagnitude(),
|
565
|
+
maxForceDirection: event.maxForceDirection(),
|
566
|
+
maxForceMagnitude: event.maxForceMagnitude()
|
567
|
+
});
|
568
|
+
(_source1$collider$eve9 = source1.collider.events) === null || _source1$collider$eve9 === void 0 ? void 0 : (_source1$collider$eve10 = _source1$collider$eve9.onContactForce) === null || _source1$collider$eve10 === void 0 ? void 0 : _source1$collider$eve10.call(_source1$collider$eve9, {
|
569
|
+
rigidBody: source2.rigidBody.object,
|
570
|
+
collider: source2.collider.object,
|
571
|
+
colliderObject: (_source2$collider$sta6 = source2.collider.state) === null || _source2$collider$sta6 === void 0 ? void 0 : _source2$collider$sta6.object,
|
572
|
+
rigidBodyObject: (_source2$rigidBody$st6 = source2.rigidBody.state) === null || _source2$rigidBody$st6 === void 0 ? void 0 : _source2$rigidBody$st6.object,
|
573
|
+
totalForce: event.totalForce(),
|
574
|
+
totalForceMagnitude: event.totalForceMagnitude(),
|
575
|
+
maxForceDirection: event.maxForceDirection(),
|
576
|
+
maxForceMagnitude: event.maxForceMagnitude()
|
577
|
+
});
|
578
|
+
(_source2$collider$eve9 = source2.collider.events) === null || _source2$collider$eve9 === void 0 ? void 0 : (_source2$collider$eve10 = _source2$collider$eve9.onContactForce) === null || _source2$collider$eve10 === void 0 ? void 0 : _source2$collider$eve10.call(_source2$collider$eve9, {
|
579
|
+
rigidBody: source1.rigidBody.object,
|
580
|
+
collider: source1.collider.object,
|
581
|
+
colliderObject: (_source1$collider$sta6 = source1.collider.state) === null || _source1$collider$sta6 === void 0 ? void 0 : _source1$collider$sta6.object,
|
582
|
+
rigidBodyObject: (_source1$rigidBody$st6 = source1.rigidBody.state) === null || _source1$rigidBody$st6 === void 0 ? void 0 : _source1$rigidBody$st6.object,
|
583
|
+
totalForce: event.totalForce(),
|
584
|
+
totalForceMagnitude: event.totalForceMagnitude(),
|
585
|
+
maxForceDirection: event.maxForceDirection(),
|
586
|
+
maxForceMagnitude: event.maxForceMagnitude()
|
587
|
+
});
|
588
|
+
});
|
499
589
|
}, updatePriority);
|
500
590
|
const api = React.useMemo(() => createWorldApi(getWorldRef), []);
|
501
591
|
const context = React.useMemo(() => ({
|
@@ -608,148 +698,6 @@ function _objectSpread2(target) {
|
|
608
698
|
return target;
|
609
699
|
}
|
610
700
|
|
611
|
-
const rigidBodyDescFromOptions = options => {
|
612
|
-
const type = rigidBodyTypeFromString((options === null || options === void 0 ? void 0 : options.type) || "dynamic");
|
613
|
-
const desc = new rapier3dCompat.RigidBodyDesc(type);
|
614
|
-
return desc;
|
615
|
-
};
|
616
|
-
const createRigidBodyState = ({
|
617
|
-
rigidBody,
|
618
|
-
object,
|
619
|
-
setMatrix,
|
620
|
-
getMatrix,
|
621
|
-
worldScale
|
622
|
-
}) => {
|
623
|
-
object.updateWorldMatrix(true, false);
|
624
|
-
const invertedWorldMatrix = object.parent.matrixWorld.clone().invert();
|
625
|
-
return {
|
626
|
-
object,
|
627
|
-
rigidBody,
|
628
|
-
invertedWorldMatrix,
|
629
|
-
setMatrix: setMatrix ? setMatrix : matrix => {
|
630
|
-
object.matrix.copy(matrix);
|
631
|
-
},
|
632
|
-
getMatrix: getMatrix ? getMatrix : matrix => matrix.copy(object.matrix),
|
633
|
-
scale: worldScale || object.getWorldScale(_scale).clone(),
|
634
|
-
isSleeping: false
|
635
|
-
};
|
636
|
-
};
|
637
|
-
const mutableRigidBodyOptions = {
|
638
|
-
gravityScale: (rb, value) => {
|
639
|
-
rb.setGravityScale(value, true);
|
640
|
-
},
|
641
|
-
linearDamping: (rb, value) => {
|
642
|
-
rb.setLinearDamping(value);
|
643
|
-
},
|
644
|
-
angularDamping: (rb, value) => {
|
645
|
-
rb.setAngularDamping(value);
|
646
|
-
},
|
647
|
-
enabledRotations: (rb, [x, y, z]) => {
|
648
|
-
rb.setEnabledRotations(x, y, z, true);
|
649
|
-
},
|
650
|
-
enabledTranslations: (rb, [x, y, z]) => {
|
651
|
-
rb.setEnabledTranslations(x, y, z, true);
|
652
|
-
},
|
653
|
-
angularVelocity: (rb, [x, y, z]) => {
|
654
|
-
rb.setAngvel({
|
655
|
-
x,
|
656
|
-
y,
|
657
|
-
z
|
658
|
-
}, true);
|
659
|
-
},
|
660
|
-
linearVelocity: (rb, [x, y, z]) => {
|
661
|
-
rb.setLinvel({
|
662
|
-
x,
|
663
|
-
y,
|
664
|
-
z
|
665
|
-
}, true);
|
666
|
-
},
|
667
|
-
ccd: (rb, value) => {
|
668
|
-
rb.enableCcd(value);
|
669
|
-
},
|
670
|
-
position: () => {},
|
671
|
-
rotation: () => {},
|
672
|
-
quaternion: () => {},
|
673
|
-
scale: () => {}
|
674
|
-
};
|
675
|
-
const mutableRigidBodyOptionKeys = Object.keys(mutableRigidBodyOptions);
|
676
|
-
const setRigidBodyOptions = (rigidBody, options, states, updateTranslations = true) => {
|
677
|
-
if (!rigidBody) {
|
678
|
-
return;
|
679
|
-
}
|
680
|
-
|
681
|
-
const state = states.get(rigidBody.handle);
|
682
|
-
|
683
|
-
if (state) {
|
684
|
-
if (updateTranslations) {
|
685
|
-
state.object.updateWorldMatrix(true, false);
|
686
|
-
|
687
|
-
_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);
|
688
|
-
|
689
|
-
rigidBody.setTranslation(_position, false);
|
690
|
-
rigidBody.setRotation(_rotation, false);
|
691
|
-
}
|
692
|
-
|
693
|
-
mutableRigidBodyOptionKeys.forEach(key => {
|
694
|
-
if (key in options) {
|
695
|
-
mutableRigidBodyOptions[key](rigidBody, options[key]);
|
696
|
-
}
|
697
|
-
});
|
698
|
-
}
|
699
|
-
};
|
700
|
-
const useUpdateRigidBodyOptions = (rigidBodyRef, props, states, updateTranslations = true) => {
|
701
|
-
// TODO: Improve this, split each prop into its own effect
|
702
|
-
const mutablePropsAsFlatArray = React.useMemo(() => mutableRigidBodyOptionKeys.flatMap(key => {
|
703
|
-
return vectorToTuple(props[key]);
|
704
|
-
}), [props]);
|
705
|
-
React.useEffect(() => {
|
706
|
-
if (Array.isArray(rigidBodyRef.current)) {
|
707
|
-
for (const rigidBody of rigidBodyRef.current) {
|
708
|
-
setRigidBodyOptions(rigidBody, props, states, updateTranslations);
|
709
|
-
}
|
710
|
-
} else if (rigidBodyRef.current) {
|
711
|
-
setRigidBodyOptions(rigidBodyRef.current, props, states, updateTranslations);
|
712
|
-
}
|
713
|
-
}, mutablePropsAsFlatArray);
|
714
|
-
};
|
715
|
-
const useRigidBodyEvents = (rigidBodyRef, props, events) => {
|
716
|
-
const {
|
717
|
-
onWake,
|
718
|
-
onSleep,
|
719
|
-
onCollisionEnter,
|
720
|
-
onCollisionExit,
|
721
|
-
onIntersectionEnter,
|
722
|
-
onIntersectionExit
|
723
|
-
} = props;
|
724
|
-
const eventHandlers = {
|
725
|
-
onWake,
|
726
|
-
onSleep,
|
727
|
-
onCollisionEnter,
|
728
|
-
onCollisionExit,
|
729
|
-
onIntersectionEnter,
|
730
|
-
onIntersectionExit
|
731
|
-
};
|
732
|
-
React.useEffect(() => {
|
733
|
-
if (Array.isArray(rigidBodyRef.current)) {
|
734
|
-
for (const rigidBody of rigidBodyRef.current) {
|
735
|
-
events.set(rigidBody.handle, eventHandlers);
|
736
|
-
}
|
737
|
-
} else if (rigidBodyRef.current) {
|
738
|
-
events.set(rigidBodyRef.current.handle, eventHandlers);
|
739
|
-
}
|
740
|
-
|
741
|
-
return () => {
|
742
|
-
if (Array.isArray(rigidBodyRef.current)) {
|
743
|
-
for (const rigidBody of rigidBodyRef.current) {
|
744
|
-
events.delete(rigidBody.handle);
|
745
|
-
}
|
746
|
-
} else if (rigidBodyRef.current) {
|
747
|
-
events.delete(rigidBodyRef.current.handle);
|
748
|
-
}
|
749
|
-
};
|
750
|
-
}, [onWake, onSleep, onCollisionEnter, onCollisionExit, onIntersectionEnter, onIntersectionExit]);
|
751
|
-
};
|
752
|
-
|
753
701
|
const scaleColliderArgs = (shape, args, scale) => {
|
754
702
|
const newArgs = args.slice(); // Heightfield uses a vector
|
755
703
|
|
@@ -1006,21 +954,30 @@ const useColliderEvents = (collidersRef, props, events) => {
|
|
1006
954
|
onCollisionEnter,
|
1007
955
|
onCollisionExit,
|
1008
956
|
onIntersectionEnter,
|
1009
|
-
onIntersectionExit
|
957
|
+
onIntersectionExit,
|
958
|
+
onContactForce
|
1010
959
|
} = props;
|
1011
960
|
React.useEffect(() => {
|
1012
961
|
var _collidersRef$current;
|
1013
962
|
|
1014
963
|
(_collidersRef$current = collidersRef.current) === null || _collidersRef$current === void 0 ? void 0 : _collidersRef$current.forEach(collider => {
|
1015
|
-
|
964
|
+
const hasCollisionEvent = !!(onCollisionEnter || onCollisionExit || onIntersectionEnter || onIntersectionExit);
|
965
|
+
const hasContactForceEvent = !!onContactForce;
|
966
|
+
|
967
|
+
if (hasCollisionEvent && hasContactForceEvent) {
|
968
|
+
collider.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS | rapier3dCompat.ActiveEvents.CONTACT_FORCE_EVENTS);
|
969
|
+
} else if (hasCollisionEvent) {
|
1016
970
|
collider.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS);
|
971
|
+
} else if (hasContactForceEvent) {
|
972
|
+
collider.setActiveEvents(rapier3dCompat.ActiveEvents.CONTACT_FORCE_EVENTS);
|
1017
973
|
}
|
1018
974
|
|
1019
975
|
events.set(collider.handle, {
|
1020
976
|
onCollisionEnter,
|
1021
977
|
onCollisionExit,
|
1022
978
|
onIntersectionEnter,
|
1023
|
-
onIntersectionExit
|
979
|
+
onIntersectionExit,
|
980
|
+
onContactForce
|
1024
981
|
});
|
1025
982
|
});
|
1026
983
|
return () => {
|
@@ -1028,7 +985,152 @@ const useColliderEvents = (collidersRef, props, events) => {
|
|
1028
985
|
|
1029
986
|
(_collidersRef$current2 = collidersRef.current) === null || _collidersRef$current2 === void 0 ? void 0 : _collidersRef$current2.forEach(collider => events.delete(collider.handle));
|
1030
987
|
};
|
1031
|
-
}, [onCollisionEnter, onCollisionExit, onIntersectionEnter, onIntersectionExit]);
|
988
|
+
}, [onCollisionEnter, onCollisionExit, onIntersectionEnter, onIntersectionExit, onContactForce]);
|
989
|
+
};
|
990
|
+
|
991
|
+
const rigidBodyDescFromOptions = options => {
|
992
|
+
const type = rigidBodyTypeFromString((options === null || options === void 0 ? void 0 : options.type) || "dynamic");
|
993
|
+
const desc = new rapier3dCompat.RigidBodyDesc(type);
|
994
|
+
return desc;
|
995
|
+
};
|
996
|
+
const createRigidBodyState = ({
|
997
|
+
rigidBody,
|
998
|
+
object,
|
999
|
+
setMatrix,
|
1000
|
+
getMatrix,
|
1001
|
+
worldScale
|
1002
|
+
}) => {
|
1003
|
+
object.updateWorldMatrix(true, false);
|
1004
|
+
const invertedWorldMatrix = object.parent.matrixWorld.clone().invert();
|
1005
|
+
return {
|
1006
|
+
object,
|
1007
|
+
rigidBody,
|
1008
|
+
invertedWorldMatrix,
|
1009
|
+
setMatrix: setMatrix ? setMatrix : matrix => {
|
1010
|
+
object.matrix.copy(matrix);
|
1011
|
+
},
|
1012
|
+
getMatrix: getMatrix ? getMatrix : matrix => matrix.copy(object.matrix),
|
1013
|
+
scale: worldScale || object.getWorldScale(_scale).clone(),
|
1014
|
+
isSleeping: false
|
1015
|
+
};
|
1016
|
+
};
|
1017
|
+
const mutableRigidBodyOptions = {
|
1018
|
+
gravityScale: (rb, value) => {
|
1019
|
+
rb.setGravityScale(value, true);
|
1020
|
+
},
|
1021
|
+
linearDamping: (rb, value) => {
|
1022
|
+
rb.setLinearDamping(value);
|
1023
|
+
},
|
1024
|
+
angularDamping: (rb, value) => {
|
1025
|
+
rb.setAngularDamping(value);
|
1026
|
+
},
|
1027
|
+
enabledRotations: (rb, [x, y, z]) => {
|
1028
|
+
rb.setEnabledRotations(x, y, z, true);
|
1029
|
+
},
|
1030
|
+
enabledTranslations: (rb, [x, y, z]) => {
|
1031
|
+
rb.setEnabledTranslations(x, y, z, true);
|
1032
|
+
},
|
1033
|
+
angularVelocity: (rb, [x, y, z]) => {
|
1034
|
+
rb.setAngvel({
|
1035
|
+
x,
|
1036
|
+
y,
|
1037
|
+
z
|
1038
|
+
}, true);
|
1039
|
+
},
|
1040
|
+
linearVelocity: (rb, [x, y, z]) => {
|
1041
|
+
rb.setLinvel({
|
1042
|
+
x,
|
1043
|
+
y,
|
1044
|
+
z
|
1045
|
+
}, true);
|
1046
|
+
},
|
1047
|
+
ccd: (rb, value) => {
|
1048
|
+
rb.enableCcd(value);
|
1049
|
+
},
|
1050
|
+
userData: (rb, value) => {
|
1051
|
+
rb.userData = value;
|
1052
|
+
},
|
1053
|
+
position: () => {},
|
1054
|
+
rotation: () => {},
|
1055
|
+
quaternion: () => {},
|
1056
|
+
scale: () => {}
|
1057
|
+
};
|
1058
|
+
const mutableRigidBodyOptionKeys = Object.keys(mutableRigidBodyOptions);
|
1059
|
+
const setRigidBodyOptions = (rigidBody, options, states, updateTranslations = true) => {
|
1060
|
+
if (!rigidBody) {
|
1061
|
+
return;
|
1062
|
+
}
|
1063
|
+
|
1064
|
+
const state = states.get(rigidBody.handle);
|
1065
|
+
|
1066
|
+
if (state) {
|
1067
|
+
if (updateTranslations) {
|
1068
|
+
state.object.updateWorldMatrix(true, false);
|
1069
|
+
|
1070
|
+
_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);
|
1071
|
+
|
1072
|
+
rigidBody.setTranslation(_position, false);
|
1073
|
+
rigidBody.setRotation(_rotation, false);
|
1074
|
+
}
|
1075
|
+
|
1076
|
+
mutableRigidBodyOptionKeys.forEach(key => {
|
1077
|
+
if (key in options) {
|
1078
|
+
mutableRigidBodyOptions[key](rigidBody, options[key]);
|
1079
|
+
}
|
1080
|
+
});
|
1081
|
+
}
|
1082
|
+
};
|
1083
|
+
const useUpdateRigidBodyOptions = (rigidBodyRef, props, states, updateTranslations = true) => {
|
1084
|
+
// TODO: Improve this, split each prop into its own effect
|
1085
|
+
const mutablePropsAsFlatArray = React.useMemo(() => mutableRigidBodyOptionKeys.flatMap(key => {
|
1086
|
+
return vectorToTuple(props[key]);
|
1087
|
+
}), [props]);
|
1088
|
+
React.useEffect(() => {
|
1089
|
+
if (Array.isArray(rigidBodyRef.current)) {
|
1090
|
+
for (const rigidBody of rigidBodyRef.current) {
|
1091
|
+
setRigidBodyOptions(rigidBody, props, states, updateTranslations);
|
1092
|
+
}
|
1093
|
+
} else if (rigidBodyRef.current) {
|
1094
|
+
setRigidBodyOptions(rigidBodyRef.current, props, states, updateTranslations);
|
1095
|
+
}
|
1096
|
+
}, mutablePropsAsFlatArray);
|
1097
|
+
};
|
1098
|
+
const useRigidBodyEvents = (rigidBodyRef, props, events) => {
|
1099
|
+
const {
|
1100
|
+
onWake,
|
1101
|
+
onSleep,
|
1102
|
+
onCollisionEnter,
|
1103
|
+
onCollisionExit,
|
1104
|
+
onIntersectionEnter,
|
1105
|
+
onIntersectionExit
|
1106
|
+
} = props;
|
1107
|
+
const eventHandlers = {
|
1108
|
+
onWake,
|
1109
|
+
onSleep,
|
1110
|
+
onCollisionEnter,
|
1111
|
+
onCollisionExit,
|
1112
|
+
onIntersectionEnter,
|
1113
|
+
onIntersectionExit
|
1114
|
+
};
|
1115
|
+
React.useEffect(() => {
|
1116
|
+
if (Array.isArray(rigidBodyRef.current)) {
|
1117
|
+
for (const rigidBody of rigidBodyRef.current) {
|
1118
|
+
events.set(rigidBody.handle, eventHandlers);
|
1119
|
+
}
|
1120
|
+
} else if (rigidBodyRef.current) {
|
1121
|
+
events.set(rigidBodyRef.current.handle, eventHandlers);
|
1122
|
+
}
|
1123
|
+
|
1124
|
+
return () => {
|
1125
|
+
if (Array.isArray(rigidBodyRef.current)) {
|
1126
|
+
for (const rigidBody of rigidBodyRef.current) {
|
1127
|
+
events.delete(rigidBody.handle);
|
1128
|
+
}
|
1129
|
+
} else if (rigidBodyRef.current) {
|
1130
|
+
events.delete(rigidBodyRef.current.handle);
|
1131
|
+
}
|
1132
|
+
};
|
1133
|
+
}, [onWake, onSleep, onCollisionEnter, onCollisionExit, onIntersectionEnter, onIntersectionExit]);
|
1032
1134
|
};
|
1033
1135
|
|
1034
1136
|
const useRapier = () => {
|
@@ -1081,10 +1183,8 @@ const useRigidBody = (options = {}) => {
|
|
1081
1183
|
|
1082
1184
|
if (!ref.current) {
|
1083
1185
|
ref.current = new three.Object3D();
|
1084
|
-
}
|
1085
|
-
|
1186
|
+
}
|
1086
1187
|
|
1087
|
-
ref.current.userData.isSleeping = false;
|
1088
1188
|
rigidBodyStates.set(rigidBody.handle, createRigidBodyState({
|
1089
1189
|
rigidBody,
|
1090
1190
|
object: ref.current
|
@@ -1195,7 +1295,8 @@ const AnyCollider = /*#__PURE__*/React.memo( /*#__PURE__*/React__default["defaul
|
|
1195
1295
|
position,
|
1196
1296
|
rotation,
|
1197
1297
|
quaternion,
|
1198
|
-
scale
|
1298
|
+
scale,
|
1299
|
+
name
|
1199
1300
|
} = props;
|
1200
1301
|
const {
|
1201
1302
|
world,
|
@@ -1255,7 +1356,8 @@ const AnyCollider = /*#__PURE__*/React.memo( /*#__PURE__*/React__default["defaul
|
|
1255
1356
|
rotation: rotation,
|
1256
1357
|
quaternion: quaternion,
|
1257
1358
|
scale: scale,
|
1258
|
-
ref: ref
|
1359
|
+
ref: ref,
|
1360
|
+
name: name
|
1259
1361
|
}, children);
|
1260
1362
|
}));
|
1261
1363
|
const CuboidCollider = /*#__PURE__*/React__default["default"].forwardRef((props, ref) => {
|