@react-three/rapier 0.7.6 → 0.8.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.
@@ -1,10 +1,10 @@
1
- import { EventQueue, RigidBodyDesc, ColliderDesc, ActiveEvents, ShapeType } from '@dimforge/rapier3d-compat';
1
+ import { EventQueue, RigidBodyDesc, ColliderDesc, ActiveEvents } from '@dimforge/rapier3d-compat';
2
2
  export { CoefficientCombineRule, Collider as RapierCollider, RigidBody as RapierRigidBody } from '@dimforge/rapier3d-compat';
3
- import React, { useState, useEffect, useRef, useMemo, createContext, useContext, memo, forwardRef, useImperativeHandle, useLayoutEffect } from 'react';
3
+ import React$1, { useRef, useState, useEffect, useMemo, createContext, useContext, memo, forwardRef, useImperativeHandle, useLayoutEffect } from 'react';
4
4
  import { useAsset } from 'use-asset';
5
5
  import { useFrame } from '@react-three/fiber';
6
- import { Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, InstancedMesh, MeshBasicMaterial, Color, PlaneGeometry, ConeGeometry, CapsuleGeometry, CylinderGeometry, BufferGeometry, BufferAttribute, SphereGeometry, BoxGeometry, DynamicDrawUsage } from 'three';
7
- import { mergeVertices, RoundedBoxGeometry } from 'three-stdlib';
6
+ import { Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, InstancedMesh, BufferAttribute, DynamicDrawUsage } from 'three';
7
+ import { mergeVertices } from 'three-stdlib';
8
8
 
9
9
  const _quaternion = new Quaternion();
10
10
  new Euler();
@@ -173,10 +173,19 @@ const createWorldApi = ref => {
173
173
  getRigidBody: handle => ref.current().getRigidBody(handle),
174
174
  createRigidBody: desc => ref.current().createRigidBody(desc),
175
175
  createCollider: (desc, rigidBody) => ref.current().createCollider(desc, rigidBody),
176
- removeRigidBody: rigidBody => ref.current().removeRigidBody(rigidBody),
177
- removeCollider: (collider, wakeUp = true) => ref.current().removeCollider(collider, wakeUp),
176
+ removeRigidBody: rigidBody => {
177
+ if (!ref.current().bodies.contains(rigidBody.handle)) return;
178
+ ref.current().removeRigidBody(rigidBody);
179
+ },
180
+ removeCollider: (collider, wakeUp = true) => {
181
+ if (!ref.current().colliders.contains(collider.handle)) return;
182
+ ref.current().removeCollider(collider, wakeUp);
183
+ },
178
184
  createImpulseJoint: (params, rigidBodyA, rigidBodyB, wakeUp = true) => ref.current().createImpulseJoint(params, rigidBodyA, rigidBodyB, wakeUp),
179
- removeImpulseJoint: (joint, wakeUp = true) => ref.current().removeImpulseJoint(joint, wakeUp),
185
+ removeImpulseJoint: (joint, wakeUp = true) => {
186
+ if (!ref.current().impulseJoints.contains(joint.handle)) return;
187
+ ref.current().removeImpulseJoint(joint, wakeUp);
188
+ },
180
189
  forEachCollider: callback => ref.current().forEachCollider(callback),
181
190
  setGravity: ({
182
191
  x,
@@ -186,7 +195,8 @@ const createWorldApi = ref => {
186
195
  x,
187
196
  y,
188
197
  z
189
- }
198
+ },
199
+ debugRender: () => ref.current().debugRender()
190
200
  };
191
201
  }; // TODO: Broken currently, waiting for Rapier3D to fix
192
202
 
