@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 +6 -0
- package/dist/declarations/src/types.d.ts +10 -0
- package/dist/declarations/src/utils.d.ts +2 -2
- package/dist/react-three-rapier.cjs.dev.js +7 -10
- package/dist/react-three-rapier.cjs.prod.js +7 -10
- package/dist/react-three-rapier.esm.js +7 -10
- package/package.json +1 -1
- package/readme.md +12 -6
package/CHANGELOG.md
CHANGED
@@ -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 {
|
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,
|
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,
|
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 (
|
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 (
|
191
|
-
|
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
|
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,
|
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 (
|
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 (
|
191
|
-
|
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
|
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,
|
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 (
|
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 (
|
166
|
-
|
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
|
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
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
|
-
<
|
16
|
-
<
|
17
|
-
<
|
18
|
-
|
19
|
-
|
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
|
};
|