@react-three/rapier 0.6.8 → 0.7.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.
@@ -1,16 +1,29 @@
1
- import { ReactNode } from "react";
1
+ import React, { ReactNode } from "react";
2
2
  import { UseColliderOptions, CuboidArgs, RoundCuboidArgs, BallArgs, CapsuleArgs, HeightfieldArgs, TrimeshArgs, ConeArgs, CylinderArgs, ConvexHullArgs } from "./types";
3
- declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
3
+ export interface ColliderProps extends UseColliderOptions<any> {
4
+ children?: ReactNode;
5
+ }
6
+ export declare const AnyCollider: React.MemoExoticComponent<(props: ColliderProps) => JSX.Element>;
7
+ declare type UseColliderOptionsRequiredArgs<T extends unknown[]> = Omit<UseColliderOptions<T>, "args"> & {
4
8
  args: T;
5
9
  children?: ReactNode;
6
10
  };
7
- export declare const CuboidCollider: (props: UseColliderOptionsRequiredArgs<CuboidArgs>) => JSX.Element;
8
- export declare const RoundCuboidCollider: (props: UseColliderOptionsRequiredArgs<RoundCuboidArgs>) => JSX.Element;
9
- export declare const BallCollider: (props: UseColliderOptionsRequiredArgs<BallArgs>) => JSX.Element;
10
- export declare const CapsuleCollider: (props: UseColliderOptionsRequiredArgs<CapsuleArgs>) => JSX.Element;
11
- export declare const HeightfieldCollider: (props: UseColliderOptionsRequiredArgs<HeightfieldArgs>) => JSX.Element;
12
- export declare const TrimeshCollider: (props: UseColliderOptionsRequiredArgs<TrimeshArgs>) => JSX.Element;
13
- export declare const ConeCollider: (props: UseColliderOptionsRequiredArgs<ConeArgs>) => JSX.Element;
14
- export declare const CylinderCollider: (props: UseColliderOptionsRequiredArgs<CylinderArgs>) => JSX.Element;
15
- export declare const ConvexHullCollider: (props: UseColliderOptionsRequiredArgs<ConvexHullArgs>) => JSX.Element;
11
+ export declare type CuboidColliderProps = UseColliderOptionsRequiredArgs<CuboidArgs>;
12
+ export declare type RoundCuboidColliderProps = UseColliderOptionsRequiredArgs<RoundCuboidArgs>;
13
+ export declare type BallColliderProps = UseColliderOptionsRequiredArgs<BallArgs>;
14
+ export declare type CapsuleColliderProps = UseColliderOptionsRequiredArgs<CapsuleArgs>;
15
+ export declare type HeightfieldColliderProps = UseColliderOptionsRequiredArgs<HeightfieldArgs>;
16
+ export declare type TrimeshColliderProps = UseColliderOptionsRequiredArgs<TrimeshArgs>;
17
+ export declare type ConeColliderProps = UseColliderOptionsRequiredArgs<ConeArgs>;
18
+ export declare type CylinderColliderProps = UseColliderOptionsRequiredArgs<CylinderArgs>;
19
+ export declare type ConvexHullColliderProps = UseColliderOptionsRequiredArgs<ConvexHullArgs>;
20
+ export declare const CuboidCollider: (props: CuboidColliderProps) => JSX.Element;
21
+ export declare const RoundCuboidCollider: (props: RoundCuboidColliderProps) => JSX.Element;
22
+ export declare const BallCollider: (props: BallColliderProps) => JSX.Element;
23
+ export declare const CapsuleCollider: (props: CapsuleColliderProps) => JSX.Element;
24
+ export declare const HeightfieldCollider: (props: HeightfieldColliderProps) => JSX.Element;
25
+ export declare const TrimeshCollider: (props: TrimeshColliderProps) => JSX.Element;
26
+ export declare const ConeCollider: (props: ConeColliderProps) => JSX.Element;
27
+ export declare const CylinderCollider: (props: CylinderColliderProps) => JSX.Element;
28
+ export declare const ConvexHullCollider: (props: ConvexHullColliderProps) => JSX.Element;
16
29
  export {};