@@ -220,10 +230,6 @@ const Physics = ({
220
230
  updatePriority
221
231
  }) => {
222
232
  const rapier = useAsset(importRapier);
223
- const [isPaused, setIsPaused] = useState(_paused);
224
- useEffect(() => {
225
- setIsPaused(_paused);
226
- }, [_paused]);
227
233
  const worldRef = useRef();
228
234
  const getWorldRef = useRef(() => {
229
235
  if (!worldRef.current) {
@@ -244,6 +250,7 @@ const Physics = ({
244
250
  return () => {
245
251
  if (world) {
246
252
  world.free();
253
+ worldRef.current = undefined;
247
254
  }
248
255
  };
249
256
  }, []); // Update gravity
@@ -477,15 +484,15 @@ const Physics = ({
477
484
  colliderStates,
478
485
  rigidBodyEvents,
479
486
  colliderEvents,
480
- isPaused
481
- }), [isPaused]);
482
- return /*#__PURE__*/React.createElement(RapierContext.Provider, {
487
+ isPaused: _paused
488
+ }), [_paused]);
489
+ return /*#__PURE__*/React$1.createElement(RapierContext.Provider, {
483
490
  value: context
484
491
  }, children);
485
492
  };
486
493
 
487
494
  function _extends() {
488
- _extends = Object.assign || function (target) {
495
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
489
496
  for (var i = 1; i < arguments.length; i++) {
490
497
  var source = arguments[i];
491
498
 
@@ -498,7 +505,6 @@ function _extends() {
498
505
 
499
506
  return target;
500
507
  };
501
-
502
508
  return _extends.apply(this, arguments);
503
509
  }
504
510
 
@@ -672,11 +678,11 @@ const useUpdateRigidBodyOptions = (rigidBodyRef, props, states, updateTranslatio
672
678
  return vectorToTuple(props[key]);
673
679
  }), [props]);
674
680
  useEffect(() => {
675
- if ("length" in rigidBodyRef.current) {
676
- rigidBodyRef.current.forEach(rigidBody => {
681
+ if (Array.isArray(rigidBodyRef.current)) {
682
+ for (const rigidBody of rigidBodyRef.current) {
677
683
  setRigidBodyOptions(rigidBody, props, states, updateTranslations);
678
- });
679
- } else {
684
+ }
685
+ } else if (rigidBodyRef.current) {
680
686
  setRigidBodyOptions(rigidBodyRef.current, props, states, updateTranslations);
681
687
  }
682
688
  }, mutablePropsAsFlatArray);
@@ -699,20 +705,20 @@ const useRigidBodyEvents = (rigidBodyRef, props, events) => {
699
705
  onIntersectionExit
700
706
  };
701
707
  useEffect(() => {
702
- if ("length" in rigidBodyRef.current) {
703
- rigidBodyRef.current.forEach(rigidBody => {
708
+ if (Array.isArray(rigidBodyRef.current)) {
709
+ for (const rigidBody of rigidBodyRef.current) {
704
710
  events.set(rigidBody.handle, eventHandlers);
705
- });
706
- } else {
711
+ }
712
+ } else if (rigidBodyRef.current) {
707
713
  events.set(rigidBodyRef.current.handle, eventHandlers);
708
714
  }
709
715
 
710
716
  return () => {
711
- if ("length" in rigidBodyRef.current) {
712
- rigidBodyRef.current.forEach(rigidBody => {
717
+ if (Array.isArray(rigidBodyRef.current)) {
718
+ for (const rigidBody of rigidBodyRef.current) {
713
719
  events.delete(rigidBody.handle);
714
- });
715
- } else {
720
+ }
721
+ } else if (rigidBodyRef.current) {
716
722
  events.delete(rigidBodyRef.current.handle);
717
723
  }
718
724
  };
@@ -880,7 +886,8 @@ const createColliderPropsFromChildren = ({
880
886
  const colliderProps = [];
881
887
  object.updateWorldMatrix(true, false);
882
888
  const invertedParentMatrixWorld = object.matrixWorld.clone().invert();
883
- object.traverseVisible(child => {
889
+
890
+ const colliderFromChild = child => {
884
891
  if ("isMesh" in child) {
885
892
  if (_ignoreMeshColliders && isChildOfMeshCollider(child)) return;
886
893
  const worldScale = child.getWorldScale(_scale);
@@ -905,7 +912,14 @@ const createColliderPropsFromChildren = ({
905
912
  scale: [worldScale.x, worldScale.y, worldScale.z]
906
913
  }));
907
914
  }
908
- });
915
+ };
916
+
917
+ if (options.includeInvisible) {
918
+ object.traverse(colliderFromChild);
919
+ } else {
920
+ object.traverseVisible(colliderFromChild);
921
+ }
922
+
909
923
  return colliderProps;
910
924
  };
911
925
  const getColliderArgsFromGeometry = (geometry, colliders) => {
@@ -1053,6 +1067,7 @@ const useRigidBody = (options = {}) => {
1053
1067
  return () => {
1054
1068
  world.removeRigidBody(rigidBody);
1055
1069
  rigidBodyStates.delete(rigidBody.handle);
1070
+ rigidBodyRef.current = undefined;
1056
1071
  };
1057
1072
  }, []);
1058
1073
  useUpdateRigidBodyOptions(rigidBodyRef, mergedOptions, rigidBodyStates);
@@ -1149,7 +1164,7 @@ const usePrismaticJoint = (body1, body2, [body1Anchor, body2Anchor, axis]) => {
1149
1164
  };
1150
1165
 
1151
1166
  // Colliders
1152
- const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
1167
+ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React$1.forwardRef((props, forwardedRef) => {
1153
1168
  const {
1154
1169
  children,
1155
1170
  position,
@@ -1169,7 +1184,7 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
1169
1184
  return forwardedRef;
1170
1185
  }
1171
1186
 
1172
- const result = /*#__PURE__*/React.createRef();
1187
+ const result = /*#__PURE__*/React$1.createRef();
1173
1188
  result.current = [];
1174
1189
  return result;
1175
1190
  }, []);
@@ -1210,7 +1225,7 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
1210
1225
  }, [props, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options]);
1211
1226
  useUpdateColliderOptions(collidersRef, mergedProps, colliderStates);
1212
1227
  useColliderEvents(collidersRef, mergedProps, colliderEvents);
1213
- return /*#__PURE__*/React.createElement("object3D", {
1228
+ return /*#__PURE__*/React$1.createElement("object3D", {
1214
1229
  position: position,
1215
1230
  rotation: rotation,
1216
1231
  quaternion: quaternion,
@@ -1218,56 +1233,56 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
1218
1233
  ref: ref
1219
1234
  }, children);
1220
1235
  }));
1221
- const CuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1222
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1236
+ const CuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1237
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1223
1238
  shape: "cuboid",
1224
1239
  ref: ref
1225
1240
  }));
