@react-three/rapier 0.2.0 → 0.4.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @react-three/rapier
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - dd535aa: Update to @dimforge/rapier3d-compat@0.8.1, pinned version
8
+
9
+ ### Patch Changes
10
+
11
+ - dd535aa: Better <Physics /> lifecycle making reinitialization more stable
12
+
13
+ ## 0.3.1
14
+
15
+ ### Patch Changes
16
+
17
+ - 37d2621: Pin rapier3d version to 0.8.0-alpha.2
18
+
19
+ ## 0.3.0
20
+
21
+ ### Minor Changes
22
+
23
+ - 7e36172: Add collision and sleep/awake events
24
+
3
25
  ## 0.2.0
4
26
 
5
27
  ### Minor Changes
@@ -1,7 +1,7 @@
1
1
  import React, { FC, ReactNode } from "react";
2
2
  import type Rapier from "@dimforge/rapier3d-compat";
3
3
  import { RigidBodyAutoCollider, Vector3Array, WorldApi } from "./types";
4
- import { ColliderHandle } from "@dimforge/rapier3d-compat";
4
+ import { ColliderHandle, RigidBody, RigidBodyHandle, TempContactManifold } from "@dimforge/rapier3d-compat";
5
5
  import { Object3D } from "three";
6
6
  export interface RapierContext {
7
7
  rapier: typeof Rapier;
@@ -11,8 +11,21 @@ export interface RapierContext {
11
11
  physicsOptions: {
12
12
  colliders: RigidBodyAutoCollider;
13
13
  };
14
+ rigidBodyEvents: EventMap;
14
15
  }
15
16
  export declare const RapierContext: React.Context<RapierContext | undefined>;
17
+ declare type EventMap = Map<ColliderHandle | RigidBodyHandle, {
18
+ onSleep?(): void;
19
+ onWake?(): void;
20
+ onCollisionEnter?({ target, manifold, flipped }: {
21
+ target: RigidBody;
22
+ manifold: TempContactManifold;
23
+ flipped: boolean;
24
+ }): void;
25
+ onCollisionExit?({ target }: {
26
+ target: RigidBody;
27
+ }): void;
28
+ }>;
16
29
  interface RapierWorldProps {
17
30
  gravity?: Vector3Array;
18
31
  colliders?: RigidBodyAutoCollider;
@@ -8,6 +8,8 @@ export declare const createRigidBodyApi: (ref: RefGetter<RigidBody>) => {
8
8
  applyTorqueImpulse({ x, y, z }: Vector3): void;
9
9
  translation(): Vector3;
10
10
  rotation(): Quaternion;
11
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
12
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
11
13
  };
12
14
  export declare const createColliderApi: (ref: RefGetter<Collider>) => {
13
15
  raw: () => Collider | undefined;
@@ -18,7 +20,7 @@ export declare const createWorldApi: (ref: RefGetter<World>) => {
18
20
  getCollider: (handle: number) => Collider;
19
21
  getRigidBody: (handle: number) => RigidBody;
20
22
  createRigidBody: (desc: RigidBodyDesc) => RigidBody;
21
- createCollider: (desc: ColliderDesc, rigidBodyHandle: number) => Collider;
23
+ createCollider: (desc: ColliderDesc, rigidBody: RigidBody) => Collider;
22
24
  removeRigidBody: (rigidBody: RigidBody) => void;
23
25
  removeCollider: (collider: Collider) => void;
24
26
  createImpulseJoint: (params: JointData, rigidBodyA: RigidBody, rigidBodyB: RigidBody) => ImpulseJoint;
@@ -1,10 +1,9 @@
1
1
  import React from "react";
2
2
  import { ReactNode } from "react";
3
3
  import { Vector3 } from "three";
4
- import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RigidBodyAutoCollider, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
4
+ import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
5
5
  interface RigidBodyProps extends UseRigidBodyOptions {
6
6
  children?: ReactNode;
7
- colliders?: RigidBodyAutoCollider | false;
8
7
  }
9
8
  export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<{
10
9
  raw: () => import("@dimforge/rapier3d-compat/dynamics/rigid_body").RigidBody | undefined;
@@ -13,6 +12,8 @@ export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps &
13
12
  applyTorqueImpulse({ x, y, z }: Vector3): void;
14
13
  translation(): Vector3;
15
14
  rotation(): import("three").Quaternion;
15
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
16
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
16
17
  }>>;
17
18
  declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
18
19
  args: T;
@@ -12,6 +12,8 @@ export declare const useRigidBody: <O extends Object3D<import("three").Event>>(o
12
12
  applyTorqueImpulse({ x, y, z }: Vector3): void;
13
13
  translation(): Vector3;
14
14
  rotation(): Quaternion;
15
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
16
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
15
17
  }];
16
18
  export declare const useCollider: <A>(body: RigidBodyApi, options?: UseColliderOptions<A>) => (React.MutableRefObject<Object3D<import("three").Event> | undefined> | {
17
19
  raw: () => Rapier.Collider | undefined;
@@ -24,6 +26,8 @@ export declare const useRigidBodyWithCollider: <A, O extends Object3D<import("th
24
26
  applyTorqueImpulse({ x, y, z }: Vector3): void;
25
27
  translation(): Vector3;
26
28
  rotation(): Quaternion;
29
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
30
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
27
31
  }];
28
32
  export declare const useCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
29
33
  raw: () => Rapier.RigidBody | undefined;
@@ -32,6 +36,8 @@ export declare const useCuboid: <T extends Object3D<import("three").Event>>(rigi
32
36
  applyTorqueImpulse({ x, y, z }: Vector3): void;
33
37
  translation(): Vector3;
34
38
  rotation(): Quaternion;
39
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
40
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
35
41
  }];
36
42
  export declare const useBall: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<BallArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
37
43
  raw: () => Rapier.RigidBody | undefined;
@@ -40,6 +46,8 @@ export declare const useBall: <T extends Object3D<import("three").Event>>(rigidB
40
46
  applyTorqueImpulse({ x, y, z }: Vector3): void;
41
47
  translation(): Vector3;
42
48
  rotation(): Quaternion;
49
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
50
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
43
51
  }];
44
52
  export declare const useCapsule: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CapsuleArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
45
53
  raw: () => Rapier.RigidBody | undefined;
@@ -48,6 +56,8 @@ export declare const useCapsule: <T extends Object3D<import("three").Event>>(rig
48
56
  applyTorqueImpulse({ x, y, z }: Vector3): void;
49
57
  translation(): Vector3;
50
58
  rotation(): Quaternion;
59
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
60
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
51
61
  }];
52
62
  export declare const useHeightfield: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<HeightfieldArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
53
63
  raw: () => Rapier.RigidBody | undefined;
@@ -56,6 +66,8 @@ export declare const useHeightfield: <T extends Object3D<import("three").Event>>
56
66
  applyTorqueImpulse({ x, y, z }: Vector3): void;
57
67
  translation(): Vector3;
58
68
  rotation(): Quaternion;
69
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
70
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
59
71
  }];
