@react-three/rapier 0.4.1 → 0.4.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @react-three/rapier
2
2
 
3
+ ## 0.4.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 387b32c: Add restitution and friction as props for auto-generated colliders on RigidBody
8
+
3
9
  ## 0.4.1
4
10
 
5
11
  ### Patch Changes
@@ -162,6 +162,16 @@ export interface UseRigidBodyOptions {
162
162
  * Setting this to false will disable automatic colliders.
163
163
  */
164
164
  colliders?: RigidBodyAutoCollider | false;
165
+ /**
166
+ * Set the friction of auto-generated colliders.
167
+ * This does not affect any non-automatic child collider-components.
168
+ */
169
+ friction?: number;
170
+ /**
171
+ * Set the restitution (bounciness) of auto-generated colliders.
172
+ * This does not affect any non-automatic child collider-components.
173
+ */
174
+ restitution?: number;
165
175
  /**
166
176
  * Callback when this rigidbody collides with another rigidbody
167
177
  */
@@ -1,6 +1,6 @@
1
1
  import { Collider, RigidBody } from "@dimforge/rapier3d-compat";
2
2
  import { Object3D, Vector3 } from "three";
3
- import { RigidBodyAutoCollider, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, Vector3Array, WorldApi } from "./types";
3
+ import { RigidBodyShape, RigidBodyTypeString, UseColliderOptions, UseRigidBodyOptions, Vector3Array, WorldApi } from "./types";
4
4
  export declare const vectorArrayToObject: (arr: Vector3Array) => {
5
5
  x: number;
6
6
  y: number;
@@ -13,5 +13,5 @@ export declare const createColliderFromOptions: <A>(options: UseColliderOptions<
13
13
  y: number;
14
14
  z: number;
15
15
  }, hasCollisionEvents?: boolean) => Collider;
16
- export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBody, type: RigidBodyAutoCollider, world: WorldApi, hasCollisionEvents?: boolean) => Collider[];
16
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBody, options: UseRigidBodyOptions, world: WorldApi) => Collider[];
17
17
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];
@@ -113,7 +113,8 @@ const createColliderFromOptions = (options, world, rigidBody, scale = {
113
113
  const collider = world.createCollider(colliderDesc, rigidBody);
114
114
  return collider;
115
115
  };
116
- const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisionEvents = false) => {
116
+ const createCollidersFromChildren = (object, rigidBody, options, world) => {
117
+ const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
117
118
  const colliders = [];
118
119
  let desc;
119
120
  let offset = new three.Vector3();
@@ -135,7 +136,7 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
135
136
  } = new three.Quaternion().setFromEuler(child.rotation);
136
137
  const scale = child.getWorldScale(new three.Vector3());
137
138
 
138
- switch (type) {
139
+ switch (options.colliders) {
139
140
  case "cuboid":
140
141
  {
141
142
  geometry.computeBoundingBox();
@@ -186,11 +187,9 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
186
187
  z: rz,
187
188
  w: rw
188
189
  });
189
-
190
- if (hasCollisionEvents) {
191
- desc.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS);
192
- }
193
-
190
+ if (hasCollisionEvents) desc.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS);
191
+ if (Number.isFinite(options.friction)) desc.setFriction(options.friction);
192
+ if (Number.isFinite(options.restitution)) desc.setRestitution(options.restitution);
194
193
  const collider = world.createCollider(desc, rigidBody);
195
194
  colliders.push(collider);
196
195
  }
@@ -600,9 +599,7 @@ const useRigidBody = (options = {}) => {
600
599
  rigidBody.resetForces(false);
601
600
  rigidBody.resetTorques(false);
602
601
  const colliderSetting = (_ref = (_options$colliders = options === null || options === void 0 ? void 0 : options.colliders) !== null && _options$colliders !== void 0 ? _options$colliders : physicsOptions.colliders) !== null && _ref !== void 0 ? _ref : false;
603
- const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
604
- const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, colliderSetting, world, hasCollisionEvents) : [];
605
- rigidBody.wakeUp();
602
+ const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, options, world) : [];
606
603
  rigidBodyMeshes.set(rigidBody.handle, ref.current);