1226
1241
  });
1227
- const RoundCuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1228
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1242
+ const RoundCuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1243
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1229
1244
  shape: "roundCuboid",
1230
1245
  ref: ref
1231
1246
  }));
1232
1247
  });
1233
- const BallCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1234
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1248
+ const BallCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1249
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1235
1250
  shape: "ball",
1236
1251
  ref: ref
1237
1252
  }));
1238
1253
  });
1239
- const CapsuleCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1240
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1254
+ const CapsuleCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1255
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1241
1256
  shape: "capsule",
1242
1257
  ref: ref
1243
1258
  }));
1244
1259
  });
1245
- const HeightfieldCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1246
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1260
+ const HeightfieldCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1261
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1247
1262
  shape: "heightfield",
1248
1263
  ref: ref
1249
1264
  }));
1250
1265
  });
1251
- const TrimeshCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1252
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1266
+ const TrimeshCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1267
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1253
1268
  shape: "trimesh",
1254
1269
  ref: ref
1255
1270
  }));
1256
1271
  });
1257
- const ConeCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1258
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1272
+ const ConeCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1273
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1259
1274
  shape: "cone",
1260
1275
  ref: ref
1261
1276
  }));
1262
1277
  });
1263
- const CylinderCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1264
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1278
+ const CylinderCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1279
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1265
1280
  shape: "cylinder",
1266
1281
  ref: ref
1267
1282
  }));
1268
1283
  });
1269
- const ConvexHullCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
1270
- return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
1284
+ const ConvexHullCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
1285
+ return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
1271
1286
  shape: "convexHull",
1272
1287
  ref: ref
1273
1288
  }));
@@ -1294,16 +1309,16 @@ const RigidBody = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props, ref) => {
1294
1309
  api,
1295
1310
  options: props
1296
1311
  }), [object, api, props]);