60
72
  /**
61
73
  * Create a trimesh collider and rigid body.
@@ -71,6 +83,8 @@ export declare const useTrimesh: {
71
83
  applyTorqueImpulse({ x, y, z }: Vector3): void;
72
84
  translation(): Vector3;
73
85
  rotation(): Quaternion;
86
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
87
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
74
88
  }];
75
89
  fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T_1>, rigidBody: {
76
90
  raw: () => Rapier.RigidBody | undefined;
@@ -79,6 +93,8 @@ export declare const useTrimesh: {
79
93
  applyTorqueImpulse({ x, y, z }: Vector3): void;
80
94
  translation(): Vector3;
81
95
  rotation(): Quaternion;
96
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
97
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
82
98
  }];
83
99
  };
84
100
  export declare const usePolyline: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<PolylineArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
@@ -88,6 +104,8 @@ export declare const usePolyline: <T extends Object3D<import("three").Event>>(ri
88
104
  applyTorqueImpulse({ x, y, z }: Vector3): void;
89
105
  translation(): Vector3;
90
106
  rotation(): Quaternion;
107
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
108
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
91
109
  }];
92
110
  export declare const useRoundCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
93
111
  raw: () => Rapier.RigidBody | undefined;
@@ -96,6 +114,8 @@ export declare const useRoundCuboid: <T extends Object3D<import("three").Event>>
96
114
  applyTorqueImpulse({ x, y, z }: Vector3): void;
97
115
  translation(): Vector3;
98
116
  rotation(): Quaternion;
117
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
118
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
99
119
  }];
100
120
  export declare const useCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
101
121
  raw: () => Rapier.RigidBody | undefined;
@@ -104,6 +124,8 @@ export declare const useCylinder: <T extends Object3D<import("three").Event>>(ri
104
124
  applyTorqueImpulse({ x, y, z }: Vector3): void;
105
125
  translation(): Vector3;
106
126
  rotation(): Quaternion;
127
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
128
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
107
129
  }];
108
130
  export declare const useRoundCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
109
131
  raw: () => Rapier.RigidBody | undefined;
@@ -112,6 +134,8 @@ export declare const useRoundCylinder: <T extends Object3D<import("three").Event
112
134
  applyTorqueImpulse({ x, y, z }: Vector3): void;
113
135
  translation(): Vector3;
114
136
  rotation(): Quaternion;
137
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
138
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
115
139
  }];
116
140
  export declare const useCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConeArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
117
141
  raw: () => Rapier.RigidBody | undefined;
@@ -120,6 +144,8 @@ export declare const useCone: <T extends Object3D<import("three").Event>>(rigidB
120
144
  applyTorqueImpulse({ x, y, z }: Vector3): void;
121
145
  translation(): Vector3;
122
146
  rotation(): Quaternion;
147
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
148
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
123
149
  }];
124
150
  export declare const useRoundCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCone>) => [ref: React.MutableRefObject<T>, rigidBody: {
125
151
  raw: () => Rapier.RigidBody | undefined;
@@ -128,6 +154,8 @@ export declare const useRoundCone: <T extends Object3D<import("three").Event>>(r
128
154
  applyTorqueImpulse({ x, y, z }: Vector3): void;
129
155
  translation(): Vector3;
130
156
  rotation(): Quaternion;
157
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
158
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
131
159
  }];
132
160
  export declare const useConvexHull: {
133
161
  <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexHullArgs>): [ref: React.MutableRefObject<T>, rigidBody: {
@@ -137,6 +165,8 @@ export declare const useConvexHull: {
137
165
  applyTorqueImpulse({ x, y, z }: Vector3): void;
138
166
  translation(): Vector3;
139
167
  rotation(): Quaternion;
168
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
169
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
140
170
  }];
141
171
  fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: Omit<UseColliderOptions<ConvexHullArgs>, "colliderArgs">): [ref: React.MutableRefObject<T_1>, rigidBody: {
142
172
  raw: () => Rapier.RigidBody | undefined;
@@ -145,6 +175,8 @@ export declare const useConvexHull: {
145
175
  applyTorqueImpulse({ x, y, z }: Vector3): void;
146
176
  translation(): Vector3;
147
177
  rotation(): Quaternion;
178
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
179
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
148
180
  }];
149
181
  };
150
182
  export declare const useRoundConvexHull: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexHullArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
@@ -154,6 +186,8 @@ export declare const useRoundConvexHull: <T extends Object3D<import("three").Eve
154
186
  applyTorqueImpulse({ x, y, z }: Vector3): void;
155
187
  translation(): Vector3;
156
188
  rotation(): Quaternion;
189
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
190
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
157
191
  }];
158
192
  export declare const useConvexMesh: {
159
193
  <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexMeshArgs>): [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: {
@@ -163,6 +197,8 @@ export declare const useConvexMesh: {
163
197
  applyTorqueImpulse({ x, y, z }: Vector3): void;
164
198
  translation(): Vector3;
165
199
  rotation(): Quaternion;
200
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
201
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
166
202
  }];
167
203
  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: {
168
204
  raw: () => Rapier.RigidBody | undefined;
@@ -171,6 +207,8 @@ export declare const useConvexMesh: {
171
207
  applyTorqueImpulse({ x, y, z }: Vector3): void;
172
208
  translation(): Vector3;
173
209
  rotation(): Quaternion;
210
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
211
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
174
212
  }];
175
213
  };
176
214
  export declare const useRoundConvexMesh: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexMeshArgs>) => [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: {
@@ -180,6 +218,8 @@ export declare const useRoundConvexMesh: <T extends Object3D<import("three").Eve
180
218
  applyTorqueImpulse({ x, y, z }: Vector3): void;
181
219
  translation(): Vector3;
182
220
  rotation(): Quaternion;
221
+ setNextKinematicRotation({ x, y, z }: Vector3): void;
222
+ setNextKinematicTranslation({ x, y, z }: Vector3): void;
183
223
  }];
184
224
  export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, body2: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, params: Rapier.JointData) => {
185
225
  raw: () => Rapier.ImpulseJoint | undefined;
@@ -1,5 +1,5 @@
1
1
  import { MutableRefObject } from "react";
2
- import { CoefficientCombineRule, RigidBody as RapierRigidBody, Collider as RapierCollider } from "@dimforge/rapier3d-compat";
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
5
  export { CoefficientCombineRule as CoefficientCombineRule, } from "@dimforge/rapier3d-compat";
@@ -162,6 +162,22 @@ export interface UseRigidBodyOptions {
162
162
  * Setting this to false will disable automatic colliders.
163
163
  */
