@react-three/rapier 0.1.1 → 0.3.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,29 @@
1
1
  # @react-three/rapier
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 7e36172: Add collision and sleep/awake events
8
+
9
+ ## 0.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 584ce08: Expose joint api, however no joint is returned when created (rapier bug?)
14
+
15
+ ### Patch Changes
16
+
17
+ - 584ce08: All parts now uses a more rigid initiation process
18
+ - 584ce08: Apply bounding box offset for auto colliders
19
+ - 584ce08: Use single update loop instead of individual rigid body callbacks
20
+
21
+ ## 0.1.2
22
+
23
+ ### Patch Changes
24
+
25
+ - 4f7440c: fix: make global colliders setting progate to children
26
+
3
27
  ## 0.1.1
4
28
 
5
29
  ### Patch Changes
@@ -1,12 +1,31 @@
1
1
  import React, { FC, ReactNode } from "react";
2
2
  import type Rapier from "@dimforge/rapier3d-compat";
3
- import { RigidBodyAutoCollider, Vector3Array } from "./types";
3
+ import { RigidBodyAutoCollider, Vector3Array, WorldApi } from "./types";
4
+ import { ColliderHandle, RigidBody, RigidBodyHandle, TempContactManifold } from "@dimforge/rapier3d-compat";
5
+ import { Object3D } from "three";
4
6
  export interface RapierContext {
5
- RAPIER: typeof Rapier;
6
- world: Rapier.World;
7
- stepFuncs: Array<() => void>;
7
+ rapier: typeof Rapier;
8
+ world: WorldApi;
9
+ colliderMeshes: Map<ColliderHandle, Object3D>;
10
+ rigidBodyMeshes: Map<ColliderHandle, Object3D>;
11
+ physicsOptions: {
12
+ colliders: RigidBodyAutoCollider;
13
+ };
14
+ rigidBodyEvents: EventMap;
8
15
  }
9
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
+ }>;
10
29
  interface RapierWorldProps {
11
30
  gravity?: Vector3Array;
12
31
  colliders?: RigidBodyAutoCollider;
@@ -0,0 +1,33 @@
1
+ import { Collider, ColliderDesc, ImpulseJoint, JointData, RigidBody, RigidBodyDesc, World } from "@dimforge/rapier3d-compat";
2
+ import { Quaternion, Vector3 } from "three";
3
+ import { RefGetter } from "./types";
4
+ export declare const createRigidBodyApi: (ref: RefGetter<RigidBody>) => {
5
+ raw: () => RigidBody | undefined;
6
+ readonly handle: number;
7
+ applyImpulse({ x, y, z }: Vector3): void;
8
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
9
+ translation(): Vector3;
10
+ rotation(): Quaternion;
11
+ };
12
+ export declare const createColliderApi: (ref: RefGetter<Collider>) => {
13
+ raw: () => Collider | undefined;
14
+ readonly handle: number;
15
+ };
16
+ export declare const createWorldApi: (ref: RefGetter<World>) => {
17
+ raw: () => World | undefined;
18
+ getCollider: (handle: number) => Collider;
19
+ getRigidBody: (handle: number) => RigidBody;
20
+ createRigidBody: (desc: RigidBodyDesc) => RigidBody;
21
+ createCollider: (desc: ColliderDesc, rigidBodyHandle: number) => Collider;
22
+ removeRigidBody: (rigidBody: RigidBody) => void;
23
+ removeCollider: (collider: Collider) => void;
24
+ createImpulseJoint: (params: JointData, rigidBodyA: RigidBody, rigidBodyB: RigidBody) => ImpulseJoint;
25
+ removeImpulseJoint: (joint: ImpulseJoint) => void;
26
+ forEachCollider: (callback: (collider: Collider) => void) => void;
27
+ };
28
+ export declare const createJointApi: (ref: RefGetter<ImpulseJoint>) => {
29
+ raw: () => ImpulseJoint | undefined;
30
+ readonly handle: number;
31
+ configureMotorPosition: (targetPos: number, stiffness: number, damping: number) => void;
32
+ configureMotorVelocity: (targetVel: number, damping: number) => void;
33
+ };
@@ -1,13 +1,21 @@
1
1
  import React from "react";
2
2
  import { ReactNode } from "react";
3
- import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RapierRigidBody, RigidBodyAutoCollider, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
3
+ import { Vector3 } from "three";
4
+ import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
4
5
  interface RigidBodyProps extends UseRigidBodyOptions {
5
6
  children?: ReactNode;
6
- colliders?: RigidBodyAutoCollider | false;
7
7
  }
8
- export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<RapierRigidBody>>;
8
+ export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<{
9
+ raw: () => import("@dimforge/rapier3d-compat/dynamics/rigid_body").RigidBody | undefined;
10
+ readonly handle: number;
11
+ applyImpulse({ x, y, z }: Vector3): void;
12
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
13
+ translation(): Vector3;
14
+ rotation(): import("three").Quaternion;
15
+ }>>;
9
16
  declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
10
17
  args: T;
18
+ children?: ReactNode;
11
19
  };
