babylon-box3d 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +212 -29
- package/dist/box3dPlugin.d.ts +457 -0
- package/dist/box3dPlugin.d.ts.map +1 -0
- package/dist/box3dPlugin.js +2456 -0
- package/dist/box3dPlugin.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/{box3d.d.ts → lib/esm/box3d.d.ts} +40 -1
- package/lib/esm/box3d.js +2 -2
- package/lib/esm/box3d.wasm +0 -0
- package/lib/node/box3d.d.ts +221 -0
- package/lib/node/box3d.mjs +2 -2
- package/lib/node/box3d.wasm +0 -0
- package/lib/umd/box3d.umd.js +2 -2
- package/lib/umd/box3d.umd.wasm +0 -0
- package/package.json +58 -16
- package/umd/babylon.box3d.js +2636 -0
- package/umd/babylon.box3d.js.map +7 -0
- package/umd/babylon.box3d.min.js +3 -0
- package/umd/babylon.box3d.min.js.map +7 -0
- package/{src → wasm}/box3d_shim.c +444 -96
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import { Quaternion, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
+
import { type IPhysicsEnginePluginV2, type PhysicsMassProperties, type PhysicsShapeParameters, type ConstrainedBodyPair, type IPhysicsCollisionEvent, type IBasePhysicsCollisionEvent, PhysicsShapeType, PhysicsMotionType, PhysicsConstraintAxis, PhysicsConstraintAxisLimitMode, PhysicsConstraintMotorType, PhysicsActivationControl } from "@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js";
|
|
3
|
+
import { PhysicsRaycastResult } from "@babylonjs/core/Physics/physicsRaycastResult.js";
|
|
4
|
+
import { type IRaycastQuery } from "@babylonjs/core/Physics/physicsRaycastResult.js";
|
|
5
|
+
import { type PhysicsBody } from "@babylonjs/core/Physics/v2/physicsBody.js";
|
|
6
|
+
import { type PhysicsConstraint } from "@babylonjs/core/Physics/v2/physicsConstraint.js";
|
|
7
|
+
import { type PhysicsMaterial } from "@babylonjs/core/Physics/v2/physicsMaterial.js";
|
|
8
|
+
import { type PhysicsShape } from "@babylonjs/core/Physics/v2/physicsShape.js";
|
|
9
|
+
import { BoundingBox } from "@babylonjs/core/Culling/boundingBox.js";
|
|
10
|
+
import { type TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
11
|
+
import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
|
|
12
|
+
import { Observable } from "@babylonjs/core/Misc/observable.js";
|
|
13
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
14
|
+
/** The cell material that cuts a hole in a height field: nothing collides with the cell and rays pass through it. */
|
|
15
|
+
export declare const BOX3D_HEIGHT_FIELD_HOLE = 255;
|
|
16
|
+
declare module "@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js" {
|
|
17
|
+
interface PhysicsShapeParameters {
|
|
18
|
+
/**
|
|
19
|
+
* Box3D height fields only: a material index for every cell, `(numHeightFieldSamplesX - 1) *
|
|
20
|
+
* (numHeightFieldSamplesZ - 1)` of them, rows in the same order as `heightFieldData`. A cell of
|
|
21
|
+
* `BOX3D_HEIGHT_FIELD_HOLE` (255) is a hole. The index is also what `userMaterialId` would carry in Box3D, so
|
|
22
|
+
* keep it below 255 for solid ground.
|
|
23
|
+
*/
|
|
24
|
+
heightFieldMaterials?: ArrayLike<number>;
|
|
25
|
+
/**
|
|
26
|
+
* `CONVEX_HULL` and `MESH` without a `mesh`: the points as x, y, z triplets in the body's space, for code that
|
|
27
|
+
* builds shapes with no meshes to read them from, like a headless simulation.
|
|
28
|
+
*/
|
|
29
|
+
positions?: ArrayLike<number>;
|
|
30
|
+
/**
|
|
31
|
+
* `MESH` with `positions`: three indices into the points per triangle, wound so the plain cross product of
|
|
32
|
+
* (b - a) and (c - a) points out of the surface. That is Box3D's own winding, and it is used as given: no
|
|
33
|
+
* flip for a left handed scene, which only applies to winding read from a Babylon mesh.
|
|
34
|
+
*/
|
|
35
|
+
positionIndices?: ArrayLike<number>;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for a Box3D wheel joint (Box3D specific, no Babylon equivalent).
|
|
40
|
+
* The suspension travels along axisA (chassis space), the wheel spins about spinAxisB (wheel space)
|
|
41
|
+
* and steers about the suspension axis.
|
|
42
|
+
*/
|
|
43
|
+
export interface IBox3DWheelJointOptions {
|
|
44
|
+
/** anchor on the chassis, chassis local space */
|
|
45
|
+
pivotA: Vector3;
|
|
46
|
+
/** suspension axis in chassis local space (usually up) */
|
|
47
|
+
axisA?: Vector3;
|
|
48
|
+
/** axle direction in chassis local space, the wheel spins about it (default +z) */
|
|
49
|
+
axleA?: Vector3;
|
|
50
|
+
/** anchor on the wheel, wheel local space */
|
|
51
|
+
pivotB?: Vector3;
|
|
52
|
+
/** suspension spring stiffness in hertz */
|
|
53
|
+
suspensionHertz?: number;
|
|
54
|
+
/** suspension spring damping ratio */
|
|
55
|
+
suspensionDampingRatio?: number;
|
|
56
|
+
/** suspension travel limits along axisA */
|
|
57
|
+
suspensionLimits?: [number, number];
|
|
58
|
+
/** whether the wheel is driven */
|
|
59
|
+
enableSpinMotor?: boolean;
|
|
60
|
+
/** maximum drive torque */
|
|
61
|
+
maxSpinTorque?: number;
|
|
62
|
+
/** whether the wheel steers */
|
|
63
|
+
enableSteering?: boolean;
|
|
64
|
+
/** steering spring stiffness in hertz */
|
|
65
|
+
steeringHertz?: number;
|
|
66
|
+
/** steering spring damping ratio */
|
|
67
|
+
steeringDampingRatio?: number;
|
|
68
|
+
/** maximum steering torque */
|
|
69
|
+
maxSteeringTorque?: number;
|
|
70
|
+
/** steering angle limits in radians */
|
|
71
|
+
steeringLimits?: [number, number];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Handle to a Box3D wheel joint created with Box3DPlugin.createWheelJoint.
|
|
75
|
+
*/
|
|
76
|
+
export declare class Box3DWheelJoint {
|
|
77
|
+
private _plugin;
|
|
78
|
+
/** @internal */
|
|
79
|
+
_slot: number;
|
|
80
|
+
/**
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
constructor(_plugin: Box3DPlugin,
|
|
84
|
+
/** @internal */
|
|
85
|
+
_slot: number);
|
|
86
|
+
/**
|
|
87
|
+
* Sets the target angular speed of the spin motor.
|
|
88
|
+
* @param speed radians per second
|
|
89
|
+
*/
|
|
90
|
+
setSpinSpeed(speed: number): void;
|
|
91
|
+
/**
|
|
92
|
+
* Sets the maximum torque the spin motor can apply.
|
|
93
|
+
* @param torque newton meters
|
|
94
|
+
*/
|
|
95
|
+
setMaxSpinTorque(torque: number): void;
|
|
96
|
+
/**
|
|
97
|
+
* Enables or disables the spin motor (disabled wheels roll freely).
|
|
98
|
+
* @param enabled true to enable
|
|
99
|
+
*/
|
|
100
|
+
enableSpinMotor(enabled: boolean): void;
|
|
101
|
+
/**
|
|
102
|
+
* Sets the target steering angle.
|
|
103
|
+
* @param radians steering angle
|
|
104
|
+
*/
|
|
105
|
+
setSteeringAngle(radians: number): void;
|
|
106
|
+
/**
|
|
107
|
+
* Tunes the suspension spring.
|
|
108
|
+
* @param hertz stiffness
|
|
109
|
+
* @param dampingRatio damping ratio
|
|
110
|
+
*/
|
|
111
|
+
setSuspension(hertz: number, dampingRatio: number): void;
|
|
112
|
+
/**
|
|
113
|
+
* Removes the joint.
|
|
114
|
+
*/
|
|
115
|
+
dispose(): void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Box3D physics plugin for Babylon.js physics v2.
|
|
119
|
+
* Box3D is Erin Catto's 3D rigid body engine (https://github.com/erincatto/box3d). This plugin drives the
|
|
120
|
+
* WebAssembly build that ships in this package (a flat, handle based C shim over box3d).
|
|
121
|
+
* Usage mirrors the Havok plugin:
|
|
122
|
+
* ```ts
|
|
123
|
+
* import { Box3D, Box3DPlugin } from "babylon-box3d";
|
|
124
|
+
* const box3d = await Box3D();
|
|
125
|
+
* scene.enablePhysics(new Vector3(0, -9.81, 0), new Box3DPlugin(true, box3d));
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare class Box3DPlugin implements IPhysicsEnginePluginV2 {
|
|
129
|
+
private _useDeltaForWorldStep;
|
|
130
|
+
/** Reference to the WASM module (the value resolved by the module factory). */
|
|
131
|
+
world: any;
|
|
132
|
+
/** Name of the plugin */
|
|
133
|
+
name: string;
|
|
134
|
+
/** Number of solver sub steps per world step. Box3D recommends 4. */
|
|
135
|
+
subStepCount: number;
|
|
136
|
+
/** Wall clock time of the last world step in milliseconds (JavaScript side, includes the event sync). */
|
|
137
|
+
lastStepTimeMs: number;
|
|
138
|
+
private _b3;
|
|
139
|
+
private _worldSlot;
|
|
140
|
+
private _fixedTimeStep;
|
|
141
|
+
private _timeStep;
|
|
142
|
+
private _maxAngularVelocity;
|
|
143
|
+
private _bodies;
|
|
144
|
+
private _shapes;
|
|
145
|
+
private _bodyCollisionObservable;
|
|
146
|
+
private _bodyCollisionEndedObservable;
|
|
147
|
+
private _touchedInstanceMeshes;
|
|
148
|
+
/** spherical joints whose velocity motor target has to be re-expressed in world space every step */
|
|
149
|
+
private _motorJoints;
|
|
150
|
+
private _tmpVec3;
|
|
151
|
+
private _tmpQuat;
|
|
152
|
+
private _warned;
|
|
153
|
+
/** the shim's rejected slot counter as of the last step, see executeStep */
|
|
154
|
+
private _rejectedSlots;
|
|
155
|
+
/** Observable for collision started and continued events */
|
|
156
|
+
onCollisionObservable: Observable<IPhysicsCollisionEvent>;
|
|
157
|
+
/** Observable for collision ended events */
|
|
158
|
+
onCollisionEndedObservable: Observable<IBasePhysicsCollisionEvent>;
|
|
159
|
+
/** Observable for trigger entered and exited events */
|
|
160
|
+
onTriggerCollisionObservable: Observable<IBasePhysicsCollisionEvent>;
|
|
161
|
+
/**
|
|
162
|
+
* Creates a Box3D plugin.
|
|
163
|
+
* @param _useDeltaForWorldStep step the world with the frame delta (true) or a fixed time step (false)
|
|
164
|
+
* @param box3dModule the resolved Box3D WASM module (await Box3DModule())
|
|
165
|
+
*/
|
|
166
|
+
constructor(_useDeltaForWorldStep: boolean | undefined, box3dModule: any);
|
|
167
|
+
private _scratch;
|
|
168
|
+
private _warnOnce;
|
|
169
|
+
private _getPluginReference;
|
|
170
|
+
private _applyToBodyOrInstances;
|
|
171
|
+
private _motionTypeToNative;
|
|
172
|
+
private _nodeTransformToRef;
|
|
173
|
+
setGravity(gravity: Vector3): void;
|
|
174
|
+
setTimeStep(timeStep: number): void;
|
|
175
|
+
getTimeStep(): number;
|
|
176
|
+
executeStep(delta: number, physicsBodies: Array<PhysicsBody>): void;
|
|
177
|
+
getPluginVersion(): number;
|
|
178
|
+
setVelocityLimits(maxLinearVelocity: number, maxAngularVelocity: number): void;
|
|
179
|
+
getMaxLinearVelocity(): number;
|
|
180
|
+
getMaxAngularVelocity(): number;
|
|
181
|
+
/**
|
|
182
|
+
* Box3D counters and timings for the current world.
|
|
183
|
+
* @returns body, shape, contact, joint and island counts plus the last step time in milliseconds
|
|
184
|
+
*/
|
|
185
|
+
getStats(): {
|
|
186
|
+
bodies: number;
|
|
187
|
+
shapes: number;
|
|
188
|
+
contacts: number;
|
|
189
|
+
joints: number;
|
|
190
|
+
islands: number;
|
|
191
|
+
stepMs: number;
|
|
192
|
+
collideMs: number;
|
|
193
|
+
solveMs: number;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Enables or disables island sleeping.
|
|
197
|
+
* @param enabled true to let resting bodies sleep
|
|
198
|
+
*/
|
|
199
|
+
setSleepingEnabled(enabled: boolean): void;
|
|
200
|
+
/**
|
|
201
|
+
* Enables or disables continuous collision against static geometry.
|
|
202
|
+
* @param enabled true to enable continuous collision
|
|
203
|
+
*/
|
|
204
|
+
setContinuousEnabled(enabled: boolean): void;
|
|
205
|
+
private _createNativeBody;
|
|
206
|
+
initBody(body: PhysicsBody, motionType: PhysicsMotionType, position: Vector3, orientation: Quaternion): void;
|
|
207
|
+
initBodyInstances(body: PhysicsBody, motionType: PhysicsMotionType, mesh: Mesh): void;
|
|
208
|
+
private _createOrUpdateBodyInstances;
|
|
209
|
+
updateBodyInstances(body: PhysicsBody, mesh: Mesh): void;
|
|
210
|
+
private _destroyBodyData;
|
|
211
|
+
removeBody(body: PhysicsBody): void;
|
|
212
|
+
sync(body: PhysicsBody): void;
|
|
213
|
+
private _syncBodyFromBuffer;
|
|
214
|
+
private _applyTransformToNode;
|
|
215
|
+
syncTransform(body: PhysicsBody, transformNode: TransformNode): void;
|
|
216
|
+
/**
|
|
217
|
+
* Pushes the transform node's pose into the physics body (called during the pre step).
|
|
218
|
+
* @param body the physics body
|
|
219
|
+
* @param node the transform node to read from
|
|
220
|
+
*/
|
|
221
|
+
setPhysicsBodyTransformation(body: PhysicsBody, node: TransformNode): void;
|
|
222
|
+
setTargetTransform(body: PhysicsBody, position: Vector3, rotation: Quaternion, instanceIndex?: number): void;
|
|
223
|
+
/** True when the shape puts a mesh inside a container, which Box3D can only do by baking a copy per body. */
|
|
224
|
+
private _bakesMeshCopies;
|
|
225
|
+
private _setBodyShape;
|
|
226
|
+
setShape(body: PhysicsBody, shape: Nullable<PhysicsShape>): void;
|
|
227
|
+
getShape(body: PhysicsBody): Nullable<PhysicsShape>;
|
|
228
|
+
getShapeType(shape: PhysicsShape): PhysicsShapeType;
|
|
229
|
+
/** Turns the body's event mask into Box3D's two shape flags, so a body only pays for the events it asked for. */
|
|
230
|
+
private _applyEventFlags;
|
|
231
|
+
setEventMask(body: PhysicsBody, eventMask: number, instanceIndex?: number): void;
|
|
232
|
+
getEventMask(body: PhysicsBody, instanceIndex?: number): number;
|
|
233
|
+
setMotionType(body: PhysicsBody, motionType: PhysicsMotionType, instanceIndex?: number): void;
|
|
234
|
+
/** The Box3D body type: the Babylon motion type, unless the body is parked by ALWAYS_INACTIVE. */
|
|
235
|
+
private _applyNativeMotionType;
|
|
236
|
+
/**
|
|
237
|
+
* Babylon's activation control, matched to Havok's behaviour with Box3D sleeping.
|
|
238
|
+
* ALWAYS_ACTIVE turns sleeping off for the body, SIMULATION_CONTROLLED turns it back on. ALWAYS_INACTIVE parks the
|
|
239
|
+
* body: in Havok such a body ignores impulses and velocity changes, is not woken by anything that touches it and
|
|
240
|
+
* still blocks other bodies, which Box3D sleeping alone cannot do, so it becomes a static Box3D body until the
|
|
241
|
+
* control changes. Coming back it is left asleep, like Havok, until something wakes it.
|
|
242
|
+
* @param body the physics body
|
|
243
|
+
* @param controlMode how the body may be activated and deactivated
|
|
244
|
+
* @param instanceIndex optional thin instance index
|
|
245
|
+
*/
|
|
246
|
+
setActivationControl(body: PhysicsBody, controlMode: PhysicsActivationControl, instanceIndex?: number): void;
|
|
247
|
+
getMotionType(body: PhysicsBody, instanceIndex?: number): PhysicsMotionType;
|
|
248
|
+
/**
|
|
249
|
+
* Reads Box3D's mass data and converts it to Babylon's form: the inertia is the principal moments of the tensor
|
|
250
|
+
* divided by the mass (Babylon's inertia is per unit mass) and the orientation rotates the principal axes into
|
|
251
|
+
* body space.
|
|
252
|
+
*/
|
|
253
|
+
private _readMassData;
|
|
254
|
+
/** The mass properties of the body: what the user asked for, filled in from the shapes where they said nothing. */
|
|
255
|
+
private _resolveMassProperties;
|
|
256
|
+
private _internalUpdateMassProperties;
|
|
257
|
+
/**
|
|
258
|
+
* Box3D locks are world space, Babylon's zero inertia components are body local. Locking two of them leaves a single
|
|
259
|
+
* free axis, and if that axis is world aligned the body can only ever spin about it, so the world locks are exact
|
|
260
|
+
* and stay exact. Everything else relies on the large moment above.
|
|
261
|
+
*/
|
|
262
|
+
private _applyLockedAxes;
|
|
263
|
+
private _applyMotionLocks;
|
|
264
|
+
computeMassProperties(body: PhysicsBody, instanceIndex?: number): PhysicsMassProperties;
|
|
265
|
+
setMassProperties(body: PhysicsBody, massProps: PhysicsMassProperties, instanceIndex?: number): void;
|
|
266
|
+
getMassProperties(body: PhysicsBody, instanceIndex?: number): PhysicsMassProperties;
|
|
267
|
+
setLinearDamping(body: PhysicsBody, damping: number, instanceIndex?: number): void;
|
|
268
|
+
getLinearDamping(body: PhysicsBody, instanceIndex?: number): number;
|
|
269
|
+
setAngularDamping(body: PhysicsBody, damping: number, instanceIndex?: number): void;
|
|
270
|
+
getAngularDamping(body: PhysicsBody, instanceIndex?: number): number;
|
|
271
|
+
setLinearVelocity(body: PhysicsBody, linVel: Vector3, instanceIndex?: number): void;
|
|
272
|
+
getLinearVelocityToRef(body: PhysicsBody, linVel: Vector3, instanceIndex?: number): void;
|
|
273
|
+
applyImpulse(body: PhysicsBody, impulse: Vector3, location: Vector3, instanceIndex?: number): void;
|
|
274
|
+
applyAngularImpulse(body: PhysicsBody, angularImpulse: Vector3, instanceIndex?: number): void;
|
|
275
|
+
applyForce(body: PhysicsBody, force: Vector3, location: Vector3, instanceIndex?: number): void;
|
|
276
|
+
applyTorque(body: PhysicsBody, torque: Vector3, instanceIndex?: number): void;
|
|
277
|
+
setAngularVelocity(body: PhysicsBody, angVel: Vector3, instanceIndex?: number): void;
|
|
278
|
+
getAngularVelocityToRef(body: PhysicsBody, angVel: Vector3, instanceIndex?: number): void;
|
|
279
|
+
getBodyGeometry(body: PhysicsBody): {
|
|
280
|
+
positions: Float32Array | number[];
|
|
281
|
+
indices: Uint32Array | number[];
|
|
282
|
+
};
|
|
283
|
+
disposeBody(body: PhysicsBody): void;
|
|
284
|
+
setCollisionCallbackEnabled(body: PhysicsBody, enabled: boolean, instanceIndex?: number): void;
|
|
285
|
+
setCollisionEndedCallbackEnabled(body: PhysicsBody, enabled: boolean, instanceIndex?: number): void;
|
|
286
|
+
getCollisionObservable(body: PhysicsBody, instanceIndex?: number): Observable<IPhysicsCollisionEvent>;
|
|
287
|
+
getCollisionEndedObservable(body: PhysicsBody, instanceIndex?: number): Observable<IBasePhysicsCollisionEvent>;
|
|
288
|
+
setGravityFactor(body: PhysicsBody, factor: number, instanceIndex?: number): void;
|
|
289
|
+
getGravityFactor(body: PhysicsBody, instanceIndex?: number): number;
|
|
290
|
+
private _registerShape;
|
|
291
|
+
private _withFloatBuffer;
|
|
292
|
+
/** Copies bytes into the module for the length of `fn`; with no bytes, `fn` gets a null pointer. */
|
|
293
|
+
private _withByteBuffer;
|
|
294
|
+
private _withIntBuffer;
|
|
295
|
+
private _createOptionsFromGroundMesh;
|
|
296
|
+
initShape(shape: PhysicsShape, type: PhysicsShapeType, options: PhysicsShapeParameters): void;
|
|
297
|
+
private _initShapeFromPositions;
|
|
298
|
+
private _refreshShapeUsers;
|
|
299
|
+
/**
|
|
300
|
+
* Pushes changed description properties into the Box3D shapes that are already on the bodies using this shape,
|
|
301
|
+
* directly or through a container. Rebuilding them instead would drop their contacts and re-apply the body mass.
|
|
302
|
+
*/
|
|
303
|
+
private _syncShapeUsers;
|
|
304
|
+
setShapeFilterMembershipMask(shape: PhysicsShape, membershipMask: number): void;
|
|
305
|
+
getShapeFilterMembershipMask(shape: PhysicsShape): number;
|
|
306
|
+
setShapeFilterCollideMask(shape: PhysicsShape, collideMask: number): void;
|
|
307
|
+
getShapeFilterCollideMask(shape: PhysicsShape): number;
|
|
308
|
+
setMaterial(shape: PhysicsShape, material: PhysicsMaterial): void;
|
|
309
|
+
getMaterial(shape: PhysicsShape): PhysicsMaterial;
|
|
310
|
+
setDensity(shape: PhysicsShape, density: number): void;
|
|
311
|
+
getDensity(shape: PhysicsShape): number;
|
|
312
|
+
addChild(shape: PhysicsShape, newChild: PhysicsShape, translation?: Vector3, rotation?: Quaternion, scale?: Vector3): void;
|
|
313
|
+
removeChild(shape: PhysicsShape, childIndex: number): void;
|
|
314
|
+
getNumChildren(shape: PhysicsShape): number;
|
|
315
|
+
getBoundingBox(shape: PhysicsShape): BoundingBox;
|
|
316
|
+
getBodyBoundingBox(body: PhysicsBody): BoundingBox;
|
|
317
|
+
disposeShape(shape: PhysicsShape): void;
|
|
318
|
+
setTrigger(shape: PhysicsShape, isTrigger: boolean): void;
|
|
319
|
+
private _frameToBuffer;
|
|
320
|
+
private _buildFrames;
|
|
321
|
+
private _createJoint;
|
|
322
|
+
/** Reads Physics6DoFConstraint.limits into the axis table with Havok's rules. */
|
|
323
|
+
private _readSixDofLimits;
|
|
324
|
+
/**
|
|
325
|
+
* Maps the six axes of a SIX_DOF constraint onto one Box3D joint, following Havok's semantics: an axis that is not
|
|
326
|
+
* listed is free, 0/0 is locked, anything else is limited. The constraint frame is [axis, perpAxis, axis x perpAxis];
|
|
327
|
+
* ANGULAR_X rotates about axis, ANGULAR_Y about perpAxis and ANGULAR_Z about axis x perpAxis, all measured as the
|
|
328
|
+
* rotation of the child frame relative to the parent frame (right handed, like Havok).
|
|
329
|
+
* - all linear locked, all angular locked: weld
|
|
330
|
+
* - all linear locked, one angular axis open: revolute about it, with its limits (one sided ranges work)
|
|
331
|
+
* - all linear locked, two or three angular axes open: spherical, twist limits from ANGULAR_X and one symmetric
|
|
332
|
+
* cone from ANGULAR_Y/Z (Box3D has no elliptical cone, the larger swing range is used)
|
|
333
|
+
* - two linear locked, angular locked: prismatic along the open linear axis
|
|
334
|
+
* - only LINEAR_DISTANCE constrained: distance joint (a spring when min == max and a stiffness is set)
|
|
335
|
+
* - nothing constrained: filter joint (collision filtering only)
|
|
336
|
+
* Anything else warns once and uses the closest of these.
|
|
337
|
+
*/
|
|
338
|
+
private _planSixDof;
|
|
339
|
+
/** Box3D spring settings for a Havok spring constant and damping on a body pair. */
|
|
340
|
+
private _springToHertz;
|
|
341
|
+
initConstraint(constraint: PhysicsConstraint, body: PhysicsBody, childBody: PhysicsBody, instanceIndex?: number, childInstanceIndex?: number): void;
|
|
342
|
+
/** Length parameter passed to Box3D's distance joint at creation (the rest length of its spring). */
|
|
343
|
+
private _updateJointLength;
|
|
344
|
+
private _currentPivotDistance;
|
|
345
|
+
setEnabled(constraint: PhysicsConstraint, isEnabled: boolean): void;
|
|
346
|
+
private _destroyJoint;
|
|
347
|
+
private _recreateJoints;
|
|
348
|
+
getEnabled(constraint: PhysicsConstraint): boolean;
|
|
349
|
+
setCollisionsEnabled(constraint: PhysicsConstraint, isEnabled: boolean): void;
|
|
350
|
+
getCollisionsEnabled(constraint: PhysicsConstraint): boolean;
|
|
351
|
+
private _primaryAxis;
|
|
352
|
+
private _isAngularAxis;
|
|
353
|
+
private _isPrimaryAxis;
|
|
354
|
+
private _axisState;
|
|
355
|
+
private _applyAxisState;
|
|
356
|
+
/**
|
|
357
|
+
* Box3D's spherical joint has one motor for the whole joint: a relative angular velocity, and one spring towards a
|
|
358
|
+
* target rotation. Babylon has a motor per axis, so the three angular axes are combined into one target in the
|
|
359
|
+
* joint frame (ANGULAR_X about frame z, ANGULAR_Y about frame x, ANGULAR_Z about frame y).
|
|
360
|
+
*/
|
|
361
|
+
private _applySphericalMotor;
|
|
362
|
+
private _applyMotor;
|
|
363
|
+
/** Applies a SIX_DOF plan's limits, springs and motors to one of its Box3D joints. */
|
|
364
|
+
private _applySixDofPlan;
|
|
365
|
+
private _setAxis;
|
|
366
|
+
setAxisFriction(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, friction: number): void;
|
|
367
|
+
getAxisFriction(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<number>;
|
|
368
|
+
setAxisMode(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, limitMode: PhysicsConstraintAxisLimitMode): void;
|
|
369
|
+
getAxisMode(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<PhysicsConstraintAxisLimitMode>;
|
|
370
|
+
setAxisMinLimit(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, minLimit: number): void;
|
|
371
|
+
getAxisMinLimit(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<number>;
|
|
372
|
+
setAxisMaxLimit(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, limit: number): void;
|
|
373
|
+
getAxisMaxLimit(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<number>;
|
|
374
|
+
setAxisMotorType(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, motorType: PhysicsConstraintMotorType): void;
|
|
375
|
+
getAxisMotorType(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<PhysicsConstraintMotorType>;
|
|
376
|
+
setAxisMotorTarget(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, target: number): void;
|
|
377
|
+
getAxisMotorTarget(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<number>;
|
|
378
|
+
setAxisMotorMaxForce(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis, maxForce: number): void;
|
|
379
|
+
getAxisMotorMaxForce(constraint: PhysicsConstraint, axis: PhysicsConstraintAxis): Nullable<number>;
|
|
380
|
+
disposeConstraint(constraint: PhysicsConstraint): void;
|
|
381
|
+
getBodiesUsingConstraint(constraint: PhysicsConstraint): ConstrainedBodyPair[];
|
|
382
|
+
addConstraint(body: PhysicsBody, childBody: PhysicsBody, constraint: PhysicsConstraint, instanceIndex?: number, childInstanceIndex?: number): void;
|
|
383
|
+
/**
|
|
384
|
+
* Applies a radial impulse to every shape within the radius, like a grenade.
|
|
385
|
+
* @param position world position of the explosion
|
|
386
|
+
* @param radius radius of the explosion
|
|
387
|
+
* @param impulsePerArea impulse per surface area of the affected shapes
|
|
388
|
+
* @param falloff distance beyond the radius over which the impulse fades to zero
|
|
389
|
+
*/
|
|
390
|
+
explode(position: Vector3, radius: number, impulsePerArea: number, falloff?: number): void;
|
|
391
|
+
/**
|
|
392
|
+
* Box2D style collision group. Shapes sharing a negative group never collide with each other,
|
|
393
|
+
* shapes sharing a positive group always collide. Zero means no group.
|
|
394
|
+
* @param shape the shape
|
|
395
|
+
* @param groupIndex the group index
|
|
396
|
+
*/
|
|
397
|
+
setShapeFilterGroup(shape: PhysicsShape, groupIndex: number): void;
|
|
398
|
+
/**
|
|
399
|
+
* Rolling resistance for spheres and capsules (Babylon materials have no equivalent).
|
|
400
|
+
* @param shape the shape
|
|
401
|
+
* @param value resistance, typically in [0, 1]
|
|
402
|
+
*/
|
|
403
|
+
setShapeRollingResistance(shape: PhysicsShape, value: number): void;
|
|
404
|
+
/**
|
|
405
|
+
* Lets a body spin faster than the default angular speed cap (wheels).
|
|
406
|
+
* @param body the body
|
|
407
|
+
* @param allow true to allow fast rotation
|
|
408
|
+
* @param instanceIndex optional thin instance index
|
|
409
|
+
*/
|
|
410
|
+
setAllowFastRotation(body: PhysicsBody, allow: boolean, instanceIndex?: number): void;
|
|
411
|
+
/**
|
|
412
|
+
* Creates a Box3D wheel joint between a chassis and a wheel body.
|
|
413
|
+
* @param chassis the chassis body
|
|
414
|
+
* @param wheel the wheel body
|
|
415
|
+
* @param options wheel joint options
|
|
416
|
+
* @returns a handle used to drive and steer the wheel
|
|
417
|
+
*/
|
|
418
|
+
createWheelJoint(chassis: PhysicsBody, wheel: PhysicsBody, options: IBox3DWheelJointOptions): Box3DWheelJoint;
|
|
419
|
+
/**
|
|
420
|
+
* Creates a Box3D parallel joint: a spring that keeps a local axis of bodyB parallel to an axis
|
|
421
|
+
* of bodyA, for example to keep a vehicle upright without locking its motion.
|
|
422
|
+
* @param bodyA first body (often a static body)
|
|
423
|
+
* @param bodyB body to align
|
|
424
|
+
* @param axisA axis in bodyA local space
|
|
425
|
+
* @param axisB axis in bodyB local space
|
|
426
|
+
* @param hertz spring stiffness
|
|
427
|
+
* @param dampingRatio spring damping
|
|
428
|
+
* @param maxTorque maximum spring torque
|
|
429
|
+
* @returns a joint slot that can be passed to disposeExtraJoint
|
|
430
|
+
*/
|
|
431
|
+
createParallelJoint(bodyA: PhysicsBody, bodyB: PhysicsBody, axisA: Vector3, axisB: Vector3, hertz?: number, dampingRatio?: number, maxTorque?: number): number;
|
|
432
|
+
/**
|
|
433
|
+
* Destroys a joint created by createParallelJoint.
|
|
434
|
+
* @param slot the joint slot
|
|
435
|
+
*/
|
|
436
|
+
disposeExtraJoint(slot: number): void;
|
|
437
|
+
/**
|
|
438
|
+
* @internal
|
|
439
|
+
*/
|
|
440
|
+
_destroyExtraJoint(slot: number): void;
|
|
441
|
+
/**
|
|
442
|
+
* @internal
|
|
443
|
+
*/
|
|
444
|
+
_wheelCall(fn: string, slot: number, ...args: number[]): void;
|
|
445
|
+
raycast(from: Vector3, to: Vector3, result: PhysicsRaycastResult | Array<PhysicsRaycastResult>, query?: IRaycastQuery): void;
|
|
446
|
+
/**
|
|
447
|
+
* Copies `count` event records out of wasm memory and resolves their two body slots (at `slotOffset`) to the plugin's
|
|
448
|
+
* body references. Observers run user code that can grow the wasm memory, which detaches every HEAPF32 view (creating
|
|
449
|
+
* bodies or shapes, casting rays), or dispose bodies and hand their slots to new ones, so nothing is read from wasm
|
|
450
|
+
* memory or the slot table once the first observer has been called.
|
|
451
|
+
*/
|
|
452
|
+
private _readEvents;
|
|
453
|
+
private _notifyCollisions;
|
|
454
|
+
private _notifyTriggers;
|
|
455
|
+
dispose(): void;
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=box3dPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box3dPlugin.d.ts","sourceRoot":"","sources":["../src/box3dPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAc,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,gBAAgB,EAEhB,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,0BAA0B,EAG1B,wBAAwB,EAC3B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,KAAK,iBAAiB,EAAqD,MAAM,iDAAiD,CAAC;AAC5I,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,KAAK,QAAQ,EAAmB,MAAM,0BAA0B,CAAC;AAE1E,qHAAqH;AACrH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,OAAO,QAAQ,oDAAoD,CAAC;IAChE,UAAU,sBAAsB;QAC5B;;;;;WAKG;QACH,oBAAoB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC;;;WAGG;QACH,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B;;;;WAIG;QACH,eAAe,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;KACvC;CACJ;AAqGD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kCAAkC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,eAAe;IAKpB,OAAO,CAAC,OAAO;IACf,gBAAgB;IACT,KAAK,EAAE,MAAM;IANxB;;OAEG;gBAES,OAAO,EAAE,WAAW;IAC5B,gBAAgB;IACT,KAAK,EAAE,MAAM;IAGxB;;;OAGG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7C;;;OAGG;IACI,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI9C;;;OAGG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9C;;;;OAIG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI/D;;OAEG;IACI,OAAO,IAAI,IAAI;CAIzB;AAwND;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,YAAW,sBAAsB;IAyClD,OAAO,CAAC,qBAAqB;IAxCjC,+EAA+E;IACxE,KAAK,EAAE,GAAG,CAAC;IAClB,yBAAyB;IAClB,IAAI,SAAiB;IAC5B,qEAAqE;IAC9D,YAAY,SAAK;IACxB,yGAAyG;IAClG,cAAc,SAAK;IAE1B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,OAAO,CAAC,OAAO,CAAoF;IACnG,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,wBAAwB,CAAyD;IACzF,OAAO,CAAC,6BAA6B,CAA6D;IAClG,OAAO,CAAC,sBAAsB,CAAmB;IACjD,oGAAoG;IACpG,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAgE;IAChF,OAAO,CAAC,QAAQ,CAA0D;IAC1E,OAAO,CAAC,OAAO,CAAqB;IACpC,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAAK;IAE3B,4DAA4D;IACrD,qBAAqB,qCAA4C;IACxE,4CAA4C;IACrC,0BAA0B,yCAAgD;IACjF,uDAAuD;IAChD,4BAA4B,yCAAgD;IAEnF;;;;OAIG;gBAES,qBAAqB,qBAAO,EACpC,WAAW,EAAE,GAAG;IAyBpB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAmBpB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,WAAW,IAAI,MAAM;IAIrB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;IA8DnE,gBAAgB,IAAI,MAAM;IAI1B,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAK9E,oBAAoB,IAAI,MAAM;IAI9B,qBAAqB,IAAI,MAAM;IAItC;;;OAGG;IACI,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAM5J;;;OAGG;IACI,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjD;;;OAGG;IACI,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQnD,OAAO,CAAC,iBAAiB;IAkBlB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI;IAM5G,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAiB5F,OAAO,CAAC,4BAA4B;IA+B7B,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IA0B/D,OAAO,CAAC,gBAAgB;IAcjB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAYnC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIpC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,qBAAqB;IA6BtB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI;IAyB3E;;;;OAIG;IACI,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAwB1E,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAUnH,6GAA6G;IAC7G,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,aAAa;IAYd,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI;IAKhE,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;IAInD,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,gBAAgB;IAI1D,iHAAiH;IACjH,OAAO,CAAC,gBAAgB;IAMjB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAWhF,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/D,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAYpG,kGAAkG;IAClG,OAAO,CAAC,sBAAsB;IAK9B;;;;;;;;;OASG;IACI,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B5G,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIlF;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAuBrB,mHAAmH;IACnH,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,6BAA6B;IAyCrC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,iBAAiB;IASlB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAQvF,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAWpG,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAInF,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlF,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAInE,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAInF,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpE,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAInF,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMxF,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlG,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7F,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9F,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7E,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpF,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMzF,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG;QAAE,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAAA;KAAE;IAe3G,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAMpC,2BAA2B,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9F,gCAAgC,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAWnG,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,sBAAsB,CAAC;IAUrG,2BAA2B,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IAU9G,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjF,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ1E,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,gBAAgB;IAUxB,oGAAoG;IACpG,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,4BAA4B;IAmC7B,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAgIpG,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,kBAAkB;IAe1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgBhB,4BAA4B,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAO/E,4BAA4B,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAIzD,yBAAyB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAOzE,yBAAyB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAItD,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAOjE,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe;IAWjD,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMtD,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAIvC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAY1H,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAU1D,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAI3C,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW;IAQhD,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW;IASlD,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAoBvC,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAWhE,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IA0EpB,OAAO,CAAC,YAAY;IAYpB,iFAAiF;IACjF,OAAO,CAAC,iBAAiB;IAkBzB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,WAAW;IA8InB,oFAAoF;IACpF,OAAO,CAAC,cAAc;IAoBf,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI;IA0D1J,qGAAqG;IACrG,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,qBAAqB;IAetB,UAAU,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAU1E,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,eAAe;IAUhB,UAAU,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO;IAIlD,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAU7E,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO;IAKnE,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,eAAe;IAuCvB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,WAAW;IAsBnB,sFAAsF;IACtF,OAAO,CAAC,gBAAgB;IAuDxB,OAAO,CAAC,QAAQ;IAyCT,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnG,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAI7F,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,8BAA8B,GAAG,IAAI;IAIxH,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,8BAA8B,CAAC;IAIjH,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IASnG,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAI7F,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAShG,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAI7F,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,0BAA0B,GAAG,IAAI;IAIzH,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,0BAA0B,CAAC;IAIlH,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpG,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAIhG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAIlG,iBAAiB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IActD,wBAAwB,CAAC,UAAU,EAAE,iBAAiB,GAAG,mBAAmB,EAAE;IAQ9E,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzJ;;;;;;OAMG;IACI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAI5F;;;;;OAKG;IACI,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAMzE;;;;OAIG;IACI,yBAAyB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1E;;;;;OAKG;IACI,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5F;;;;;;OAMG;IACI,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,GAAG,eAAe;IA8CpH;;;;;;;;;;;OAWG;IACI,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,YAAY,SAAI,EAAE,SAAS,SAAS,GAAG,MAAM;IAY3J;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7C;;OAEG;IACI,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAU7D,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI;IAwDnI;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,iBAAiB;IAqEzB,OAAO,CAAC,eAAe;IAuBhB,OAAO,IAAI,IAAI;CAmBzB"}
|