@react-three/rapier 0.4.2 → 0.5.1
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 +28 -0
- package/dist/declarations/src/Physics.d.ts +23 -1
- package/dist/declarations/src/api.d.ts +18 -1
- package/dist/declarations/src/components.d.ts +6 -1
- package/dist/declarations/src/hooks.d.ts +3 -35
- package/dist/declarations/src/types.d.ts +20 -3
- package/dist/declarations/src/utils.d.ts +5 -4
- package/dist/react-three-rapier.cjs.dev.js +168 -220
- package/dist/react-three-rapier.cjs.prod.js +168 -220
- package/dist/react-three-rapier.esm.js +169 -206
- package/package.json +2 -2
- package/readme.md +25 -19
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,33 @@
|
|
1
1
|
# @react-three/rapier
|
2
2
|
|
3
|
+
## 0.5.1
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- c36be39: Add MeshCollider, allowing more fine control over automatic collider creation
|
8
|
+
|
9
|
+
## 0.5.0
|
10
|
+
|
11
|
+
### Minor Changes
|
12
|
+
|
13
|
+
- a3be5f6: Remove hooks api in favor of better fleshed out components
|
14
|
+
|
15
|
+
### Patch Changes
|
16
|
+
|
17
|
+
- a3be5f6: Update types for Joints -- now only allow RefObjects of RigidBodyApi
|
18
|
+
- a3be5f6: Fix setKinematicRotation (convert Vector3 to Quaternion)
|
19
|
+
- a3be5f6: Update to @dimforge/rapier3d-compat@0.9.0
|
20
|
+
- a3be5f6: Allow setting the physics timeStep
|
21
|
+
- a3be5f6: Add rotational and transitional constraits to RigidBody
|
22
|
+
- a3be5f6: Allow updating the gravity at runtime
|
23
|
+
|
24
|
+
## 0.4.3
|
25
|
+
|
26
|
+
### Patch Changes
|
27
|
+
|
28
|
+
- f7a8a2d: Rigid body creation hooks should not use auto colliders
|
29
|
+
- 663eeb5: Fix default collider setting
|
30
|
+
|
3
31
|
## 0.4.2
|
4
32
|
|
5
33
|
### Patch Changes
|
@@ -27,9 +27,31 @@ declare type EventMap = Map<ColliderHandle | RigidBodyHandle, {
|
|
27
27
|
}): void;
|
28
28
|
}>;
|
29
29
|
interface RapierWorldProps {
|
30
|
+
children: ReactNode;
|
31
|
+
/**
|
32
|
+
* Set the gravity of the physics world
|
33
|
+
* @defaultValue [0, -9.81, 0]
|
34
|
+
*/
|
30
35
|
gravity?: Vector3Array;
|
36
|
+
/**
|
37
|
+
* Set the base automatic colliders for this physics world
|
38
|
+
* All Meshes inside RigidBodies will generate a collider
|
39
|
+
* based on this value, if not overridden.
|
40
|
+
*/
|
31
41
|
colliders?: RigidBodyAutoCollider;
|
32
|
-
|
42
|
+
/**
|
43
|
+
* Set the timestep for the simulation.
|
44
|
+
* Setting this to a number (eg. 1/60) will run the
|
45
|
+
* simulation at that framerate.
|
46
|
+
*
|
47
|
+
* "vary" will run the simulation at a delta-value based
|
48
|
+
* on the users current framerate. This ensures simulations
|
49
|
+
* run at the same percieved speed at all framerates, but
|
50
|
+
* can also lead to instability.
|
51
|
+
*
|
52
|
+
* @defaultValue "vary"
|
53
|
+
*/
|
54
|
+
timeStep?: number | 'vary';
|
33
55
|
}
|
34
56
|
export declare const Physics: FC<RapierWorldProps>;
|
35
57
|
export {};
|
@@ -101,6 +101,22 @@ export interface RigidBodyApi {
|
|
101
101
|
* Resets to zero the user torques applied to this rigid-body.
|
102
102
|
*/
|
103
103
|
resetTorques(): void;
|
104
|
+
/**
|
105
|
+
* Locks or unlocks the ability of this rigid-body to rotate.
|
106
|
+
*/
|
107
|
+
lockRotations(locked: boolean): void;
|
108
|
+
/**
|
109
|
+
* Locks or unlocks the ability of this rigid-body to translate.
|
110
|
+
*/
|
111
|
+
lockTranslations(locked: boolean): void;
|
112
|
+
/**
|
113
|
+
* Locks or unlocks the ability of this rigid-body to rotate along individual coordinate axes.
|
114
|
+
*/
|
115
|
+
setEnabledRotations(x: boolean, y: boolean, z: boolean): void;
|
116
|
+
/**
|
117
|
+
* Locks or unlocks the ability of this rigid-body to translate along individual coordinate axes.
|
118
|
+
*/
|
119
|
+
setEnabledTranslations(x: boolean, y: boolean, z: boolean): void;
|
104
120
|
}
|
105
121
|
export declare const createRigidBodyApi: (ref: RefGetter<RigidBody>) => RigidBodyApi;
|
106
122
|
export declare const createColliderApi: (ref: RefGetter<Collider>) => {
|
@@ -112,12 +128,13 @@ export interface WorldApi {
|
|
112
128
|
getCollider(handle: number): Collider | undefined;
|
113
129
|
getRigidBody(handle: number): RigidBody | undefined;
|
114
130
|
createRigidBody(desc: RigidBodyDesc): RigidBody;
|
115
|
-
createCollider(desc: ColliderDesc,
|
131
|
+
createCollider(desc: ColliderDesc, parent?: RigidBody): Collider;
|
116
132
|
removeRigidBody(rigidBody: RigidBody): void;
|
117
133
|
removeCollider(collider: Collider): void;
|
118
134
|
createImpulseJoint(params: JointData, rigidBodyA: RigidBody, rigidBodyB: RigidBody): ImpulseJoint;
|
119
135
|
removeImpulseJoint(joint: ImpulseJoint): void;
|
120
136
|
forEachCollider(callback: (collider: Collider) => void): void;
|
137
|
+
setGravity(gravity: Vector3): void;
|
121
138
|
}
|
122
139
|
export declare const createWorldApi: (ref: RefGetter<World>) => WorldApi;
|
123
140
|
export declare const createJointApi: (ref: RefGetter<ImpulseJoint>) => {
|
@@ -1,10 +1,15 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import { ReactNode } from "react";
|
3
|
-
import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
|
3
|
+
import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RigidBodyAutoCollider, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
|
4
4
|
interface RigidBodyProps extends UseRigidBodyOptions {
|
5
5
|
children?: ReactNode;
|
6
6
|
}
|
7
7
|
export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<import("./api").RigidBodyApi>>;
|
8
|
+
interface MeshColliderProps {
|
9
|
+
children: ReactNode;
|
10
|
+
type: RigidBodyAutoCollider;
|
11
|
+
}
|
12
|
+
export declare const MeshCollider: ({ children, type }: MeshColliderProps) => JSX.Element;
|
8
13
|
declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
|
9
14
|
args: T;
|
10
15
|
children?: ReactNode;
|
@@ -1,47 +1,15 @@
|
|
1
1
|
import React, { MutableRefObject } from "react";
|
2
2
|
import { RapierContext } from "./Physics";
|
3
|
-
import {
|
3
|
+
import { Object3D } from "three";
|
4
4
|
import type Rapier from "@dimforge/rapier3d-compat";
|
5
5
|
export declare const useRapier: () => RapierContext;
|
6
|
-
import {
|
7
|
-
import { RoundCone } from "@dimforge/rapier3d-compat";
|
6
|
+
import { UseRigidBodyOptions, UseImpulseJoint, SphericalJointParams, FixedJointParams, PrismaticJointParams, RevoluteJointParams, UseColliderOptions, RigidBodyApi, RigidBodyApiRef } from "./types";
|
8
7
|
export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions) => [React.MutableRefObject<O>, import("./api").RigidBodyApi];
|
9
8
|
export declare const useCollider: <A>(body: RigidBodyApi, options?: UseColliderOptions<A>) => (React.MutableRefObject<Object3D<import("three").Event> | undefined> | {
|
10
9
|
raw: () => Rapier.Collider | undefined;
|
11
10
|
readonly handle: number;
|
12
11
|
})[];
|
13
|
-
export declare const
|
14
|
-
export declare const useCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
15
|
-
export declare const useBall: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<BallArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
16
|
-
export declare const useCapsule: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CapsuleArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
17
|
-
export declare const useHeightfield: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<HeightfieldArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
18
|
-
/**
|
19
|
-
* Create a trimesh collider and rigid body.
|
20
|
-
* Note that Trimeshes don't have mass unless provided.
|
21
|
-
* See https://rapier.rs/docs/user_guides/javascript/rigid_bodies#mass-properties
|
22
|
-
* for available properties.
|
23
|
-
*/
|
24
|
-
export declare const useTrimesh: {
|
25
|
-
<T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
26
|
-
fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T_1>, rigidBody: import("./api").RigidBodyApi];
|
27
|
-
};
|
28
|
-
export declare const usePolyline: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<PolylineArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
29
|
-
export declare const useRoundCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
30
|
-
export declare const useCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
31
|
-
export declare const useRoundCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
32
|
-
export declare const useCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConeArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
33
|
-
export declare const useRoundCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCone>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
34
|
-
export declare const useConvexHull: {
|
35
|
-
<T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexHullArgs>): [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
36
|
-
fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: Omit<UseColliderOptions<ConvexHullArgs>, "colliderArgs">): [ref: React.MutableRefObject<T_1>, rigidBody: import("./api").RigidBodyApi];
|
37
|
-
};
|
38
|
-
export declare const useRoundConvexHull: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexHullArgs>) => [ref: React.MutableRefObject<T>, rigidBody: import("./api").RigidBodyApi];
|
39
|
-
export declare const useConvexMesh: {
|
40
|
-
<T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexMeshArgs>): [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: import("./api").RigidBodyApi];
|
41
|
-
fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: Omit<UseColliderOptions<ConvexMeshArgs>, "colliderArgs">): [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: import("./api").RigidBodyApi];
|
42
|
-
};
|
43
|
-
export declare const useRoundConvexMesh: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexMeshArgs>) => [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: import("./api").RigidBodyApi];
|
44
|
-
export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, body2: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, params: Rapier.JointData) => {
|
12
|
+
export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: RigidBodyApiRef, body2: RigidBodyApiRef, params: Rapier.JointData) => {
|
45
13
|
raw: () => Rapier.ImpulseJoint | undefined;
|
46
14
|
readonly handle: number;
|
47
15
|
configureMotorPosition: (targetPos: number, stiffness: number, damping: number) => void;
|
@@ -64,6 +64,7 @@ export declare type UseBodyOptions = Omit<UseRigidBodyOptions, "shape">;
|
|
64
64
|
export declare type RigidBodyTypeString = "fixed" | "dynamic" | "kinematicPosition" | "kinematicVelocity";
|
65
65
|
export declare type RigidBodyShape = "cuboid" | "trimesh" | "ball" | "capsule" | "convexHull" | "heightfield" | "polyline" | "roundCuboid" | "cylinder" | "roundCylinder" | "cone" | "roundCone" | "convexMesh" | "roundConvexHull" | "roundConvexMesh";
|
66
66
|
export declare type Vector3Array = [x: number, y: number, z: number];
|
67
|
+
export declare type Boolean3Array = [x: boolean, y: boolean, z: boolean];
|
67
68
|
export interface UseColliderOptions<A> {
|
68
69
|
/**
|
69
70
|
* The shape of your collider
|
@@ -188,6 +189,22 @@ export interface UseRigidBodyOptions {
|
|
188
189
|
}): void;
|
189
190
|
onSleep?(): void;
|
190
191
|
onWake?(): void;
|
192
|
+
/**
|
193
|
+
* Locks all rotations that would have resulted from forces on the created rigid-body.
|
194
|
+
*/
|
195
|
+
lockRotations?: boolean;
|
196
|
+
/**
|
197
|
+
* Locks all translations that would have resulted from forces on the created rigid-body.
|
198
|
+
*/
|
199
|
+
lockTranslations?: boolean;
|
200
|
+
/**
|
201
|
+
* Allow rotation of this rigid-body only along specific axes.
|
202
|
+
*/
|
203
|
+
enabledRotations?: Boolean3Array;
|
204
|
+
/**
|
205
|
+
* Allow rotation of this rigid-body only along specific axes.
|
206
|
+
*/
|
207
|
+
enabledTranslations?: Boolean3Array;
|
191
208
|
}
|
192
209
|
export declare type SphericalJointParams = [
|
193
210
|
body1Anchor: Vector3Array,
|
@@ -207,12 +224,12 @@ export declare type PrismaticJointParams = [
|
|
207
224
|
];
|
208
225
|
export declare type RevoluteJointParams = [
|
209
226
|
body1Anchor: Vector3Array,
|
210
|
-
body1LocalFrame: Vector3Array,
|
211
227
|
body2Anchor: Vector3Array,
|
212
|
-
|
228
|
+
axis: Vector3Array
|
213
229
|
];
|
230
|
+
export declare type RigidBodyApiRef = MutableRefObject<undefined | null | RigidBodyApi>;
|
214
231
|
export interface UseImpulseJoint<P> {
|
215
|
-
(body1:
|
232
|
+
(body1: RigidBodyApiRef, body2: RigidBodyApiRef, params: P): JointApi;
|
216
233
|
}
|
217
234
|
export declare type RigidBodyApi = ReturnType<typeof createRigidBodyApi>;
|
218
235
|
export declare type ColliderApi = ReturnType<typeof createColliderApi>;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Collider, RigidBody } from "@dimforge/rapier3d-compat";
|
2
|
-
import { Object3D, Vector3 } from "three";
|
3
|
-
import { RigidBodyShape, RigidBodyTypeString, UseColliderOptions, UseRigidBodyOptions, Vector3Array, WorldApi } from "./types";
|
2
|
+
import { Object3D, Quaternion, Vector3 } from "three";
|
3
|
+
import { RigidBodyApi, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, UseRigidBodyOptions, Vector3Array, WorldApi } from "./types";
|
4
4
|
export declare const vectorArrayToObject: (arr: Vector3Array) => {
|
5
5
|
x: number;
|
6
6
|
y: number;
|
@@ -8,10 +8,11 @@ export declare const vectorArrayToObject: (arr: Vector3Array) => {
|
|
8
8
|
};
|
9
9
|
export declare const rigidBodyTypeFromString: (type: RigidBodyTypeString) => number;
|
10
10
|
export declare const scaleColliderArgs: (shape: RigidBodyShape, args: (number | ArrayLike<number>)[], scale: Vector3) => (number | ArrayLike<number>)[];
|
11
|
-
export declare const createColliderFromOptions: <A>(options: UseColliderOptions<A>, world: WorldApi, rigidBody
|
11
|
+
export declare const createColliderFromOptions: <A>(options: UseColliderOptions<A>, world: WorldApi, rigidBody?: RigidBody | undefined, scale?: {
|
12
12
|
x: number;
|
13
13
|
y: number;
|
14
14
|
z: number;
|
15
15
|
}, hasCollisionEvents?: boolean) => Collider;
|
16
|
-
export declare const createCollidersFromChildren: (object: Object3D, rigidBody:
|
16
|
+
export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBodyApi, options: UseRigidBodyOptions, world: WorldApi, ignoreMeshColliders?: boolean) => Collider[];
|
17
17
|
export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];
|
18
|
+
export declare const vector3ToQuaternion: (v: Vector3) => Quaternion;
|