@react-three/rapier 0.1.0 → 0.2.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 ADDED
@@ -0,0 +1,31 @@
1
+ # @react-three/rapier
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 584ce08: Expose joint api, however no joint is returned when created (rapier bug?)
8
+
9
+ ### Patch Changes
10
+
11
+ - 584ce08: All parts now uses a more rigid initiation process
12
+ - 584ce08: Apply bounding box offset for auto colliders
13
+ - 584ce08: Use single update loop instead of individual rigid body callbacks
14
+
15
+ ## 0.1.2
16
+
17
+ ### Patch Changes
18
+
19
+ - 4f7440c: fix: make global colliders setting progate to children
20
+
21
+ ## 0.1.1
22
+
23
+ ### Patch Changes
24
+
25
+ - 260e6d1: Fix Physics "colliders" value not being applied in children by default
26
+
27
+ ## 0.1.0
28
+
29
+ ### Minor Changes
30
+
31
+ - First release with base functionality of RigidBodies in Rapier
@@ -1,10 +1,16 @@
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 } 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
+ };
8
14
  }
9
15
  export declare const RapierContext: React.Context<RapierContext | undefined>;
10
16
  interface RapierWorldProps {
@@ -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,22 @@
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, RigidBodyAutoCollider, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
4
5
  interface RigidBodyProps extends UseRigidBodyOptions {
5
6
  children?: ReactNode;
6
7
  colliders?: RigidBodyAutoCollider | false;
7
8
  }
8
- export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<RapierRigidBody>>;
9
+ export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<{
10
+ raw: () => import("@dimforge/rapier3d-compat/dynamics/rigid_body").RigidBody | undefined;
11
+ readonly handle: number;
12
+ applyImpulse({ x, y, z }: Vector3): void;
13
+ applyTorqueImpulse({ x, y, z }: Vector3): void;
14
+ translation(): Vector3;
15
+ rotation(): import("three").Quaternion;
16
+ }>>;
9
17
  declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
10
18
  args: T;
19
+ children?: ReactNode;
11
20
  };
12
21
  export declare const CuboidCollider: (props: UseColliderOptionsRequiredArgs<CuboidArgs>) => JSX.Element;
13
22
  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
2
  import { CoefficientCombineRule, RigidBody as RapierRigidBody, Collider as RapierCollider } 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;
@@ -184,5 +186,9 @@ export declare type RevoluteJointParams = [
184
186
  body2LocalFrame: Vector3Array
185
187
  ];
186
188
  export interface UseImpulseJoint<P> {
187
- (body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: P): void;
189
+ (body1: MutableRefObject<RapierRigidBody | undefined | null>, body2: MutableRefObject<RapierRigidBody | undefined | null>, params: P): JointApi;
188
190
  }
191
+ export declare type RigidBodyApi = ReturnType<typeof createRigidBodyApi>;
192
+ export declare type ColliderApi = ReturnType<typeof createColliderApi>;
193
+ export declare type WorldApi = ReturnType<typeof createWorldApi>;
194
+ 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
15
  }) => Collider;
16
- export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RapierRigidBody, type: RigidBodyAutoCollider, world: World) => Collider[];
16
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RapierRigidBody, type: RigidBodyAutoCollider, world: WorldApi) => Collider[];
17
17
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];