1297
- return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
1312
+ return /*#__PURE__*/React$1.createElement(RigidBodyContext.Provider, {
1298
1313
  value: contextValue
1299
- }, /*#__PURE__*/React.createElement("object3D", _extends({
1314
+ }, /*#__PURE__*/React$1.createElement("object3D", _extends({
1300
1315
  ref: object
1301
1316
  }, objectProps, {
1302
1317
  position: position,
1303
1318
  rotation: rotation,
1304
1319
  quaternion: quaternion,
1305
1320
  scale: scale
1306
- }), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
1321
+ }), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
1307
1322
  key: index
1308
1323
  }, colliderProps)))));
1309
1324
  }));
@@ -1328,188 +1343,34 @@ const MeshCollider = props => {
1328
1343
  });
1329
1344
  }, [physicsOptions, options]);
1330
1345
  const childColliderProps = useChildColliderProps(object, mergedOptions, false);
1331
- return /*#__PURE__*/React.createElement("object3D", {
1346
+ return /*#__PURE__*/React$1.createElement("object3D", {
1332
1347
  ref: object,
1333
1348
  userData: {
1334
1349
  r3RapierType: "MeshCollider"
1335
1350
  }
1336
- }, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
1351
+ }, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
1337
1352
  key: index
1338
1353
  }, colliderProps))));
1339
1354
  };
1340
1355
 