12
20
  export declare const CuboidCollider: (props: UseColliderOptionsRequiredArgs<CuboidArgs>) => JSX.Element;
13
21
  export declare const RoundCuboidCollider: (props: UseColliderOptionsRequiredArgs<RoundCuboidArgs>) => JSX.Element;
@@ -1,17 +1,62 @@
1
1
  import React, { MutableRefObject } from "react";
2
2
  import { RapierContext } from "./Physics";
3
- import { Mesh, Object3D } from "three";
3
+ import { Mesh, Object3D, Quaternion, Vector3 } 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 } from "./types";
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
7
  import { RoundCone } from "@dimforge/rapier3d-compat";
8
- export declare const useCollider: <A>(body: RapierRigidBody, options?: UseColliderOptions<A>) => Rapier.Collider[];
9
- export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions | undefined) => [React.MutableRefObject<O>, Rapier.RigidBody];
10
- 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: Rapier.RigidBody];
11
- export declare const useCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
12
- export declare const useBall: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<BallArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
13
- export declare const useCapsule: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CapsuleArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
14
- export declare const useHeightfield: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<HeightfieldArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
8
+ export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions) => [React.MutableRefObject<O>, {
9
+ raw: () => Rapier.RigidBody | undefined;
10
+ readonly handle: number;
11
+ applyImpulse({ x, y, z }: Vector3): void;
12
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
13
+ translation(): Vector3;
14
+ rotation(): Quaternion;
15
+ }];
16
+ export declare const useCollider: <A>(body: RigidBodyApi, options?: UseColliderOptions<A>) => (React.MutableRefObject<Object3D<import("three").Event> | undefined> | {
17
+ raw: () => Rapier.Collider | undefined;
18
+ readonly handle: number;
19
+ })[];
20
+ 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: {
21
+ raw: () => Rapier.RigidBody | undefined;
22
+ readonly handle: number;
23
+ applyImpulse({ x, y, z }: Vector3): void;
24
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
25
+ translation(): Vector3;
26
+ rotation(): Quaternion;
27
+ }];
28
+ export declare const useCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
29
+ raw: () => Rapier.RigidBody | undefined;
30
+ readonly handle: number;
31
+ applyImpulse({ x, y, z }: Vector3): void;
32
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
33
+ translation(): Vector3;
34
+ rotation(): Quaternion;
35
+ }];
36
+ export declare const useBall: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<BallArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
37
+ raw: () => Rapier.RigidBody | undefined;
38
+ readonly handle: number;
39
+ applyImpulse({ x, y, z }: Vector3): void;
40
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
41
+ translation(): Vector3;
42
+ rotation(): Quaternion;
43
+ }];
44
+ export declare const useCapsule: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CapsuleArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
45
+ raw: () => Rapier.RigidBody | undefined;
46
+ readonly handle: number;
47
+ applyImpulse({ x, y, z }: Vector3): void;
48
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
49
+ translation(): Vector3;
50
+ rotation(): Quaternion;
51
+ }];
52
+ export declare const useHeightfield: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<HeightfieldArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
53
+ raw: () => Rapier.RigidBody | undefined;
54
+ readonly handle: number;
55
+ applyImpulse({ x, y, z }: Vector3): void;
56
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
57
+ translation(): Vector3;
58
+ rotation(): Quaternion;
59
+ }];
15
60
  /**
16
61
  * Create a trimesh collider and rigid body.
17
62
  * Note that Trimeshes don't have mass unless provided.
@@ -19,26 +64,129 @@ export declare const useHeightfield: <T extends Object3D<import("three").Event>>
19
64
  * for available properties.
20
65
  */
21
66
  export declare const useTrimesh: {
22
- <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
23
- fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T_1>, rigidBody: Rapier.RigidBody];
67
+ <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T>, rigidBody: {
68
+ raw: () => Rapier.RigidBody | undefined;
69
+ readonly handle: number;
70
+ applyImpulse({ x, y, z }: Vector3): void;
71
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
72
+ translation(): Vector3;
73
+ rotation(): Quaternion;
74
+ }];
75
+ fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<TrimeshArgs>): [ref: React.MutableRefObject<T_1>, rigidBody: {
76
+ raw: () => Rapier.RigidBody | undefined;
77
+ readonly handle: number;
78
+ applyImpulse({ x, y, z }: Vector3): void;
79
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
80
+ translation(): Vector3;
81
+ rotation(): Quaternion;
82
+ }];
24
83
  };
