@threlte/rapier 0.5.0 → 1.0.0-next.1

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.
Files changed (53) hide show
  1. package/dist/CHANGELOG.md +12 -0
  2. package/dist/components/Attractor/Attractor.svelte +17 -13
  3. package/dist/components/Attractor/Attractor.svelte.d.ts +20 -22
  4. package/dist/components/Colliders/AutoColliders.svelte +52 -50
  5. package/dist/components/Colliders/AutoColliders.svelte.d.ts +80 -0
  6. package/dist/components/Colliders/Collider.svelte +40 -30
  7. package/dist/components/Colliders/Collider.svelte.d.ts +110 -112
  8. package/dist/components/CollisionGroups/CollisionGroups.svelte +1 -20
  9. package/dist/components/CollisionGroups/CollisionGroups.svelte.d.ts +29 -19
  10. package/dist/components/Debug/Debug.svelte +13 -10
  11. package/dist/components/Debug/Debug.svelte.d.ts +6 -60
  12. package/dist/components/RigidBody/RigidBody.svelte +23 -58
  13. package/dist/components/RigidBody/RigidBody.svelte.d.ts +94 -67
  14. package/dist/components/World/InnerWorld.svelte +11 -7
  15. package/dist/components/World/InnerWorld.svelte.d.ts +15 -15
  16. package/dist/components/World/World.svelte +13 -2
  17. package/dist/components/World/World.svelte.d.ts +36 -32
  18. package/dist/hooks/useFixedJoint.d.ts +2 -2
  19. package/dist/hooks/useFixedJoint.js +6 -3
  20. package/dist/hooks/useFrameHandler.d.ts +1 -1
  21. package/dist/hooks/useFrameHandler.js +9 -8
  22. package/dist/hooks/usePrismaticJoint.d.ts +2 -2
  23. package/dist/hooks/usePrismaticJoint.js +5 -2
  24. package/dist/hooks/useRevoluteJoint.d.ts +2 -2
  25. package/dist/hooks/useRevoluteJoint.js +5 -2
  26. package/dist/hooks/useSphericalJoint.d.ts +2 -2
  27. package/dist/hooks/useSphericalJoint.js +4 -2
  28. package/dist/index.d.ts +2 -1
  29. package/dist/index.js +2 -0
  30. package/dist/lib/applyTransforms.d.ts +2 -3
  31. package/dist/lib/applyTransforms.js +7 -16
  32. package/dist/lib/computeBitMask.d.ts +5 -0
  33. package/dist/lib/computeBitMask.js +20 -0
  34. package/dist/lib/createRapierContext.d.ts +3 -0
  35. package/dist/lib/createRapierContext.js +10 -1
  36. package/dist/lib/eulerToQuaternion.d.ts +7 -0
  37. package/dist/lib/eulerToQuaternion.js +12 -0
  38. package/dist/lib/scaleColliderArgs.js +3 -3
  39. package/dist/recipes/BasicPlayerController.svelte +28 -27
  40. package/dist/recipes/BasicPlayerController.svelte.d.ts +2 -5
  41. package/dist/types/components.d.ts +1 -88
  42. package/dist/types/types.d.ts +5 -5
  43. package/package.json +10 -9
  44. package/dist/components/Joints/RevoluteJoint.svelte +0 -5
  45. package/dist/components/Joints/RevoluteJoint.svelte.d.ts +0 -23
  46. package/dist/lib/positionToVector3.d.ts +0 -3
  47. package/dist/lib/positionToVector3.js +0 -8
  48. package/dist/lib/rotationToEuler.d.ts +0 -3
  49. package/dist/lib/rotationToEuler.js +0 -8
  50. package/dist/lib/rotationToQuaternion.d.ts +0 -3
  51. package/dist/lib/rotationToQuaternion.js +0 -10
  52. package/dist/lib/scaleToVector3.d.ts +0 -3
  53. package/dist/lib/scaleToVector3.js +0 -16
