@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.
- package/dist/CHANGELOG.md +12 -0
- package/dist/components/Attractor/Attractor.svelte +17 -13
- package/dist/components/Attractor/Attractor.svelte.d.ts +20 -22
- package/dist/components/Colliders/AutoColliders.svelte +52 -50
- package/dist/components/Colliders/AutoColliders.svelte.d.ts +80 -0
- package/dist/components/Colliders/Collider.svelte +40 -30
- package/dist/components/Colliders/Collider.svelte.d.ts +110 -112
- package/dist/components/CollisionGroups/CollisionGroups.svelte +1 -20
- package/dist/components/CollisionGroups/CollisionGroups.svelte.d.ts +29 -19
- package/dist/components/Debug/Debug.svelte +13 -10
- package/dist/components/Debug/Debug.svelte.d.ts +6 -60
- package/dist/components/RigidBody/RigidBody.svelte +23 -58
- package/dist/components/RigidBody/RigidBody.svelte.d.ts +94 -67
- package/dist/components/World/InnerWorld.svelte +11 -7
- package/dist/components/World/InnerWorld.svelte.d.ts +15 -15
- package/dist/components/World/World.svelte +13 -2
- package/dist/components/World/World.svelte.d.ts +36 -32
- package/dist/hooks/useFixedJoint.d.ts +2 -2
- package/dist/hooks/useFixedJoint.js +6 -3
- package/dist/hooks/useFrameHandler.d.ts +1 -1
- package/dist/hooks/useFrameHandler.js +9 -8
- package/dist/hooks/usePrismaticJoint.d.ts +2 -2
- package/dist/hooks/usePrismaticJoint.js +5 -2
- package/dist/hooks/useRevoluteJoint.d.ts +2 -2
- package/dist/hooks/useRevoluteJoint.js +5 -2
- package/dist/hooks/useSphericalJoint.d.ts +2 -2
- package/dist/hooks/useSphericalJoint.js +4 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -0
- package/dist/lib/applyTransforms.d.ts +2 -3
- package/dist/lib/applyTransforms.js +7 -16
- package/dist/lib/computeBitMask.d.ts +5 -0
- package/dist/lib/computeBitMask.js +20 -0
- package/dist/lib/createRapierContext.d.ts +3 -0
- package/dist/lib/createRapierContext.js +10 -1
- package/dist/lib/eulerToQuaternion.d.ts +7 -0
- package/dist/lib/eulerToQuaternion.js +12 -0
- package/dist/lib/scaleColliderArgs.js +3 -3
- package/dist/recipes/BasicPlayerController.svelte +28 -27
- package/dist/recipes/BasicPlayerController.svelte.d.ts +2 -5
- package/dist/types/components.d.ts +1 -88
- package/dist/types/types.d.ts +5 -5
- package/package.json +10 -9
- package/dist/components/Joints/RevoluteJoint.svelte +0 -5
- package/dist/components/Joints/RevoluteJoint.svelte.d.ts +0 -23
- package/dist/lib/positionToVector3.d.ts +0 -3
- package/dist/lib/positionToVector3.js +0 -8
- package/dist/lib/rotationToEuler.d.ts +0 -3
- package/dist/lib/rotationToEuler.js +0 -8
- package/dist/lib/rotationToQuaternion.d.ts +0 -3
- package/dist/lib/rotationToQuaternion.js +0 -10
- package/dist/lib/scaleToVector3.d.ts +0 -3
- package/dist/lib/scaleToVector3.js +0 -16
|
@@ -1,114 +1,112 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
|
|
16
|
+
type MembershipsAndFilterProps = {
|
|
17
|
+
filter: N[]
|
|
18
|
+
memberships: N[]
|
|
19
|
+
|
|
20
|
+
groups?: never
|
|
20
21
|
}
|
|
21
|
-
|
|
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 {
|
|
2
|
-
import { onDestroy
|
|
3
|
-
import { BufferAttribute, BufferGeometry
|
|
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}
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {
|
|
2
|
-
import {
|
|
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
|
|
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
|
-
|
|
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
|
|
35
|
-
|
|
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
|
-
|
|
103
|
-
rigidBodyTemp.setLinvel(
|
|
104
|
-
|
|
105
|
-
rigidBodyTemp.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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} />
|