@react-three/rapier 0.4.3 → 0.5.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.
@@ -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
- children: ReactNode;
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, rigidBody: RigidBody): Collider;
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 { Mesh, Object3D } from "three";
3
+ import { Object3D } from "three";
4
4
  import type Rapier from "@dimforge/rapier3d-compat";
5
5
  export declare const useRapier: () => RapierContext;
6
- import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, PolylineArgs, RoundConvexHullArgs, RoundCuboidArgs, RoundCylinderArgs, TrimeshArgs, UseBodyOptions, UseRigidBodyOptions, UseImpulseJoint, SphericalJointParams, FixedJointParams, PrismaticJointParams, RevoluteJointParams, UseColliderOptions, RapierRigidBody, ConvexMeshArgs, RoundConvexMeshArgs, RigidBodyApi } from "./types";
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 useRigidBodyWithCollider: <A, O extends Object3D<import("three").Event> = Object3D<import("three").Event>>(rigidBodyOptions?: UseRigidBodyOptions | undefined, colliderOptions?: UseColliderOptions<A> | undefined) => [ref: React.MutableRefObject<O>, rigidBody: import("./api").RigidBodyApi];
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;
@@ -2,9 +2,9 @@ import { MutableRefObject } from "react";
2
2
  import { CoefficientCombineRule, RigidBody as RapierRigidBody, Collider as RapierCollider, TempContactManifold } from "@dimforge/rapier3d-compat";
3
3
  import { createColliderApi, createJointApi, createRigidBodyApi, createWorldApi } from "./api";
4
4
  export { RapierRigidBody, RapierCollider };
5
- export { CoefficientCombineRule as CoefficientCombineRule, } from "@dimforge/rapier3d-compat";
5
+ export { CoefficientCombineRule as CoefficientCombineRule } from "@dimforge/rapier3d-compat";
6
6
  export declare type RefGetter<T> = MutableRefObject<() => T | undefined>;
7
- export declare type RigidBodyAutoCollider = 'ball' | 'cuboid' | 'hull' | 'trimesh' | false;
7
+ export declare type RigidBodyAutoCollider = "ball" | "cuboid" | "hull" | "trimesh" | false;
8
8
  export interface UseRigidBodyAPI {
9
9
  rigidBody: RapierRigidBody;
10
10
  collider: RapierCollider;
@@ -64,7 +64,8 @@ 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 interface UseColliderOptions<A> {
67
+ export declare type Boolean3Array = [x: boolean, y: boolean, z: boolean];
68
+ export interface UseColliderOptions<ColliderArgs> {
68
69
  /**
69
70
  * The shape of your collider
70
71
  */
@@ -72,7 +73,7 @@ export interface UseColliderOptions<A> {
72
73
  /**
73
74
  * Arguments to pass to the collider
74
75
  */
75
- args?: A;
76
+ args?: ColliderArgs;
76
77
  /**
77
78
  * The mass of this rigid body.
78
79
  * The mass and density is automatically calculated based on the shape of the 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
- body2LocalFrame: Vector3Array
228
+ axis: Vector3Array
213
229
  ];
230
+ export declare type RigidBodyApiRef = MutableRefObject<undefined | null | RigidBodyApi>;
214
231
  export interface UseImpulseJoint<P> {
215
- (body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: P): JointApi;
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,17 +1,28 @@
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;
7
7
  z: number;
8
8
  };
9
+ export declare const vector3ToQuaternion: (v: Vector3) => Quaternion;
9
10
  export declare const rigidBodyTypeFromString: (type: RigidBodyTypeString) => number;
10
11
  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: RigidBody, scale?: {
12
- x: number;
13
- y: number;
14
- z: number;
15
- }, hasCollisionEvents?: boolean) => Collider;
16
- export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBody, options: UseRigidBodyOptions, world: WorldApi) => Collider[];
12
+ interface CreateColliderFromOptions {
13
+ <ColliderArgs>(options: {
14
+ options: UseColliderOptions<ColliderArgs>;
15
+ world: WorldApi;
16
+ rigidBody?: RigidBody;
17
+ scale: {
18
+ x: number;
19
+ y: number;
20
+ z: number;
21
+ };
22
+ hasCollisionEvents: boolean;
23
+ }): Collider;
24
+ }
25
+ export declare const createColliderFromOptions: CreateColliderFromOptions;
26
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBodyApi, options: UseRigidBodyOptions, world: WorldApi, ignoreMeshColliders?: boolean) => Collider[];
17
27
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];
28
+ export {};