164
164
  colliders?: RigidBodyAutoCollider | false;
165
+ /**
166
+ * Callback when this rigidbody collides with another rigidbody
167
+ */
168
+ onCollisionEnter?({}: {
169
+ target: RapierRigidBody;
170
+ manifold: TempContactManifold;
171
+ flipped: boolean;
172
+ }): void;
173
+ /**
174
+ * Callback when this rigidbody stops colliding with another rigidbody
175
+ */
176
+ onCollisionExit?({}: {
177
+ target: RapierRigidBody;
178
+ }): void;
179
+ onSleep?(): void;
180
+ onWake?(): void;
165
181
  }
166
182
  export declare type SphericalJointParams = [
167
183
  body1Anchor: Vector3Array,
@@ -1,6 +1,6 @@
1
- import { Collider } from "@dimforge/rapier3d-compat";
1
+ import { Collider, RigidBody } from "@dimforge/rapier3d-compat";
2
2
  import { Object3D, Vector3 } from "three";
3
- import { RapierRigidBody, RigidBodyAutoCollider, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, Vector3Array, WorldApi } from "./types";
3
+ import { RigidBodyAutoCollider, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, Vector3Array, WorldApi } from "./types";
4
4
  export declare const vectorArrayToObject: (arr: Vector3Array) => {
5
5
  x: number;
6
6
  y: number;
@@ -8,10 +8,10 @@ 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, rigidBodyHandle: number, scale?: {
11
+ export declare const createColliderFromOptions: <A>(options: UseColliderOptions<A>, world: WorldApi, rigidBody: RigidBody, scale?: {
12
12
  x: number;
13
13
  y: number;
14
14
  z: number;
15
- }) => Collider;
16
- export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RapierRigidBody, type: RigidBodyAutoCollider, world: WorldApi) => Collider[];
15
+ }, hasCollisionEvents?: boolean) => Collider;
16
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBody, type: RigidBodyAutoCollider, world: WorldApi, hasCollisionEvents?: boolean) => Collider[];
17
17
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];