@@ -2,9 +2,9 @@ import React from "react";
2
2
  import { InstancedRigidBodyApi } from "./api";
3
3
  import { RigidBodyProps } from "./RigidBody";
4
4
  import { Vector3Array } from "./types";
5
- export interface InstancedRigidBodiesProps extends Omit<RigidBodyProps, "position" | "rotation" | "onCollisionEnter" | "onCollisionExit"> {
5
+ export interface InstancedRigidBodiesProps extends Omit<RigidBodyProps, "position" | "rotation"> {
6
6
  positions?: Vector3Array[];
7
7
  rotations?: Vector3Array[];
8
8
  scales?: Vector3Array[];
9
9
  }
10
- export declare const InstancedRigidBodies: React.ForwardRefExoticComponent<Pick<InstancedRigidBodiesProps, "type" | "canSleep" | "linearDamping" | "angularDamping" | "linearVelocity" | "angularVelocity" | "gravityScale" | "ccd" | "colliders" | "friction" | "restitution" | "onSleep" | "onWake" | "lockRotations" | "lockTranslations" | "enabledRotations" | "enabledTranslations" | "children" | "quaternion" | "attach" | "args" | "key" | "onUpdate" | "up" | "scale" | "matrix" | "layers" | "dispose" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "visible" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onClick" | "onContextMenu" | "onDoubleClick" | "onPointerUp" | "onPointerDown" | "onPointerOver" | "onPointerOut" | "onPointerEnter" | "onPointerLeave" | "onPointerMove" | "onPointerMissed" | "onPointerCancel" | "onWheel" | "positions" | "rotations" | "scales"> & React.RefAttributes<InstancedRigidBodyApi>>;
10
+ export declare const InstancedRigidBodies: React.ForwardRefExoticComponent<InstancedRigidBodiesProps & React.RefAttributes<InstancedRigidBodyApi>>;
@@ -4,5 +4,5 @@ interface MeshColliderProps {
4
4
  children: ReactNode;
5
5
  type: RigidBodyAutoCollider;
6
6
  }
7
- export declare const MeshCollider: ({ children, type }: MeshColliderProps) => JSX.Element;
7
+ export declare const MeshCollider: (props: MeshColliderProps) => JSX.Element;
8
8
  export {};
@@ -1,37 +1,51 @@
1
1
  import React, { FC, ReactNode } from "react";
2
2
  import type Rapier from "@dimforge/rapier3d-compat";
3
- import { RigidBodyAutoCollider, Vector3Array, WorldApi } from "./types";
4
- import { ColliderHandle, RigidBody, RigidBodyHandle, TempContactManifold } from "@dimforge/rapier3d-compat";
3
+ import { CollisionEnterHandler, CollisionExitHandler, IntersectionEnterHandler, IntersectionExitHandler, RigidBodyAutoCollider, Vector3Array, WorldApi } from "./types";
4
+ import { Collider, ColliderHandle, RigidBody, RigidBodyHandle } from "@dimforge/rapier3d-compat";
5
5
  import { Matrix4, Object3D, Vector3 } from "three";
6
+ export interface RigidBodyState {
7
+ rigidBody: RigidBody;
8
+ object: Object3D;
9
+ invertedWorldMatrix: Matrix4;
10
+ setMatrix: (matrix: Matrix4) => void;
11
+ getMatrix: (matrix: Matrix4) => Matrix4;
12
+ /**
13
+ * Required for instanced rigid bodies.
14
+ */
15
+ scale: Vector3;
16
+ isSleeping: boolean;
17
+ }
18
+ export declare type RigidBodyStateMap = Map<RigidBody['handle'], RigidBodyState>;
19
+ export interface ColliderState {
20
+ collider: Collider;
21
+ object: Object3D;
22
+ /**
23
+ * The parent of which this collider needs to base its
24
+ * world position on
25
+ */
26
+ worldParent: Object3D;
27
+ }
28
+ export declare type ColliderStateMap = Map<Collider['handle'], ColliderState>;
6
29
  export interface RapierContext {
7
30
  rapier: typeof Rapier;
8
31
  world: WorldApi;
9
- rigidBodyStates: Map<RigidBodyHandle, {
10
- mesh: Object3D;
11
- isSleeping: boolean;
12
- setMatrix(mat: Matrix4): void;
13
- getMatrix(): Matrix4;
14
- worldScale: Vector3;
15
- invertedMatrixWorld: Matrix4;
16
- }>;
32
+ rigidBodyStates: RigidBodyStateMap;
33
+ colliderStates: ColliderStateMap;
34
+ rigidBodyEvents: EventMap;
35
+ colliderEvents: EventMap;
17
36
  physicsOptions: {
18
37
  colliders: RigidBodyAutoCollider;
19
38
  };
20
- rigidBodyEvents: EventMap;
21
39
  isPaused: boolean;
22
40
  }
23
41
  export declare const RapierContext: React.Context<RapierContext | undefined>;
24
- declare type EventMap = Map<ColliderHandle | RigidBodyHandle, {
42
+ export declare type EventMap = Map<ColliderHandle | RigidBodyHandle, {
25
43
  onSleep?(): void;
26
44
  onWake?(): void;
27
- onCollisionEnter?({ target, manifold, flipped, }: {
28
- target: RigidBody;
29
- manifold: TempContactManifold;
30
- flipped: boolean;
31
- }): void;
32
- onCollisionExit?({ target }: {
33
- target: RigidBody;
34
- }): void;
45
+ onCollisionEnter?: CollisionEnterHandler;
46
+ onCollisionExit?: CollisionExitHandler;
47
+ onIntersectionEnter?: IntersectionEnterHandler;
48
+ onIntersectionExit?: IntersectionExitHandler;
35
49
  }>;
36
50
  interface RapierWorldProps {
37
51
  children: ReactNode;
@@ -54,18 +68,18 @@ interface RapierWorldProps {
54
68
  * @defaultValue 1/60
55
69
  */
56
70
  timeStep?: number;
57
- /**
58
- * Maximum number of fixed steps to take per function call.
59
- *
60
- * @defaultValue 10
61
- */
62
- maxSubSteps?: number;
63
71
  /**
64
72
  * Pause the physics simulation
65
73
  *
66
74
  * @defaultValue false
67
75
  */
68
76
  paused?: boolean;
77
+ /**
78
+ * The update priority at which the physics simulation should run.
79
+ *
80
+ * @defaultValue undefined
81
+ */
82
+ updatePriority?: number;
69
83
  }
70
84
  export declare const Physics: FC<RapierWorldProps>;
71
85
  export {};
@@ -1,23 +1,20 @@
1
1
  import React, { MutableRefObject, RefObject } from "react";
2
2
  import { ReactNode } from "react";
3
3
  import { Object3D } from "three";
4
- import { Object3DProps } from "@react-three/fiber";
5
4
  import { InstancedRigidBodyApi } from "./api";
6
5
  import { InstancedRigidBodiesProps } from "./InstancedRigidBodies";
7
6
  import { RigidBodyApi, UseRigidBodyOptions } from "./types";
8
7
  export declare const RigidBodyContext: React.Context<{
9
8
  ref: RefObject<Object3D> | MutableRefObject<Object3D>;
10
9
  api: RigidBodyApi | InstancedRigidBodyApi;
11
- hasCollisionEvents: boolean;
12
10
  options: UseRigidBodyOptions | InstancedRigidBodiesProps;
13
11
  }>;
14
12
  export declare const useRigidBodyContext: () => {
15
13
  ref: RefObject<Object3D> | MutableRefObject<Object3D>;
16
14
  api: RigidBodyApi | InstancedRigidBodyApi;
17
- hasCollisionEvents: boolean;
18
15
  options: UseRigidBodyOptions | InstancedRigidBodiesProps;
19
16
  };
20
- export interface RigidBodyProps extends UseRigidBodyOptions, Omit<Object3DProps, 'type' | 'position' | 'rotation'> {
17
+ export interface RigidBodyProps extends UseRigidBodyOptions {
21
18
  children?: ReactNode;
22
19
  }
23
- export declare const RigidBody: React.ForwardRefExoticComponent<Pick<RigidBodyProps, "type" | "canSleep" | "linearDamping" | "angularDamping" | "linearVelocity" | "angularVelocity" | "gravityScale" | "ccd" | "position" | "rotation" | "colliders" | "friction" | "restitution" | "onCollisionEnter" | "onCollisionExit" | "onSleep" | "onWake" | "lockRotations" | "lockTranslations" | "enabledRotations" | "enabledTranslations" | "children" | "quaternion" | "attach" | "args" | "key" | "onUpdate" | "up" | "scale" | "matrix" | "layers" | "dispose" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "visible" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onClick" | "onContextMenu" | "onDoubleClick" | "onPointerUp" | "onPointerDown" | "onPointerOver" | "onPointerOut" | "onPointerEnter" | "onPointerLeave" | "onPointerMove" | "onPointerMissed" | "onPointerCancel" | "onWheel"> & React.RefAttributes<import("./api").RigidBodyApi>>;
20
+ export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<import("./api").RigidBodyApi>>;
@@ -0,0 +1,34 @@
1
+ import { InteractionGroups } from "@dimforge/rapier3d-compat";
2
+ /**
3
+ * Calculates an InteractionGroup bitmask for use in the `collisionGroups` or `solverGroups`
4
+ * properties of RigidBody or Collider components. The first argument represents a list of
5
+ * groups the entity is in (expressed as numbers from 0 to 15). The second argument is a list
6
+ * of groups that will be filtered against. When it is omitted, all groups are filtered against.
7
+ *
8
+ * @example
9
+ * A RigidBody that is member of group 0 and will collide with everything from groups 0 and 1:
10
+ *
11
+ * ```tsx
12
+ * <RigidBody collisionGroups={interactionGroups([0], [0, 1])} />
13
+ * ```
14
+ *
15
+ * A RigidBody that is member of groups 0 and 1 and will collide with everything else:
16
+ *
17
+ * ```tsx
18
+ * <RigidBody collisionGroups={interactionGroups([0, 1])} />
19
+ * ```
20
+ *
21
+ * A RigidBody that is member of groups 0 and 1 and will not collide with anything:
22
+ *
23
+ * ```tsx
24
+ * <RigidBody collisionGroups={interactionGroups([0, 1], [])} />
25
+ * ```
26
+ *
27
+ * Please note that Rapier needs interaction filters to evaluate to true between _both_ colliding
28
+ * entities for collision events to trigger.
29
+ *
30
+ * @param memberships Groups the collider is a member of. (Values can range from 0 to 15.)
31
+ * @param filters Groups the interaction group should filter against. (Values can range from 0 to 15.)
32
+ * @returns An InteractionGroup bitmask.
33
+ */
34
+ export declare const interactionGroups: (memberships: number | number[], filters?: number | number[] | undefined) => InteractionGroups;
@@ -4,7 +4,9 @@ import { Object3D } from "three";
4
4
  import type Rapier from "@dimforge/rapier3d-compat";
5
5
  export declare const useRapier: () => RapierContext;
6
6
  import { UseRigidBodyOptions, UseImpulseJoint, SphericalJointParams, FixedJointParams, PrismaticJointParams, RevoluteJointParams, RigidBodyApi, RigidBodyApiRef } from "./types";
7
- export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions) => [React.MutableRefObject<O>, import("./api").RigidBodyApi];
7
+ import { ColliderProps, RigidBodyProps } from ".";
8
+ export declare const useChildColliderProps: <O extends Object3D<import("three").Event>>(ref: React.MutableRefObject<O | null | undefined>, options: RigidBodyProps, ignoreMeshColliders?: boolean) => ColliderProps[];
9
+ export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions) => [React.MutableRefObject<O>, import("./api").RigidBodyApi, ColliderProps[]];
8
10
  export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: RigidBodyApiRef, body2: RigidBodyApiRef, params: Rapier.JointData) => {
9
11
  raw: () => Rapier.ImpulseJoint | undefined;
10
12
  readonly handle: number;
@@ -1,5 +1,8 @@
1
1
  export * from "./types";
2
2
  export type { RigidBodyApi, WorldApi, InstancedRigidBodyApi } from "./api";
3
+ export type { RigidBodyProps } from './RigidBody';
4
+ export type { InstancedRigidBodiesProps } from './InstancedRigidBodies';
5
+ export type { CylinderColliderProps, BallColliderProps, CapsuleColliderProps, ConeColliderProps, ConvexHullColliderProps, CuboidColliderProps, HeightfieldColliderProps, RoundCuboidColliderProps, TrimeshColliderProps } from './AnyCollider';
3
6
  export { Physics } from "./Physics";
4
7
  export { RigidBody } from "./RigidBody";
5
8
  export { MeshCollider } from "./MeshCollider";
@@ -7,3 +10,4 @@ export { Debug } from "./Debug";
7
10
  export { InstancedRigidBodies } from "./InstancedRigidBodies";
8
11
  export * from "./AnyCollider";
9
12
  export * from "./hooks";
13
+ export * from "./bitmasks";
@@ -4,3 +4,6 @@ export declare const _euler: Euler;
4
4
  export declare const _vector3: Vector3;
5
5
  export declare const _object3d: Object3D<import("three").Event>;
6
6
  export declare const _matrix4: Matrix4;
7
+ export declare const _position: Vector3;
8
+ export declare const _rotation: Quaternion;
9
+ export declare const _scale: Vector3;
@@ -1,6 +1,9 @@
1
1
  import { MutableRefObject } from "react";
2
- import { CoefficientCombineRule, Collider as RapierCollider, RigidBody as RapierRigidBody, TempContactManifold } from "@dimforge/rapier3d-compat";
2
+ import { CoefficientCombineRule, Collider as RapierCollider, InteractionGroups, RigidBody as RapierRigidBody, TempContactManifold } from "@dimforge/rapier3d-compat";
3
3
  import { createColliderApi, createJointApi, createRigidBodyApi, createWorldApi } from "./api";
4
+ import { ColliderProps } from ".";
5
+ import { Object3DProps } from "@react-three/fiber";
6
+ import { Object3D } from "three";
4
7
  export { CoefficientCombineRule as CoefficientCombineRule } from "@dimforge/rapier3d-compat";
5
8
  export { RapierRigidBody, RapierCollider };
6
9
  export declare type RefGetter<T> = MutableRefObject<() => T | undefined>;
@@ -66,20 +69,20 @@ export declare type RoundConvexMeshArgs = [
66
69
  ];
67
70
  export declare type UseBodyOptions = Omit<UseRigidBodyOptions, "shape">;
68
71
  export declare type RigidBodyTypeString = "fixed" | "dynamic" | "kinematicPosition" | "kinematicVelocity";
69
- export declare type RigidBodyShape = "cuboid" | "trimesh" | "ball" | "capsule" | "convexHull" | "heightfield" | "polyline" | "roundCuboid" | "cylinder" | "roundCylinder" | "cone" | "roundCone" | "convexMesh" | "roundConvexHull" | "roundConvexMesh";
72
+ export declare type ColliderShape = "cuboid" | "trimesh" | "ball" | "capsule" | "convexHull" | "heightfield" | "polyline" | "roundCuboid" | "cylinder" | "roundCylinder" | "cone" | "roundCone" | "convexMesh" | "roundConvexHull" | "roundConvexMesh";
70
73
  export declare type Vector3Array = [x: number, y: number, z: number];
71
74
  export declare type Boolean3Array = [x: boolean, y: boolean, z: boolean];
72
- export interface UseColliderOptions<ColliderArgs> {
75
+ export interface UseColliderOptions<ColliderArgs extends Array<unknown>> {
73
76
  /**
74
77
  * The shape of your collider
75
78
  */
76
- shape?: RigidBodyShape;
79
+ shape?: ColliderShape;
77
80
  /**
78
81
  * Arguments to pass to the collider
79
82
  */
80
83
  args?: ColliderArgs;
81
84
  /**
82
- * The mass of this rigid body.
85
+ * The mass of this collider.
83
86
  * The mass and density is automatically calculated based on the shape of the collider.
84
87
  * Generally, it's not recommended to adjust the mass properties as it could lead to
85
88
  * unexpected behaviors.
@@ -120,8 +123,68 @@ export interface UseColliderOptions<ColliderArgs> {
120
123
  * The rotation of this collider relative to the rigid body
121
124
  */
122
125
  rotation?: Vector3Array;
126
+ /**
127
+ * The rotation, as a Quaternion, of this collider relative to the rigid body
128
+ */
129
+ quaternion?: Object3DProps['quaternion'];
130
+ /**
131
+ * The scale of this collider relative to the rigid body
132
+ */
133
+ scale?: Object3DProps['scale'];
134
+ /**
135
+ * Callback when this collider collides with another collider.
136
+ */
137
+ onCollisionEnter?: CollisionEnterHandler;
138
+ /**
139
+ * Callback when this collider stops colliding with another collider.
140
+ */
141
+ onCollisionExit?: CollisionExitHandler;
142
+ /**
143
+ * Callback when this collider, or another collider starts intersecting, and at least one of them is a `sensor`.
144
+ */
145
+ onIntersectionEnter?: IntersectionEnterHandler;
146
+ /**
147
+ * Callback when this, or another collider stops intersecting, and at least one of them is a `sensor`.
148
+ */
149
+ onIntersectionExit?: IntersectionExitHandler;
150
+ /**
151
+ * The bit mask configuring the groups and mask for collision handling.
152
+ */
153
+ collisionGroups?: InteractionGroups;
154
+ /**
155
+ * The bit mask configuring the groups and mask for solver handling.
156
+ */
157
+ solverGroups?: InteractionGroups;
158
+ /**
159
+ * Sets the uniform density of this collider.
160
+ */
161
+ density?: number;
162
+ /**
163
+ * Sets whether or not this collider is a sensor.
164
+ */
165
+ sensor?: boolean;
123
166
  }
124
- export interface UseRigidBodyOptions {
167
+ export declare type CollisionEnterPayload = {
168
+ rigidBody?: RapierRigidBody;
169
+ collider: RapierCollider;
170
+ manifold: TempContactManifold;
171
+ flipped: boolean;
172
+ rigidBodyObject?: Object3D;
173
+ colliderObject?: Object3D;
174
+ };
175
+ export declare type CollisionExitPayload = {
176
+ rigidBody?: RapierRigidBody;
177
+ collider: RapierCollider;
178
+ rigidBodyObject?: Object3D;
179
+ colliderObject?: Object3D;
180
+ };
181
+ export declare type IntersectionEnterPayload = CollisionExitPayload;
182
+ export declare type IntersectionExitPayload = CollisionExitPayload;
183
+ export declare type CollisionEnterHandler = (payload: CollisionEnterPayload) => void;
184
+ export declare type CollisionExitHandler = (payload: CollisionExitPayload) => void;
185
+ export declare type IntersectionEnterHandler = (payload: IntersectionEnterPayload) => void;
186
+ export declare type IntersectionExitHandler = (payload: IntersectionExitPayload) => void;
187
+ export interface UseRigidBodyOptions extends ColliderProps {
125
188
  /**
126
189
  * Specify the type of this rigid body
127
190
  */
@@ -134,11 +197,11 @@ export interface UseRigidBodyOptions {
134
197
  linearDamping?: number;
135
198
  /** The angular damping coefficient of this rigid-body.*/
136
199
  angularDamping?: number;
137
- /** The linear velocity of this body.
200
+ /** The initial linear velocity of this body.
138
201
  * default: zero velocity
139
202
  */
140
203
  linearVelocity?: Vector3Array;
141
- /** The angular velocity of this body.
204
+ /** The initial angular velocity of this body.
142
205
  * Default: zero velocity.
143
206
  */
144
207
  angularVelocity?: Vector3Array;
@@ -182,19 +245,15 @@ export interface UseRigidBodyOptions {
182
245
  */
183
246
  restitution?: number;
184
247
  /**
185
- * Callback when this rigidbody collides with another rigidbody
248
+ * The default collision groups bitmask for all colliders in this rigid body.
249
+ * Can be customized per-collider.
186
250
  */
187
- onCollisionEnter?({}: {
188
- target: RapierRigidBody;
189
- manifold: TempContactManifold;
190
- flipped: boolean;
191
- }): void;
251
+ collisionGroups?: InteractionGroups;
192
252
  /**
193
- * Callback when this rigidbody stops colliding with another rigidbody
253
+ * The default solver groups bitmask for all colliders in this rigid body.
254
+ * Can be customized per-collider.
194
255
  */
195
- onCollisionExit?({}: {
196
- target: RapierRigidBody;
197
- }): void;
256
+ solverGroups?: InteractionGroups;
198
257
  onSleep?(): void;
199
258
  onWake?(): void;
200
259
  /**
@@ -213,6 +272,10 @@ export interface UseRigidBodyOptions {
213
272
  * Allow rotation of this rigid-body only along specific axes.
214
273
  */
215
274
  enabledTranslations?: Boolean3Array;
275
+ /**
276
+ * Passed down to the object3d representing this collider.
277
+ */
278
+ userData?: Object3DProps['userData'];
216
279
  }
217
280
  export declare type SphericalJointParams = [
218
281
  body1Anchor: Vector3Array,
@@ -0,0 +1,36 @@
1
+ import { Collider, RigidBody } from "@dimforge/rapier3d-compat";
2
+ import { MutableRefObject } from "react";
3
+ import { Vector3, Object3D, BufferGeometry } from "three";
4
+ import { ColliderProps, RigidBodyProps } from ".";
5
+ import { WorldApi } from "./api";
6
+ import { ColliderState, ColliderStateMap, EventMap } from "./Physics";
7
+ import { ColliderShape, RigidBodyAutoCollider } from "./types";
8
+ export declare const scaleColliderArgs: (shape: ColliderShape, args: (number | ArrayLike<number> | {
9
+ x: number;
10
+ y: number;
11
+ z: number;
12
+ })[], scale: Vector3) => (number | ArrayLike<number> | {
13
+ x: number;
14
+ y: number;
15
+ z: number;
16
+ })[];
17
+ export declare const createColliderFromOptions: (options: ColliderProps, world: WorldApi, scale: Vector3, rigidBody?: RigidBody | undefined) => Collider;
18
+ declare type ImmutableColliderOptions = (keyof ColliderProps)[];
19
+ export declare const immutableColliderOptions: ImmutableColliderOptions;
20
+ export declare const setColliderOptions: (collider: Collider, options: ColliderProps, states: ColliderStateMap) => void;
21
+ export declare const useUpdateColliderOptions: (collidersRef: MutableRefObject<Collider[]>, props: ColliderProps, states: ColliderStateMap) => void;
22
+ export declare const createColliderState: (collider: Collider, object: Object3D, rigidBodyObject?: Object3D<import("three").Event> | null | undefined) => ColliderState;
23
+ interface CreateColliderPropsFromChildren {
24
+ (options: {
25
+ object: Object3D;
26
+ ignoreMeshColliders: boolean;
27
+ options: RigidBodyProps;
28
+ }): ColliderProps[];
29
+ }
30
+ export declare const createColliderPropsFromChildren: CreateColliderPropsFromChildren;
31
+ export declare const getColliderArgsFromGeometry: (geometry: BufferGeometry, colliders: RigidBodyAutoCollider) => {
32
+ args: unknown[];
33
+ offset: Vector3;
34
+ };
35
+ export declare const useColliderEvents: (collidersRef: MutableRefObject<Collider[] | undefined>, props: ColliderProps, events: EventMap) => void;
36
+ export {};
@@ -0,0 +1,20 @@
1
+ import { RigidBody, RigidBodyDesc } from "@dimforge/rapier3d-compat";
2
+ import { MutableRefObject } from "react";
3
+ import { Matrix4, Object3D, Vector3 } from "three";
4
+ import { RigidBodyProps } from ".";
5
+ import { EventMap, RigidBodyState, RigidBodyStateMap } from "./Physics";
6
+ export declare const rigidBodyDescFromOptions: (options: RigidBodyProps) => RigidBodyDesc;
7
+ interface CreateRigidBodyStateOptions {
8
+ object: Object3D;
9
+ rigidBody: RigidBody;
10
+ setMatrix?: (matrix: Matrix4) => void;
11
+ getMatrix?: (matrix: Matrix4) => Matrix4;
12
+ worldScale?: Vector3;
13
+ }
14
+ export declare const createRigidBodyState: ({ rigidBody, object, setMatrix, getMatrix, worldScale }: CreateRigidBodyStateOptions) => RigidBodyState;
15
+ declare type ImmutableRigidBodyOptions = (keyof RigidBodyProps)[];
16
+ export declare const immutableRigidBodyOptions: ImmutableRigidBodyOptions;
17
+ export declare const setRigidBodyOptions: (rigidBody: RigidBody, options: RigidBodyProps, states: RigidBodyStateMap) => void;
18
+ export declare const useUpdateRigidBodyOptions: (rigidBodyRef: MutableRefObject<RigidBody | undefined>, props: RigidBodyProps, states: RigidBodyStateMap) => void;
19
+ export declare const useRigidBodyEvents: (rigidBodyRef: MutableRefObject<RigidBody | undefined>, props: RigidBodyProps, events: EventMap) => void;
20
+ export {};
@@ -1,50 +1,9 @@
1
- import { Collider, ColliderDesc, Quaternion as RapierQuaternion, RigidBody, RigidBodyDesc, Vector3 as RapierVector3 } from "@dimforge/rapier3d-compat";
2
- import { BufferGeometry, Matrix4, Object3D, Quaternion, Vector3 } from "three";
3
- import { RigidBodyApi, RigidBodyAutoCollider, RigidBodyShape, RigidBodyTypeString, UseColliderOptions, UseRigidBodyOptions, Vector3Array, WorldApi } from "./types";
1
+ import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from "@dimforge/rapier3d-compat";
2
+ import { Vector3 } from "three";
3
+ import { RigidBodyTypeString, Vector3Array } from "./types";
4
4
  export declare const vectorArrayToVector3: (arr: Vector3Array) => Vector3;
5
- export declare const vector3ToQuaternion: (v: Vector3) => Quaternion;
5
+ export declare const vector3ToQuaternion: (v: Vector3) => import("three").Quaternion;
6
6
  export declare const rapierVector3ToVector3: ({ x, y, z }: RapierVector3) => Vector3;
7
- export declare const rapierQuaternionToQuaternion: ({ x, y, z, w, }: RapierQuaternion) => Quaternion;
7
+ export declare const rapierQuaternionToQuaternion: ({ x, y, z, w }: RapierQuaternion) => import("three").Quaternion;
8
8
  export declare const rigidBodyTypeFromString: (type: RigidBodyTypeString) => number;
9
- export declare const decomposeMatrix4: (m: Matrix4) => {
10
- position: Vector3;
11
- rotation: Quaternion;
12
- scale: Vector3;
13
- };
14
- export declare const scaleColliderArgs: (shape: RigidBodyShape, args: (number | ArrayLike<number> | {
15
- x: number;
16
- y: number;
17
- z: number;
18
- })[], scale: Vector3) => (number | ArrayLike<number> | {
19
- x: number;
20
- y: number;
21
- z: number;
22
- })[];
23
- interface CreateColliderFromOptions {
24
- <ColliderArgs>(options: {
25
- options: UseColliderOptions<ColliderArgs>;
26
- world: WorldApi;
27
- rigidBody?: RigidBody;
28
- scale: {
29
- x: number;
30
- y: number;
31
- z: number;
32
- };
33
- hasCollisionEvents: boolean;
34
- }): Collider;
35
- }
36
- export declare const createColliderFromOptions: CreateColliderFromOptions;
37
- interface CreateCollidersFromChildren {
38
- (options: {
39
- object: Object3D;
40
- rigidBody?: Pick<RigidBodyApi | RigidBody, "handle">;
41
- options: UseRigidBodyOptions;
42
- world: WorldApi;
43
- ignoreMeshColliders: boolean;
44
- }): Collider[];
45
- }
46
- export declare const createCollidersFromChildren: CreateCollidersFromChildren;
47
- export declare const colliderDescFromGeometry: (geometry: BufferGeometry, colliders: RigidBodyAutoCollider, scale: Vector3, hasCollisionEvents: boolean) => ColliderDesc;
48
9
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];
49
- export declare const rigidBodyDescFromOptions: (options: UseRigidBodyOptions) => RigidBodyDesc;
50
- export {};