1341
- const geometryFromCollider = collider => {
1342
- switch (collider.shape.type) {
1343
- case ShapeType.Cuboid:
1344
- {
1345
- const {
1346
- x,
1347
- y,
1348
- z
1349
- } = collider.shape.halfExtents;
1350
- return new BoxGeometry(x * 2 + 0.01, y * 2 + 0.01, z * 2 + 0.01);
1351
- }
1352
-
1353
- case ShapeType.RoundCuboid:
1354
- {
1355
- const {
1356
- x,
1357
- y,
1358
- z
1359
- } = collider.shape.halfExtents;
1360
- const radius = collider.shape.borderRadius;
1361
- return new RoundedBoxGeometry(x * 2 + radius * 2, y * 2 + radius * 2, z * 2 + radius * 2, 8, radius);
1362
- }
1363
-
1364
- case ShapeType.Ball:
1365
- {
1366
- const r = collider.shape.radius;
1367
- return new SphereGeometry(r + +0.01, 8, 8);
1368
- }
1369
-
1370
- case ShapeType.TriMesh:
1371
- {
1372
- var _g$index;
1373
-
1374
- const v = collider.shape.vertices;
1375
- const i = collider.shape.indices;
1376
- const g = new BufferGeometry(); // Vertices are not always a float3darray (???), so we need to convert them
1377
-
1378
- const safeVerts = Float32Array.from(v);
1379
- g.setAttribute("position", new BufferAttribute(safeVerts, 3));
1380
- (_g$index = g.index) === null || _g$index === void 0 ? void 0 : _g$index.set(i);
1381
- g.setDrawRange(0, g.attributes.position.array.length / 3 - 1);
1382
- return g;
1383
- }
1384
-
1385
- case ShapeType.ConvexPolyhedron:
1386
- {
1387
- const cv = collider.shape.vertices; // Vertices are not always a float3darray (???), so we need to convert them
1388
-
1389
- const safeVerts = Float32Array.from(cv);
1390
- const cg = new BufferGeometry();
1391
- cg.setAttribute("position", new BufferAttribute(safeVerts, 3));
1392
- return cg;
1393
- }
1394
-
1395
- case ShapeType.Cylinder:
1396
- {
1397
- const r = collider.shape.radius;
1398
- const h = collider.shape.halfHeight;
1399
- const g = new CylinderGeometry(r, r, h * 2);
1400
- return g;
1401
- }
1402
-
1403
- case ShapeType.Capsule:
1404
- {
1405
- const r = collider.shape.radius;
1406
- const h = collider.shape.halfHeight;
1407
- const g = new CapsuleGeometry(r, h * 2, 4, 8);
1408
- return g;
1409
- }
1410
-
1411
- case ShapeType.Cone:
1412
- {
1413
- const r = collider.shape.radius;
1414
- const h = collider.shape.halfHeight;
1415
- const g = new ConeGeometry(r, h * 2, 16);
1416
- return g;
1417
- }
1418
-
1419
- case ShapeType.HeightField:
1420
- {
1421
- const rows = collider.shape.nrows;
1422
- const cols = collider.shape.ncols;
1423
- const heights = collider.shape.heights;
1424
- const scale = collider.shape.scale;
1425
- const g = new PlaneGeometry(scale.x, scale.z, cols, rows);
1426
- const verts = g.attributes.position.array;
1427
- verts.forEach((v, index) => verts[index * 3 + 2] = heights[index] * scale.y);
1428
- g.scale(1, -1, 1);
1429
- g.rotateX(-Math.PI / 2);
1430
- g.rotateY(-Math.PI / 2);
1431
- return g;
1432
- }
1433
- }
1434
-
1435
- return new BoxGeometry(1, 1, 1);
1436
- };
1437
-
1438
- const DebugShape = /*#__PURE__*/memo(({
1439
- colliderHandle,
1440
- color,
1441
- sleepColor
1442
- }) => {
1356
+ const Debug = () => {
1443
1357
  const {
1444
1358
  world
1445
1359
  } = useRapier();
1446
1360
  const ref = useRef(null);
1447
- const [material] = useState(new MeshBasicMaterial({
1448
- color,
1449
- wireframe: true
1450
- }));
1451
1361
  useFrame(() => {
1452
- const collider = world.getCollider(colliderHandle);
1453
-
1454
- if (ref.current && collider) {
1455
- const {
1456
- x: rx,
1457
- y: ry,
1458
- z: rz,
1459
- w: rw
1460
- } = collider.rotation();
1461
- const {
1462
- x,
1463
- y,
1464
- z
1465
- } = collider.translation();
1466
- const parent = collider.parent();
1467
-
1468
- if (parent !== null && parent !== void 0 && parent.isSleeping() || parent !== null && parent !== void 0 && parent.isFixed() || parent !== null && parent !== void 0 && parent.isKinematic()) {
1469
- material.color = new Color(sleepColor);
1470
- } else {
1471
- material.color = new Color(color);
1472
- }
1473
-
1474
- ref.current.position.set(x, y, z);
1475
- ref.current.rotation.setFromQuaternion(new Quaternion(rx, ry, rz, rw));
1476
- }
1477
- });
1478
- const geometry = useMemo(() => {
1479
- const collider = world.getCollider(colliderHandle);
1480
- return geometryFromCollider(collider);
1481
- }, [colliderHandle]);
1482
- return /*#__PURE__*/React.createElement("mesh", {
1483
- ref: ref,
1484
- material: material
1485
- }, /*#__PURE__*/React.createElement("primitive", {
1486
- object: geometry,
1487
- attach: "geometry"
1488
- }));
1489
- });
1490
- const Debug = ({
1491
- color: _color = "red",
1492
- sleepColor: _sleepColor = "blue"
1493
- }) => {
1494
- const {
1495
- world
1496
- } = useRapier();
1497
- const [colliders, setColliders] = useState([]);
1498
- useRef({});
1499
-
1500
- useFrame(() => {
1501
- const newColliders = [];
1502
- world.forEachCollider(collider => {
1503
- newColliders.push(collider.handle);
1504
- });
1505
- setColliders(newColliders);
1362
+ const mesh = ref.current;
1363
+ if (!mesh) return;
1364
+ const buffers = world.debugRender();
1365
+ mesh.geometry.setAttribute("position", new BufferAttribute(buffers.vertices, 3));
1366
+ mesh.geometry.setAttribute("color", new BufferAttribute(buffers.colors, 4));
1506
1367
  });
1507
- return /*#__PURE__*/React.createElement("group", null, colliders.map(handle => /*#__PURE__*/React.createElement(DebugShape, {
1508
- key: handle,
1509
- colliderHandle: handle,
1510
- color: _color,
1511
- sleepColor: _sleepColor
1512
- })));
1368
+ return /*#__PURE__*/React.createElement("lineSegments", {
1369
+ ref: ref
1370
+ }, /*#__PURE__*/React.createElement("lineBasicMaterial", {
1371
+ color: 0xffffff,
1372
+ vertexColors: true
1373
+ }), /*#__PURE__*/React.createElement("bufferGeometry", null));
1513
1374
  };
1514
1375
 
1515
1376
  const _excluded = ["positions", "rotations", "children"];
@@ -1614,11 +1475,11 @@ const InstancedRigidBodies = /*#__PURE__*/forwardRef((props, ref) => {
1614
1475
  options: mergedOptions
1615
1476
  };
1616
1477
  }, [api, mergedOptions]);
