@react-three/rapier 0.5.0 → 0.6.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,10 +1,5 @@
1
- import React from "react";
2
1
  import { ReactNode } from "react";
3
- import { BallArgs, CapsuleArgs, ConeArgs, ConvexHullArgs, CuboidArgs, CylinderArgs, HeightfieldArgs, RoundCuboidArgs, TrimeshArgs, UseColliderOptions, UseRigidBodyOptions } from "./types";
4
- interface RigidBodyProps extends UseRigidBodyOptions {
5
- children?: ReactNode;
6
- }
7
- export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<import("./api").RigidBodyApi>>;
2
+ import { UseColliderOptions, CuboidArgs, RoundCuboidArgs, BallArgs, CapsuleArgs, HeightfieldArgs, TrimeshArgs, ConeArgs, CylinderArgs, ConvexHullArgs } from "./types";
8
3
  declare type UseColliderOptionsRequiredArgs<T> = Omit<UseColliderOptions<T>, "args"> & {
9
4
  args: T;
10
5
  children?: ReactNode;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { InstancedRigidBodyApi } from "./api";
3
+ import { RigidBodyProps } from "./RigidBody";
4
+ import { Vector3Array } from "./types";
5
+ interface InstancedRigidBodiesProps extends Omit<RigidBodyProps, "position" | "rotation" | "onCollisionEnter" | "onCollisionExit"> {
6
+ positions?: Vector3Array[];
7
+ rotations?: Vector3Array[];
8
+ }
9
+ export declare const InstancedRigidBodies: import("react").ForwardRefExoticComponent<InstancedRigidBodiesProps & import("react").RefAttributes<InstancedRigidBodyApi>>;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from "react";
2
+ import { RigidBodyAutoCollider } from "./types";
3
+ interface MeshColliderProps {
4
+ children: ReactNode;
5
+ type: RigidBodyAutoCollider;
6
+ }
7
+ export declare const MeshCollider: ({ children, type }: MeshColliderProps) => JSX.Element;
8
+ export {};
@@ -2,12 +2,18 @@ import React, { FC, ReactNode } from "react";
2
2
  import type Rapier from "@dimforge/rapier3d-compat";
3
3
  import { RigidBodyAutoCollider, Vector3Array, WorldApi } from "./types";
4
4
  import { ColliderHandle, RigidBody, RigidBodyHandle, TempContactManifold } from "@dimforge/rapier3d-compat";
5
- import { Object3D } from "three";
5
+ import { Matrix4, Object3D, Vector3 } from "three";
6
6
  export interface RapierContext {
7
7
  rapier: typeof Rapier;
8
8
  world: WorldApi;
9
9
  colliderMeshes: Map<ColliderHandle, Object3D>;
10
- rigidBodyMeshes: Map<ColliderHandle, Object3D>;
10
+ rigidBodyStates: Map<RigidBodyHandle, {
11
+ mesh: Object3D;
12
+ isSleeping: boolean;
13
+ setMatrix: (mat: Matrix4) => void;
14
+ worldScale: Vector3;
15
+ invertedMatrixWorld: Matrix4;
16
+ }>;
11
17
  physicsOptions: {
12
18
  colliders: RigidBodyAutoCollider;
13
19
  };
@@ -17,7 +23,7 @@ export declare const RapierContext: React.Context<RapierContext | undefined>;
17
23
  declare type EventMap = Map<ColliderHandle | RigidBodyHandle, {
18
24
  onSleep?(): void;
19
25
  onWake?(): void;
20
- onCollisionEnter?({ target, manifold, flipped }: {
26
+ onCollisionEnter?({ target, manifold, flipped, }: {
21
27
  target: RigidBody;
22
28
  manifold: TempContactManifold;
23
29
  flipped: boolean;
@@ -51,7 +57,7 @@ interface RapierWorldProps {
51
57
  *
52
58
  * @defaultValue "vary"
53
59
  */
54
- timeStep?: number | 'vary';
60
+ timeStep?: number | "vary";
55
61
  }
56
62
  export declare const Physics: FC<RapierWorldProps>;
57
63
  export {};
@@ -0,0 +1,14 @@
1
+ import React, { MutableRefObject } from "react";
2
+ import { ReactNode } from "react";
3
+ import { Object3D } from "three";
4
+ import { RigidBodyApi, UseRigidBodyOptions } from "./types";
5
+ export declare const useRigidBodyContext: () => {
6
+ ref: MutableRefObject<Object3D>;
7
+ api: RigidBodyApi;
8
+ hasCollisionEvents: boolean;
9
+ options: UseRigidBodyOptions;
10
+ };
11
+ export interface RigidBodyProps extends UseRigidBodyOptions {
12
+ children?: ReactNode;
13
+ }
14
+ export declare const RigidBody: React.ForwardRefExoticComponent<RigidBodyProps & React.RefAttributes<import("./api").RigidBodyApi>>;
@@ -119,6 +119,15 @@ export interface RigidBodyApi {
119
119
  setEnabledTranslations(x: boolean, y: boolean, z: boolean): void;
120
120
  }
121
121
  export declare const createRigidBodyApi: (ref: RefGetter<RigidBody>) => RigidBodyApi;
122
+ export interface InstancedRigidBodyApi {
123
+ at(index: number): RigidBodyApi;
124
+ get count(): number;
125
+ forEach(callback: (body: RigidBodyApi, index: number, array: RigidBodyApi[]) => void): void;
126
+ }
127
+ export declare const createInstancedRigidBodiesApi: (bodiesGetter: RefGetter<{
128
+ rigidBody: RigidBody;
129
+ api: RigidBodyApi;
130
+ }[]>) => InstancedRigidBodyApi;
122
131
  export declare const createColliderApi: (ref: RefGetter<Collider>) => {
123
132
  raw: () => Collider | undefined;
124
133
  readonly handle: number;
@@ -128,7 +137,7 @@ export interface WorldApi {
128
137
  getCollider(handle: number): Collider | undefined;
129
138
  getRigidBody(handle: number): RigidBody | undefined;
130
139
  createRigidBody(desc: RigidBodyDesc): RigidBody;
131
- createCollider(desc: ColliderDesc, rigidBody: RigidBody): Collider;
140
+ createCollider(desc: ColliderDesc, parent?: RigidBody): Collider;
132
141
  removeRigidBody(rigidBody: RigidBody): void;
133
142
  removeCollider(collider: Collider): void;
134
143
  createImpulseJoint(params: JointData, rigidBodyA: RigidBody, rigidBodyB: RigidBody): ImpulseJoint;
@@ -3,12 +3,8 @@ import { RapierContext } from "./Physics";
3
3
  import { Object3D } from "three";
4
4
  import type Rapier from "@dimforge/rapier3d-compat";
5
5
  export declare const useRapier: () => RapierContext;
6
- import { UseRigidBodyOptions, UseImpulseJoint, SphericalJointParams, FixedJointParams, PrismaticJointParams, RevoluteJointParams, UseColliderOptions, RigidBodyApi, RigidBodyApiRef } from "./types";
6
+ import { UseRigidBodyOptions, UseImpulseJoint, SphericalJointParams, FixedJointParams, PrismaticJointParams, RevoluteJointParams, RigidBodyApi, RigidBodyApiRef } from "./types";
7
7
  export declare const useRigidBody: <O extends Object3D<import("three").Event>>(options?: UseRigidBodyOptions) => [React.MutableRefObject<O>, import("./api").RigidBodyApi];
8
- export declare const useCollider: <A>(body: RigidBodyApi, options?: UseColliderOptions<A>) => (React.MutableRefObject<Object3D<import("three").Event> | undefined> | {
9
- raw: () => Rapier.Collider | undefined;
10
- readonly handle: number;
11
- })[];
12
8
  export declare const useImpulseJoint: <T extends Rapier.ImpulseJoint>(body1: RigidBodyApiRef, body2: RigidBodyApiRef, params: Rapier.JointData) => {
13
9
  raw: () => Rapier.ImpulseJoint | undefined;
14
10
  readonly handle: number;
@@ -1,5 +1,9 @@
1
+ export * from "./types";
2
+ export type { RigidBodyApi, WorldApi, InstancedRigidBodyApi } from "./api";
1
3
  export { Physics } from "./Physics";
4
+ export { RigidBody } from "./RigidBody";
5
+ export { MeshCollider } from "./MeshCollider";
6
+ export { Debug } from "./Debug";
7
+ export { InstancedRigidBodies } from "./InstancedRigidBodies";
8
+ export * from "./AnyCollider";
2
9
  export * from "./hooks";
3
- export * from "./components";
4
- export * from "./Debug";
5
- export * from "./types";
@@ -0,0 +1,6 @@
1
+ import { Euler, Matrix4, Object3D, Quaternion, Vector3 } from "three";
2
+ export declare const _quaternion: Quaternion;
3
+ export declare const _euler: Euler;
4
+ export declare const _vector3: Vector3;
5
+ export declare const _object3d: Object3D<import("three").Event>;
6
+ export declare const _matrix4: Matrix4;
@@ -2,9 +2,9 @@ import { MutableRefObject } from "react";
2
2
  import { CoefficientCombineRule, RigidBody as RapierRigidBody, Collider as RapierCollider, TempContactManifold } from "@dimforge/rapier3d-compat";
3
3
  import { createColliderApi, createJointApi, createRigidBodyApi, createWorldApi } from "./api";
4
4
  export { RapierRigidBody, RapierCollider };
5
- export { CoefficientCombineRule as CoefficientCombineRule, } from "@dimforge/rapier3d-compat";
5
+ export { CoefficientCombineRule as CoefficientCombineRule } from "@dimforge/rapier3d-compat";
6
6
  export declare type RefGetter<T> = MutableRefObject<() => T | undefined>;
7
- export declare type RigidBodyAutoCollider = 'ball' | 'cuboid' | 'hull' | 'trimesh' | false;
7
+ export declare type RigidBodyAutoCollider = "ball" | "cuboid" | "hull" | "trimesh" | false;
8
8
  export interface UseRigidBodyAPI {
9
9
  rigidBody: RapierRigidBody;
10
10
  collider: RapierCollider;
@@ -65,7 +65,7 @@ export declare type RigidBodyTypeString = "fixed" | "dynamic" | "kinematicPositi
65
65
  export declare type RigidBodyShape = "cuboid" | "trimesh" | "ball" | "capsule" | "convexHull" | "heightfield" | "polyline" | "roundCuboid" | "cylinder" | "roundCylinder" | "cone" | "roundCone" | "convexMesh" | "roundConvexHull" | "roundConvexMesh";
66
66
  export declare type Vector3Array = [x: number, y: number, z: number];
67
67
  export declare type Boolean3Array = [x: boolean, y: boolean, z: boolean];
68
- export interface UseColliderOptions<A> {
68
+ export interface UseColliderOptions<ColliderArgs> {
69
69
  /**
70
70
  * The shape of your collider
71
71
  */
@@ -73,7 +73,7 @@ export interface UseColliderOptions<A> {
73
73
  /**
74
74
  * Arguments to pass to the collider
75
75
  */
76
- args?: A;
76
+ args?: ColliderArgs;
77
77
  /**
78
78
  * The mass of this rigid body.
79
79
  * The mass and density is automatically calculated based on the shape of the collider.
@@ -1,18 +1,37 @@
1
- import { Collider, RigidBody } from "@dimforge/rapier3d-compat";
2
- import { Object3D, Quaternion, Vector3 } from "three";
3
- import { RigidBodyShape, RigidBodyTypeString, UseColliderOptions, UseRigidBodyOptions, Vector3Array, WorldApi } from "./types";
1
+ import { Collider, ColliderDesc, RigidBody, RigidBodyDesc, Vector3 as RapierVector3, Quaternion as RapierQuaternion } 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";
4
4
  export declare const vectorArrayToObject: (arr: Vector3Array) => {
5
5
  x: number;
6
6
  y: number;
7
7
  z: number;
8
8
  };
9
+ export declare const vector3ToQuaternion: (v: Vector3) => Quaternion;
10
+ export declare const rapierVector3ToVector3: ({ x, y, z }: RapierVector3) => Vector3;
11
+ export declare const rapierQuaternionToQuaternion: ({ x, y, z, w, }: RapierQuaternion) => Quaternion;
9
12
  export declare const rigidBodyTypeFromString: (type: RigidBodyTypeString) => number;
13
+ export declare const decomposeMatrix4: (m: Matrix4) => {
14
+ position: Vector3;
15
+ rotation: Quaternion;
16
+ scale: Vector3;
17
+ };
10
18
  export declare const scaleColliderArgs: (shape: RigidBodyShape, args: (number | ArrayLike<number>)[], scale: Vector3) => (number | ArrayLike<number>)[];
11
- export declare const createColliderFromOptions: <A>(options: UseColliderOptions<A>, world: WorldApi, rigidBody: RigidBody, scale?: {
12
- x: number;
13
- y: number;
14
- z: number;
15
- }, hasCollisionEvents?: boolean) => Collider;
16
- export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBody, options: UseRigidBodyOptions, world: WorldApi) => Collider[];
19
+ interface CreateColliderFromOptions {
20
+ <ColliderArgs>(options: {
21
+ options: UseColliderOptions<ColliderArgs>;
22
+ world: WorldApi;
23
+ rigidBody?: RigidBody;
24
+ scale: {
25
+ x: number;
26
+ y: number;
27
+ z: number;
28
+ };
29
+ hasCollisionEvents: boolean;
30
+ }): Collider;
31
+ }
32
+ export declare const createColliderFromOptions: CreateColliderFromOptions;
33
+ export declare const createCollidersFromChildren: (object: Object3D, rigidBody: RigidBodyApi | RigidBody, options: UseRigidBodyOptions, world: WorldApi, ignoreMeshColliders?: boolean) => Collider[];
34
+ export declare const colliderDescFromGeometry: (geometry: BufferGeometry, colliders: RigidBodyAutoCollider, scale: Vector3, hasCollisionEvents: boolean) => ColliderDesc;
17
35
  export declare const scaleVertices: (vertices: ArrayLike<number>, scale: Vector3) => number[];
18
- export declare const vector3ToQuaternion: (v: Vector3) => Quaternion;
36
+ export declare const rigidBodyDescFromOptions: (options: UseRigidBodyOptions) => RigidBodyDesc;
37
+ export {};