@@ -1,114 +1,112 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- import { CoefficientCombineRule, Collider, ColliderDesc, type RigidBody } from '@dimforge/rapier3d-compat';
3
- import { type Position, type Rotation } from '@threlte/core';
4
- declare class __sveltets_Render<Shape extends 'ball' | 'capsule' | 'segment' | 'triangle' | 'roundTriangle' | 'polyline' | 'trimesh' | 'cuboid' | 'roundCuboid' | 'heightfield' | 'cylinder' | 'roundCylinder' | 'cone' | 'roundCone' | 'convexHull' | 'convexMesh' | 'roundConvexHull' | 'roundConvexMesh', Args extends Parameters<typeof ColliderDesc[Shape]>, Density extends number | undefined, Mass extends Density extends undefined ? number | undefined : undefined, MassProperties extends Density extends undefined ? Mass extends undefined ? {
5
- mass: number;
6
- centerOfMass: Position;
7
- principalAngularInertia: Position;
8
- angularInertiaLocalFrame: Rotation;
9
- } : undefined : undefined> {
10
- props(): {
11
- shape: Shape;
12
- args: Args;
13
- position?: Position | undefined;
14
- rotation?: Rotation | undefined;
15
- scale?: import("@threlte/core").Scale | undefined;
16
- lookAt?: import("@threlte/core").LookAt | undefined;
17
- restitution?: number | undefined;
18
- restitutionCombineRule?: CoefficientCombineRule | undefined;
19
- friction?: number | undefined;
20
- frictionCombineRule?: CoefficientCombineRule | undefined;
21
- sensor?: boolean | undefined;
22
- collider?: Collider | undefined;
23
- contactForceEventThreshold?: number | undefined;
24
- density?: Density | undefined;
25
- } | {
26
- shape: Shape;
27
- args: Args;
28
- position?: Position | undefined;
29
- rotation?: Rotation | undefined;
30
- scale?: import("@threlte/core").Scale | undefined;
31
- lookAt?: import("@threlte/core").LookAt | undefined;
32
- restitution?: number | undefined;
33
- restitutionCombineRule?: CoefficientCombineRule | undefined;
34
- friction?: number | undefined;
35
- frictionCombineRule?: CoefficientCombineRule | undefined;
36
- sensor?: boolean | undefined;
37
- collider?: Collider | undefined;
38
- contactForceEventThreshold?: number | undefined;
39
- mass?: Mass | undefined;
40
- } | {
41
- shape: Shape;
42
- args: Args;
43
- position?: Position | undefined;
44
- rotation?: Rotation | undefined;
45
- scale?: import("@threlte/core").Scale | undefined;
46
- lookAt?: import("@threlte/core").LookAt | undefined;
47
- restitution?: number | undefined;
48
- restitutionCombineRule?: CoefficientCombineRule | undefined;
49
- friction?: number | undefined;
50
- frictionCombineRule?: CoefficientCombineRule | undefined;
51
- sensor?: boolean | undefined;
52
- collider?: Collider | undefined;
53
- contactForceEventThreshold?: number | undefined;
54
- mass?: Mass | undefined;
55
- massProperties?: MassProperties | undefined;
56
- };
57
- events(): {
58
- collisionenter: CustomEvent<{
59
- targetCollider: Collider;
60
- targetRigidBody: RigidBody | null;
61
- manifold: import("@dimforge/rapier3d-compat").TempContactManifold;
62
- flipped: boolean;
63
- }>;
64
- collisionexit: CustomEvent<{
65
- targetCollider: Collider;
66
- targetRigidBody: RigidBody | null;
67
- }>;
68
- sensorenter: CustomEvent<{
69
- targetCollider: Collider;
70
- targetRigidBody: RigidBody | null;
71
- }>;
72
- sensorexit: CustomEvent<{
73
- targetCollider: Collider;
74
- targetRigidBody: RigidBody | null;
75
- }>;
76
- contact: CustomEvent<{
77
- targetCollider: Collider;
78
- targetRigidBody: RigidBody | null;
79
- maxForceDirection: import("@dimforge/rapier3d-compat").Vector;
80
- maxForceMagnitude: number;
81
- totalForce: import("@dimforge/rapier3d-compat").Vector;
82
- totalForceMagnitude: number;
83
- }>;
84
- };
85
- slots(): {
86
- default: {};
87
- };
1
+ import type {
2
+ CoefficientCombineRule,
3
+ Collider as RapierCollider,
4
+ ColliderDesc
5
+ } from '@dimforge/rapier3d-compat'
6
+ import { SvelteComponentTyped } from 'svelte'
7
+ import type { Euler, Vector3 } from 'three'
8
+ import type { ColliderEventMap } from '../../types/types'
9
+
10
+ // ------------------ BASE ------------------
11
+
12
+ type Type = 'static' | 'dynamic'
13
+
14
+ type BaseProps = {
15
+ type?: Type
16
+ restitution?: number
17
+ restitutionCombineRule?: CoefficientCombineRule
18
+ friction?: number
19
+ frictionCombineRule?: CoefficientCombineRule
20
+ sensor?: boolean
21
+ collider?: RapierCollider
22
+ contactForceEventThreshold?: number
23
+ refresh?: () => void
88
24
  }
89
- export declare type ColliderProps<Shape extends 'ball' | 'capsule' | 'segment' | 'triangle' | 'roundTriangle' | 'polyline' | 'trimesh' | 'cuboid' | 'roundCuboid' | 'heightfield' | 'cylinder' | 'roundCylinder' | 'cone' | 'roundCone' | 'convexHull' | 'convexMesh' | 'roundConvexHull' | 'roundConvexMesh', Args extends Parameters<typeof ColliderDesc[Shape]>, Density extends number | undefined, Mass extends Density extends undefined ? number | undefined : undefined, MassProperties extends Density extends undefined ? Mass extends undefined ? {
90
- mass: number;
91
- centerOfMass: Position;
92
- principalAngularInertia: Position;
93
- angularInertiaLocalFrame: Rotation;
94
- } : undefined : undefined> = ReturnType<__sveltets_Render<Shape, Args, Density, Mass, MassProperties>['props']>;
95
- export declare type ColliderEvents<Shape extends 'ball' | 'capsule' | 'segment' | 'triangle' | 'roundTriangle' | 'polyline' | 'trimesh' | 'cuboid' | 'roundCuboid' | 'heightfield' | 'cylinder' | 'roundCylinder' | 'cone' | 'roundCone' | 'convexHull' | 'convexMesh' | 'roundConvexHull' | 'roundConvexMesh', Args extends Parameters<typeof ColliderDesc[Shape]>, Density extends number | undefined, Mass extends Density extends undefined ? number | undefined : undefined, MassProperties extends Density extends undefined ? Mass extends undefined ? {
96
- mass: number;
97
- centerOfMass: Position;
98
- principalAngularInertia: Position;
99
- angularInertiaLocalFrame: Rotation;
100
- } : undefined : undefined> = ReturnType<__sveltets_Render<Shape, Args, Density, Mass, MassProperties>['events']>;
101
- export declare type ColliderSlots<Shape extends 'ball' | 'capsule' | 'segment' | 'triangle' | 'roundTriangle' | 'polyline' | 'trimesh' | 'cuboid' | 'roundCuboid' | 'heightfield' | 'cylinder' | 'roundCylinder' | 'cone' | 'roundCone' | 'convexHull' | 'convexMesh' | 'roundConvexHull' | 'roundConvexMesh', Args extends Parameters<typeof ColliderDesc[Shape]>, Density extends number | undefined, Mass extends Density extends undefined ? number | undefined : undefined, MassProperties extends Density extends undefined ? Mass extends undefined ? {
102
- mass: number;
103
- centerOfMass: Position;
104
- principalAngularInertia: Position;
105
- angularInertiaLocalFrame: Rotation;
106
- } : undefined : undefined> = ReturnType<__sveltets_Render<Shape, Args, Density, Mass, MassProperties>['slots']>;
107
- export default class Collider<Shape extends 'ball' | 'capsule' | 'segment' | 'triangle' | 'roundTriangle' | 'polyline' | 'trimesh' | 'cuboid' | 'roundCuboid' | 'heightfield' | 'cylinder' | 'roundCylinder' | 'cone' | 'roundCone' | 'convexHull' | 'convexMesh' | 'roundConvexHull' | 'roundConvexMesh', Args extends Parameters<typeof ColliderDesc[Shape]>, Density extends number | undefined, Mass extends Density extends undefined ? number | undefined : undefined, MassProperties extends Density extends undefined ? Mass extends undefined ? {
108
- mass: number;
109
- centerOfMass: Position;
110
- principalAngularInertia: Position;
111
- angularInertiaLocalFrame: Rotation;
112
- } : undefined : undefined> extends SvelteComponentTyped<ColliderProps<Shape, Args, Density, Mass, MassProperties>, ColliderEvents<Shape, Args, Density, Mass, MassProperties>, ColliderSlots<Shape, Args, Density, Mass, MassProperties>> {
25
+
26
+ // ------------------ SHAPE ------------------
27
+
28
+ export type Shape =
29
+ | 'ball'
30
+ | 'capsule'
31
+ | 'segment'
32
+ | 'triangle'
33
+ | 'roundTriangle'
34
+ | 'polyline'
35
+ | 'trimesh'
36
+ | 'cuboid'
37
+ | 'roundCuboid'
38
+ | 'heightfield'
39
+ | 'cylinder'
40
+ | 'roundCylinder'
41
+ | 'cone'
42
+ | 'roundCone'
43
+ | 'convexHull'
44
+ | 'convexMesh'
45
+ | 'roundConvexHull'
46
+ | 'roundConvexMesh'
47
+
48
+ type Args<TShape extends Shape> = Parameters<typeof ColliderDesc[TShape]>
49
+
50
+ type ShapeProps<TShape extends Shape> = {
51
+ shape: TShape
52
+ args: Args<TShape>
113
53
  }
114
- export {};
54
+
55
+ // ------------------ MASS ------------------
56
+
57
+ type Density = {
58
+ density: number
59
+ mass?: never
60
+ centerOfMass?: never
61
+ principalAngularInertia?: never
62
+ angularInertiaLocalFrame?: never
63
+ }
64
+ type Mass = {
65
+ mass: number
66
+ density?: never
67
+ centerOfMass?: never
68
+ principalAngularInertia?: never
69
+ angularInertiaLocalFrame?: never
70
+ }
71
+ type MassProperties = {
72
+ mass: number
73
+ centerOfMass: Parameters<Vector3['set']>
74
+ principalAngularInertia: Parameters<Vector3['set']>
75
+ angularInertiaLocalFrame: Parameters<Euler['set']>
76
+ density?: never
77
+ }
78
+
79
+ type NoMassProperties = {
80
+ density?: never
81
+ mass?: never
82
+ centerOfMass?: never
83
+ principalAngularInertia?: never
84
+ angularInertiaLocalFrame?: never
85
+ }
86
+
87
+ export type MassDef = Density | Mass | MassProperties | NoMassProperties
88
+
89
+ type MassProps<TMassDef extends MassDef> = TMassDef extends Density
90
+ ? Density
91
+ : TMassDef extends MassProperties
92
+ ? MassProperties
93
+ : TMassDef extends Mass
94
+ ? Mass
95
+ : NoMassProperties
96
+
97
+ // ------------------ COLLIDER ------------------
98
+
99
+ export type ColliderProps<TShape extends Shape, TMassDef extends MassDef> = BaseProps &
100
+ ShapeProps<TShape> &
101
+ MassProps<TMassDef>
102
+
103
+ export type ColliderSlots = {
104
+ default: {
105
+ collider: RapierCollider
106
+ }
107
+ }
108
+
109
+ export default class Collider<
110
+ TShape extends Shape,
111
+ TMassDef extends MassDef
112
+ > extends SvelteComponentTyped<ColliderProps<TShape, TMassDef>, ColliderEventMap, ColliderSlots> {}
@@ -1,28 +1,9 @@
1
1
  <script>import { setContext } from 'svelte';
2
2
  import { writable } from 'svelte/store';
3
+ import { computeBitMask } from '../../lib/computeBitMask';
3
4
  export let groups = undefined;
4
5
  export let filter = undefined;
5
6
  export let memberships = undefined;
6
- const computeBitMask = (groups, filter, memberships) => {
7
- if (groups !== undefined) {
8
- // groups is setting the filter and memberships at once
9
- const g = groups;
10
- const mask = g.reduce((acc, f) => {
11
- return acc | (1 << f);
12
- }, 0) |
13
- g.reduce((acc, m) => {
14
- return acc | (1 << (m + 16));
15
- }, 0);
16
- return mask;
17
- }
18
- const mask = memberships.reduce((acc, f) => {
19
- return acc | (1 << f);
20
- }, 0) |
21
- filter.reduce((acc, m) => {
22
- return acc | (1 << (m + 16));
23
- }, 0);
24
- return mask;
25
- };
26
7
  const store = writable(computeBitMask(groups, filter, memberships));
27
8
  $: store.set(computeBitMask(groups, filter, memberships));
28
9
  setContext('threlte-rapier-collision-group', store);
@@ -1,21 +1,31 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare class __sveltets_Render<Groups extends (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] | undefined, MembershipsAndFilter extends Groups extends undefined ? (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] : undefined> {
3
- props(): {
4
- groups: Groups;
5
- } | {
6
- filter: MembershipsAndFilter;
7
- memberships: MembershipsAndFilter;
8
- };
9
- events(): {} & {
10
- [evt: string]: CustomEvent<any>;
11
- };
12
- slots(): {
13
- default: {};
14
- };
1
+ import { SvelteComponentTyped } from 'svelte'
2
+
3
+ type N = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
4
+
5
+ export type Groups = N[]
6
+
7
+ export type MembershipsAndFilter = N[]
8
+
9
+ type GroupsProps = {
10
+ groups: N[]
11
+
12
+ filter?: never
13
+ memberships?: never
15
14
  }
16
- export declare type CollisionGroupsProps<Groups extends (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] | undefined, MembershipsAndFilter extends Groups extends undefined ? (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] : undefined> = ReturnType<__sveltets_Render<Groups, MembershipsAndFilter>['props']>;
17
- export declare type CollisionGroupsEvents<Groups extends (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] | undefined, MembershipsAndFilter extends Groups extends undefined ? (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] : undefined> = ReturnType<__sveltets_Render<Groups, MembershipsAndFilter>['events']>;
18
- export declare type CollisionGroupsSlots<Groups extends (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] | undefined, MembershipsAndFilter extends Groups extends undefined ? (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] : undefined> = ReturnType<__sveltets_Render<Groups, MembershipsAndFilter>['slots']>;
19
- export default class CollisionGroups<Groups extends (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] | undefined, MembershipsAndFilter extends Groups extends undefined ? (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15)[] : undefined> extends SvelteComponentTyped<CollisionGroupsProps<Groups, MembershipsAndFilter>, CollisionGroupsEvents<Groups, MembershipsAndFilter>, CollisionGroupsSlots<Groups, MembershipsAndFilter>> {
15
+
16
+ type MembershipsAndFilterProps = {
17
+ filter: N[]
18
+ memberships: N[]
19
+
20
+ groups?: never
20
21
  }
21
- export {};
22
+
23
+ type GroupsDef = GroupsProps | MembershipsAndFilterProps
24
+
25
+ export type CollisionGroupsProps<TGroupsDef extends GroupsDef> = TGroupsDef extends GroupsProps
26
+ ? GroupsProps
27
+ : MembershipsAndFilterProps
28
+
29
+ export default class CollisionGroups<TGroupsDef extends GroupsDef> extends SvelteComponentTyped<
30
+ CollisionGroupsProps<TGroupsDef>
31
+ > {}
@@ -1,12 +1,7 @@
1
- <script>import { LineSegments, useFrame } from '@threlte/core';
2
- import { onDestroy, } from 'svelte';
3
- import { BufferAttribute, BufferGeometry, LineBasicMaterial } from 'three';
1
+ <script>import { T, useFrame } from '@threlte/core';
2
+ import { onDestroy } from 'svelte';
3
+ import { BufferAttribute, BufferGeometry } from 'three';
4
4
  import { useRapier } from '../../hooks/useRapier';
5
- export let vertexColors = true;
6
- const material = new LineBasicMaterial({
7
- vertexColors,
8
- ...$$props
9
- });
10
5
  const { world, debug } = useRapier();
11
6
  const buffers = world.debugRender();
12
7
  const vertices = new BufferAttribute(buffers.vertices, 3);
@@ -24,9 +19,17 @@ useFrame(() => {
24
19
  });
25
20
  onDestroy(() => {
26
21
  geometry.dispose();
27
- material.dispose();
28
22
  debug.set(false);
29
23
  });
30
24
  </script>
31
25
 
32
- <LineSegments renderOrder={Infinity} {geometry} {material} />
26
+ <T.LineSegments renderOrder={Infinity}>
27
+ <T
28
+ is={geometry}
29
+ attach="geometry"
30
+ />
31
+ <T.LineBasicMaterial
32
+ vertexColors
33
+ {...$$restProps}
34
+ />
35
+ </T.LineSegments>
@@ -1,60 +1,6 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- color?: import("three").ColorRepresentation | undefined;
5
- linewidth?: number | undefined;
6
- linecap?: string | undefined;
7
- linejoin?: string | undefined;
8
- alphaTest?: number | undefined;
9
- alphaToCoverage?: boolean | undefined;
10
- blendDst?: import("three").BlendingDstFactor | undefined;
11
- blendDstAlpha?: number | undefined;
12
- blendEquation?: import("three").BlendingEquation | undefined;
13
- blendEquationAlpha?: number | undefined;
14
- blending?: import("three").Blending | undefined;
15
- blendSrc?: import("three").BlendingDstFactor | import("three").BlendingSrcFactor | undefined;
16
- blendSrcAlpha?: number | undefined;
17
- clipIntersection?: boolean | undefined;
18
- clippingPlanes?: import("three").Plane[] | undefined;
19
- clipShadows?: boolean | undefined;
20
- colorWrite?: boolean | undefined;
21
- defines?: any;
22
- depthFunc?: import("three").DepthModes | undefined;
23
- depthTest?: boolean | undefined;
24
- depthWrite?: boolean | undefined;
25
- name?: string | undefined;
26
- opacity?: number | undefined;
27
- polygonOffset?: boolean | undefined;
28
- polygonOffsetFactor?: number | undefined;
29
- polygonOffsetUnits?: number | undefined;
30
- precision?: "highp" | "mediump" | "lowp" | null | undefined;
31
- premultipliedAlpha?: boolean | undefined;
32
- dithering?: boolean | undefined;
33
- side?: import("three").Side | undefined;
34
- shadowSide?: import("three").Side | undefined;
35
- toneMapped?: boolean | undefined;
36
- transparent?: boolean | undefined;
37
- vertexColors?: boolean | undefined;
38
- visible?: boolean | undefined;
39
- format?: import("three").PixelFormat | undefined;
40
- stencilWrite?: boolean | undefined;
41
- stencilFunc?: import("three").StencilFunc | undefined;
42
- stencilRef?: number | undefined;
43
- stencilWriteMask?: number | undefined;
44
- stencilFuncMask?: number | undefined;
45
- stencilFail?: import("three").StencilOp | undefined;
46
- stencilZFail?: import("three").StencilOp | undefined;
47
- stencilZPass?: import("three").StencilOp | undefined;
48
- userData?: any;
49
- };
50
- events: {
51
- [evt: string]: CustomEvent<any>;
52
- };
53
- slots: {};
54
- };
55
- export declare type DebugProps = typeof __propDef.props;
56
- export declare type DebugEvents = typeof __propDef.events;
57
- export declare type DebugSlots = typeof __propDef.slots;
58
- export default class Debug extends SvelteComponentTyped<DebugProps, DebugEvents, DebugSlots> {
59
- }
60
- export {};
1
+ import { SvelteComponentTyped } from 'svelte'
2
+ import type { LineBasicMaterialParameters } from 'three'
3
+
4
+ export type DebugProps = LineBasicMaterialParameters
5
+
6
+ export default class Debug extends SvelteComponentTyped<DebugProps> {}
@@ -1,41 +1,26 @@
1
- <script>import { LayerableObject, SceneGraphObject } from '@threlte/core';
2
- import { createEventDispatcher, onDestroy, setContext, tick } from 'svelte';
1
+ <script>import { createRawEventDispatcher, SceneGraphObject } from '@threlte/core';
2
+ import { onDestroy, setContext, tick } from 'svelte';
3
3
  import { Object3D, Vector3 } from 'three';
4
4
  import { useHasEventListeners } from '../../hooks/useHasEventListener';
5
5
  import { useRapier } from '../../hooks/useRapier';
6
- import { applyTransforms } from '../../lib/applyTransforms';
7
6
  import { getWorldPosition, getWorldQuaternion, getWorldScale } from '../../lib/getWorldTransforms';
8
7
  import { parseRigidBodyType } from '../../lib/parseRigidBodyType';
9
- import { positionToVector3 } from '../../lib/positionToVector3';
10
- import { rotationToEuler } from '../../lib/rotationToEuler';
11
8
  const { world, rapier, addRigidBodyToContext, removeRigidBodyFromContext } = useRapier();
12
- export let debug = false;
9
+ export let linearVelocity = undefined;
10
+ export let angularVelocity = undefined;
13
11
  export let type = 'dynamic';
14
12
  export let canSleep = true;
15
- export let linearVelocity = {};
16
- export let angularVelocity = {};
17
13
  export let gravityScale = 1;
18
14
  export let ccd = false;
19
15
  export let angularDamping = 0;
20
16
  export let linearDamping = 0;
21
17
  export let lockRotations = false;
22
18
  export let lockTranslations = false;
23
- export let enabledRotations = [
24
- true,
25
- true,
26
- true
27
- ];
28
- export let enabledTranslations = [
29
- true,
30
- true,
31
- true
32
- ];
19
+ export let enabledRotations = [true, true, true];
20
+ export let enabledTranslations = [true, true, true];
33
21
  export let dominance = 0;
34
- export let position = undefined;
35
- export let rotation = undefined;
36
- export let scale = undefined;
37
- export let lookAt = undefined;
38
- const dispatcher = createEventDispatcher();
22
+ export let enabled = true;
23
+ const dispatcher = createRawEventDispatcher();
39
24
  const object = new Object3D();
40
25
  /**
41
26
  * Used to traverseAncestors to restore transform
@@ -45,18 +30,6 @@ object.userData.isRigidBody = true;
45
30
  * isSleeping used for events "sleep" and "wake" in `useFrameHandler`
46
31
  */
47
32
  object.userData.isSleeping = false;
48
- /**
49
- * Immediately apply transforms to get the objects
50
- * world position to apply to the RigidBody.
51
- * This is a one-off operation as RigidBodies should
52
- * not be moved around after initialization.
53
- */
54
- applyTransforms(object, position, rotation, scale, lookAt);
55
- /**
56
- * Update the world matrix of the object before applying
57
- * the world position to the RigidBody
58
- */
59
- object.updateWorldMatrix(true, false);
60
33
  /**
61
34
  * RigidBody Description
62
35
  */
@@ -74,7 +47,6 @@ const rigidBodyTemp = world.createRigidBody(desc);
74
47
  */
75
48
  const initPosition = async () => {
76
49
  await tick();
77
- applyTransforms(object, position, rotation, scale, lookAt);
78
50
  object.updateMatrix();
79
51
  object.updateWorldMatrix(true, false);
80
52
  const parentWorldScale = object.parent ? getWorldScale(object.parent) : new Vector3(1, 1, 1);
@@ -82,12 +54,6 @@ const initPosition = async () => {
82
54
  const worldQuaternion = getWorldQuaternion(object);
83
55
  rigidBodyTemp.setTranslation(worldPosition, true);
84
56
  rigidBodyTemp.setRotation(worldQuaternion, true);
85
- if (debug) {
86
- console.log('worldPosition', worldPosition);
87
- console.log('worldQuaternion', worldQuaternion);
88
- }
89
- if (debug)
90
- console.log(JSON.stringify(desc, null, 2));
91
57
  rigidBody = rigidBodyTemp;
92
58
  };
93
59
  initPosition();
@@ -98,20 +64,21 @@ object.userData.rigidBody = rigidBodyTemp;
98
64
  /**
99
65
  * Reactive RigidBody properties
100
66
  */
101
- $: {
102
- rigidBodyTemp.setBodyType(parseRigidBodyType(type));
103
- rigidBodyTemp.setLinvel(positionToVector3(linearVelocity), true);
104
- rigidBodyTemp.setAngvel(rotationToEuler(angularVelocity), true);
105
- rigidBodyTemp.setGravityScale(gravityScale, true);
106
- rigidBodyTemp.enableCcd(ccd);
107
- rigidBodyTemp.setDominanceGroup(dominance);
108
- rigidBodyTemp.lockRotations(lockRotations, true);
109
- rigidBodyTemp.lockTranslations(lockTranslations, true);
110
- rigidBodyTemp.setEnabledRotations(...enabledRotations, true);
111
- rigidBodyTemp.setEnabledTranslations(...enabledTranslations, true);
112
- rigidBodyTemp.setAngularDamping(angularDamping);
113
- rigidBodyTemp.setLinearDamping(linearDamping);
114
- }
67
+ $: rigidBodyTemp.setBodyType(parseRigidBodyType(type), true);
68
+ $: if (linearVelocity)
69
+ rigidBodyTemp.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);
70
+ $: if (angularVelocity)
71
+ rigidBodyTemp.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);
72
+ $: rigidBodyTemp.setGravityScale(gravityScale, true);
73
+ $: rigidBodyTemp.enableCcd(ccd);
74
+ $: rigidBodyTemp.setDominanceGroup(dominance);
75
+ $: rigidBodyTemp.lockRotations(lockRotations, true);
76
+ $: rigidBodyTemp.lockTranslations(lockTranslations, true);
77
+ $: rigidBodyTemp.setEnabledRotations(...enabledRotations, true);
78
+ $: rigidBodyTemp.setEnabledTranslations(...enabledTranslations, true);
79
+ $: rigidBodyTemp.setAngularDamping(angularDamping);
80
+ $: rigidBodyTemp.setLinearDamping(linearDamping);
81
+ $: rigidBodyTemp.setEnabled(enabled);
115
82
  /**
116
83
  * Add userData to the rigidBody
117
84
  */
@@ -140,5 +107,3 @@ onDestroy(() => {
140
107
  <SceneGraphObject {object}>
141
108
  <slot />
142
109
  </SceneGraphObject>
143
-
144
- <LayerableObject {object} />