1617
- return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
1478
+ return /*#__PURE__*/React$1.createElement(RigidBodyContext.Provider, {
1618
1479
  value: contextValue
1619
- }, /*#__PURE__*/React.createElement("object3D", {
1480
+ }, /*#__PURE__*/React$1.createElement("object3D", {
1620
1481
  ref: object
1621
- }, props.children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
1482
+ }, props.children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
1622
1483
  key: index
1623
1484
  }, colliderProps)))));
1624
1485
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/rapier",
3
- "version": "0.7.6",
3
+ "version": "0.8.0",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/react-three-rapier.cjs.js",
6
6
  "module": "dist/react-three-rapier.esm.js",
@@ -8,19 +8,22 @@
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
+ "scripts": {
12
+ "ts": "tsc -w"
13
+ },
11
14
  "devDependencies": {
12
- "@react-three/drei": "^9.6.2",
13
- "@react-three/fiber": "^8.0.12",
15
+ "@react-three/drei": "^9.34.1",
16
+ "@react-three/fiber": "^8.8.9",
14
17
  "@react-three/test-renderer": "^8.0.17",
15
18
  "@types/react-dom": "^18.0.2",
16
19
  "@types/three": "^0.139.0",
17
20
  "@vitejs/plugin-react": "^2.1.0",
18
- "@vitest/ui": "^0.23.4",
19
- "happy-dom": "^6.0.4",
21
+ "@vitest/ui": "^0.24.1",
22
+ "happy-dom": "^7.5.5",
20
23
  "react": "^18.1.0",
21
24
  "react-dom": "^18.1.0",
22
25
  "three": "^0.139.2",
23
- "vitest": "^0.23.4"
26
+ "vitest": "^0.24.1"
24
27
  },
25
28
  "peerDependencies": {
26
29
  "@react-three/fiber": "^8.0.12",
package/readme.md CHANGED
@@ -122,6 +122,16 @@ const Scene = () => (
122
122
  );
123
123
  ```
124
124
 
125
+ If part of our meshes are invisible and you want to include them in the collider creation, use the `includeInvisible` flag.
126
+
127
+ ```tsx
128
+ <RigidBody colliders="hull" includeInvisible>
129
+ <object3D>
130
+ <Suzanne visible={false} />
131
+ </object3D>
132
+ </RigidBody>
133
+ ```
134
+
125
135
  ## Instanced Meshes
126
136
 
127
137
  Instanced meshes can also be used and have automatic colliders generated from their mesh.
@@ -185,12 +195,7 @@ const Scene = () => {
185
195
 
186
196
  ## Debug
187
197
 
188
- Use the Debug component to see live representations of all colliders in a scene.
189
-
190
- - The `color` prop sets the color of awake colliders that are affected by forces.
191
- - The `sleepColor` prop set the color of a static (fixed, or kinematic) or sleeping collider.
192
-
193
- > Note: Experimental. Not all shapes are supported. Unsupported shapes are always represented by cubes.
198
+ Use the Debug component to see live representations of all colliders in a scene, using the live debug buffer from the physics engine.
194
199
 
195
200
  ```tsx
196
201
  import { Box, Sphere } from "@react-three/drei";
@@ -199,7 +204,7 @@ import { RigidBody, Debug } from "@react-three/rapier";
199
204
  const Scene = () => {
200
205
  return (
201
206
  <Physics>
202
- <Debug color="red" sleepColor="blue" />
207
+ <Debug />
203
208
 
204
209
  <RigidBody>
205
210
  <Box />