25
- export declare const usePolyline: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<PolylineArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
26
- export declare const useRoundCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
27
- export declare const useCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
28
- export declare const useRoundCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
29
- export declare const useCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConeArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
30
- export declare const useRoundCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCone>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
84
+ export declare const usePolyline: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<PolylineArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
85
+ raw: () => Rapier.RigidBody | undefined;
86
+ readonly handle: number;
87
+ applyImpulse({ x, y, z }: Vector3): void;
88
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
89
+ translation(): Vector3;
90
+ rotation(): Quaternion;
91
+ }];
92
+ export declare const useRoundCuboid: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCuboidArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
93
+ raw: () => Rapier.RigidBody | undefined;
94
+ readonly handle: number;
95
+ applyImpulse({ x, y, z }: Vector3): void;
96
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
97
+ translation(): Vector3;
98
+ rotation(): Quaternion;
99
+ }];
100
+ export declare const useCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<CylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
101
+ raw: () => Rapier.RigidBody | undefined;
102
+ readonly handle: number;
103
+ applyImpulse({ x, y, z }: Vector3): void;
104
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
105
+ translation(): Vector3;
106
+ rotation(): Quaternion;
107
+ }];
108
+ export declare const useRoundCylinder: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCylinderArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
109
+ raw: () => Rapier.RigidBody | undefined;
110
+ readonly handle: number;
111
+ applyImpulse({ x, y, z }: Vector3): void;
112
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
113
+ translation(): Vector3;
114
+ rotation(): Quaternion;
115
+ }];
116
+ export declare const useCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConeArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
117
+ raw: () => Rapier.RigidBody | undefined;
118
+ readonly handle: number;
119
+ applyImpulse({ x, y, z }: Vector3): void;
120
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
121
+ translation(): Vector3;
122
+ rotation(): Quaternion;
123
+ }];
124
+ export declare const useRoundCone: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundCone>) => [ref: React.MutableRefObject<T>, rigidBody: {
125
+ raw: () => Rapier.RigidBody | undefined;
126
+ readonly handle: number;
127
+ applyImpulse({ x, y, z }: Vector3): void;
128
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
129
+ translation(): Vector3;
130
+ rotation(): Quaternion;
131
+ }];
31
132
  export declare const useConvexHull: {
32
- <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexHullArgs>): [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
33
- fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: Omit<UseColliderOptions<ConvexHullArgs>, "colliderArgs">): [ref: React.MutableRefObject<T_1>, rigidBody: Rapier.RigidBody];
133
+ <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexHullArgs>): [ref: React.MutableRefObject<T>, rigidBody: {
134
+ raw: () => Rapier.RigidBody | undefined;
135
+ readonly handle: number;
136
+ applyImpulse({ x, y, z }: Vector3): void;
137
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
138
+ translation(): Vector3;
139
+ rotation(): Quaternion;
140
+ }];
141
+ fromMesh<T_1 extends Object3D<import("three").Event>>(mesh: Mesh, rigidBodyOptions?: UseBodyOptions, colliderOptions?: Omit<UseColliderOptions<ConvexHullArgs>, "colliderArgs">): [ref: React.MutableRefObject<T_1>, rigidBody: {
142
+ raw: () => Rapier.RigidBody | undefined;
143
+ readonly handle: number;
144
+ applyImpulse({ x, y, z }: Vector3): void;
145
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
146
+ translation(): Vector3;
147
+ rotation(): Quaternion;
148
+ }];
34
149
  };