607
604
  return () => {
608
605
  world.removeRigidBody(rigidBody);
@@ -113,7 +113,8 @@ const createColliderFromOptions = (options, world, rigidBody, scale = {
113
113
  const collider = world.createCollider(colliderDesc, rigidBody);
114
114
  return collider;
115
115
  };
116
- const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisionEvents = false) => {
116
+ const createCollidersFromChildren = (object, rigidBody, options, world) => {
117
+ const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
117
118
  const colliders = [];
118
119
  let desc;
119
120
  let offset = new three.Vector3();
@@ -135,7 +136,7 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
135
136
  } = new three.Quaternion().setFromEuler(child.rotation);
136
137
  const scale = child.getWorldScale(new three.Vector3());
137
138
 
138
- switch (type) {
139
+ switch (options.colliders) {
139
140
  case "cuboid":
140
141
  {
141
142
  geometry.computeBoundingBox();
@@ -186,11 +187,9 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
186
187
  z: rz,
187
188
  w: rw
188
189
  });
189
-
190
- if (hasCollisionEvents) {
191
- desc.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS);
192
- }
193
-
190
+ if (hasCollisionEvents) desc.setActiveEvents(rapier3dCompat.ActiveEvents.COLLISION_EVENTS);
191
+ if (Number.isFinite(options.friction)) desc.setFriction(options.friction);
192
+ if (Number.isFinite(options.restitution)) desc.setRestitution(options.restitution);
194
193
  const collider = world.createCollider(desc, rigidBody);
195
194
  colliders.push(collider);
196
195
  }
@@ -600,9 +599,7 @@ const useRigidBody = (options = {}) => {
600
599
  rigidBody.resetForces(false);
601
600
  rigidBody.resetTorques(false);
602
601
  const colliderSetting = (_ref = (_options$colliders = options === null || options === void 0 ? void 0 : options.colliders) !== null && _options$colliders !== void 0 ? _options$colliders : physicsOptions.colliders) !== null && _ref !== void 0 ? _ref : false;
603
- const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
604
- const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, colliderSetting, world, hasCollisionEvents) : [];
605
- rigidBody.wakeUp();
602
+ const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, options, world) : [];
606
603
  rigidBodyMeshes.set(rigidBody.handle, ref.current);
607
604
  return () => {
608
605
  world.removeRigidBody(rigidBody);
@@ -88,7 +88,8 @@ const createColliderFromOptions = (options, world, rigidBody, scale = {
88
88
  const collider = world.createCollider(colliderDesc, rigidBody);
89
89
  return collider;
90
90
  };
91
- const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisionEvents = false) => {
91
+ const createCollidersFromChildren = (object, rigidBody, options, world) => {
92
+ const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
92
93
  const colliders = [];
93
94
  let desc;
94
95
  let offset = new Vector3();
@@ -110,7 +111,7 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
110
111
  } = new Quaternion().setFromEuler(child.rotation);
111
112
  const scale = child.getWorldScale(new Vector3());
112
113
 
113
- switch (type) {
114
+ switch (options.colliders) {
114
115
  case "cuboid":
115
116
  {
116
117
  geometry.computeBoundingBox();
@@ -161,11 +162,9 @@ const createCollidersFromChildren = (object, rigidBody, type, world, hasCollisio
161
162
  z: rz,
162
163
  w: rw
163
164
  });
164
-
165
- if (hasCollisionEvents) {
166
- desc.setActiveEvents(ActiveEvents.COLLISION_EVENTS);
167
- }
168
-
165
+ if (hasCollisionEvents) desc.setActiveEvents(ActiveEvents.COLLISION_EVENTS);
166
+ if (Number.isFinite(options.friction)) desc.setFriction(options.friction);
167
+ if (Number.isFinite(options.restitution)) desc.setRestitution(options.restitution);
169
168
  const collider = world.createCollider(desc, rigidBody);
170
169
  colliders.push(collider);
171
170
  }
@@ -575,9 +574,7 @@ const useRigidBody = (options = {}) => {
575
574
  rigidBody.resetForces(false);
576
575
  rigidBody.resetTorques(false);
577
576
  const colliderSetting = (_ref = (_options$colliders = options === null || options === void 0 ? void 0 : options.colliders) !== null && _options$colliders !== void 0 ? _options$colliders : physicsOptions.colliders) !== null && _ref !== void 0 ? _ref : false;
578
- const hasCollisionEvents = !!(options.onCollisionEnter || options.onCollisionExit);
579
- const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, colliderSetting, world, hasCollisionEvents) : [];
580
- rigidBody.wakeUp();
577
+ const autoColliders = colliderSetting !== false ? createCollidersFromChildren(ref.current, rigidBody, options, world) : [];
581
578
  rigidBodyMeshes.set(rigidBody.handle, ref.current);
582
579
  return () => {
583
580
  world.removeRigidBody(rigidBody);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/rapier",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/react-three-rapier.cjs.js",
6
6
  "module": "dist/react-three-rapier.esm.js",
package/readme.md CHANGED
@@ -5,18 +5,24 @@
5
5
  ## Usage
6
6
 
7
7
  ```tsx
8
- import { Box } from "@react-three/drei";
8
+ import { Box, Torus } from "@react-three/drei";
9
9
  import { Canvas } from "@react-three/fiber";
10
10
  import { Physics, RigidBody } from "@react-three/rapier";
11
11
 
12
12
  const App = () => {
13
13
  return (
14
14
  <Canvas>
15
- <Physics>
16
- <RigidBody>
17
- <Box />
18
- </RigidBody>
19
- </Physics>
15
+ <Suspense>
16
+ <Physics>
17
+ <RigidBody colliders={"hull"} restitution={2}>
18
+ <Torus />
19
+ </RigidBody>
20
+
21
+ <RigidBody position={[0, -2, 0]} type="kinematicPosition">
22
+ <Box args={[20, 0.5, 20]} />
23
+ </RigidBody>
24
+ </Physics>
25
+ </Suspense>
20
26
  </Canvas>
21
27
  );
22
28
  };