35
- export declare const useRoundConvexHull: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexHullArgs>) => [ref: React.MutableRefObject<T>, rigidBody: Rapier.RigidBody];
150
+ export declare const useRoundConvexHull: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexHullArgs>) => [ref: React.MutableRefObject<T>, rigidBody: {
151
+ raw: () => Rapier.RigidBody | undefined;
152
+ readonly handle: number;
153
+ applyImpulse({ x, y, z }: Vector3): void;
154
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
155
+ translation(): Vector3;
156
+ rotation(): Quaternion;
157
+ }];
36
158
  export declare const useConvexMesh: {
37
- <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexMeshArgs>): [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: Rapier.RigidBody];
38
- 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: Rapier.RigidBody];
159
+ <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<ConvexMeshArgs>): [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: {
160
+ raw: () => Rapier.RigidBody | undefined;
161
+ readonly handle: number;
162
+ applyImpulse({ x, y, z }: Vector3): void;
163
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
164
+ translation(): Vector3;
165
+ rotation(): Quaternion;
166
+ }];
167
+ 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
+ raw: () => Rapier.RigidBody | undefined;
169
+ readonly handle: number;
170
+ applyImpulse({ x, y, z }: Vector3): void;
171
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
172
+ translation(): Vector3;
173
+ rotation(): Quaternion;
174
+ }];
175
+ };
176
+ export declare const useRoundConvexMesh: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexMeshArgs>) => [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: {
177
+ raw: () => Rapier.RigidBody | undefined;
178
+ readonly handle: number;
179
+ applyImpulse({ x, y, z }: Vector3): void;
180
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
181
+ translation(): Vector3;
182
+ rotation(): Quaternion;
183
+ }];
184
+ export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, body2: MutableRefObject<RapierRigidBody | undefined | null> | RigidBodyApi, params: Rapier.JointData) => {
185
+ raw: () => Rapier.ImpulseJoint | undefined;
186
+ readonly handle: number;
187
+ configureMotorPosition: (targetPos: number, stiffness: number, damping: number) => void;
188
+ configureMotorVelocity: (targetVel: number, damping: number) => void;
39
189
  };
40
- export declare const useRoundConvexMesh: <T extends Object3D<import("three").Event>>(rigidBodyOptions?: UseBodyOptions, colliderOptions?: UseColliderOptions<RoundConvexMeshArgs>) => [ref: React.MutableRefObject<Object3D<import("three").Event>>, rigidBody: Rapier.RigidBody];
41
- export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: Rapier.JointData) => void;
42
190
  /**
43
191
  *
44
192
  * A fixed joint ensures that two rigid-bodies don't move relative to each other.
@@ -1,5 +1,5 @@
1
1
  export { Physics } from "./Physics";
2
2
  export * from "./hooks";
3
- export * from "./types";
4
3
  export * from "./components";
5
4
  export * from "./Debug";
5
+ export * from "./types";
@@ -1,7 +1,9 @@
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
+ import { createColliderApi, createJointApi, createRigidBodyApi, createWorldApi } from "./api";
3
4
  export { RapierRigidBody, RapierCollider };
4
5
  export { CoefficientCombineRule as CoefficientCombineRule, } from "@dimforge/rapier3d-compat";
6
+ export declare type RefGetter<T> = MutableRefObject<() => T | undefined>;
5
7
  export declare type RigidBodyAutoCollider = 'ball' | 'cuboid' | 'hull' | 'trimesh' | false;
6
8
  export interface UseRigidBodyAPI {
7
9
  rigidBody: RapierRigidBody;
@@ -160,6 +162,22 @@ export interface UseRigidBodyOptions {
160
162
  * Setting this to false will disable automatic colliders.
161
163
  */
162
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;
163
181
  }
164
182
  export declare type SphericalJointParams = [
165
183
  body1Anchor: Vector3Array,
@@ -184,5 +202,9 @@ export declare type RevoluteJointParams = [
184
202
  body2LocalFrame: Vector3Array
185
203
  ];
186
204
  export interface UseImpulseJoint<P> {
187
- (body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: P): void;
205
+ (body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: P): JointApi;
188
206
  }
207
+ export declare type RigidBodyApi = ReturnType<typeof createRigidBodyApi>;
208
+ export declare type ColliderApi = ReturnType<typeof createColliderApi>;
209
+ export declare type WorldApi = ReturnType<typeof createWorldApi>;
210
+ export declare type JointApi = ReturnType<typeof createJointApi>;
@@ -1,6 +1,6 @@
1
- import { Collider, World } from "@dimforge/rapier3d-compat";
1
+ import { Collider } from "@dimforge/rapier3d-compat";
2
2
  import { Object3D, Vector3 } from "three";
3
- import { RapierRigidBody, RigidBodyAutoCollider, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, Vector3Array } from "./types";
3
+ import { RapierRigidBody, 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: World, body: RapierRigidBody, scale?: {
11
+ export declare const createColliderFromOptions: <A>(options: UseColliderOptions<A>, world: WorldApi, rigidBodyHandle: number, 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: World) => Collider[];
15
+ }, hasCollisionEvents?: boolean) => Collider;
16
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RapierRigidBody, type: RigidBodyAutoCollider, world: WorldApi, hasCollisionEvents?: boolean) => Collider[];
17
17
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];