@zylem/game-lib 0.7.0 → 0.8.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 +15 -1
- package/dist/actions.d.ts +71 -8
- package/dist/actions.js +1 -1
- package/dist/api/game-lib.api.json +54074 -0
- package/dist/api/game-lib.api.md +4544 -0
- package/dist/api/game-lib.d.ts +8258 -0
- package/dist/api/game-lib.typedoc.json +345421 -0
- package/dist/audio.js +1 -1
- package/dist/{base-node-life-cycle-CnJ-7zX-.d.ts → base-node-life-cycle-D2NuN1VB.d.ts} +12 -4
- package/dist/behavior.d.ts +2 -3
- package/dist/behavior.js +1 -1
- package/dist/blueprints-TbGY-h53.d.ts +162 -0
- package/dist/chunk-7FR5JSQ2.js +1 -0
- package/dist/chunk-7GYFZKK7.js +1 -0
- package/dist/chunk-7WRQ2UAN.js +1 -0
- package/dist/chunk-BH53MBAZ.js +1 -0
- package/dist/chunk-BIGH6D34.js +0 -0
- package/dist/chunk-CM5YRNBJ.js +19 -0
- package/dist/chunk-COM6HJ2L.js +1 -0
- package/dist/chunk-D2PATZCC.js +1 -0
- package/dist/chunk-DFLI7ICU.js +0 -0
- package/dist/chunk-E3UBSUPX.js +1 -0
- package/dist/chunk-FKIKN7RP.js +24 -0
- package/dist/chunk-G4HONLWC.js +1 -0
- package/dist/chunk-IKWE2W6L.js +1 -0
- package/dist/chunk-IPWUDOV5.js +1 -0
- package/dist/chunk-JEHFHUH4.js +0 -0
- package/dist/chunk-JNKPTL77.js +1 -0
- package/dist/chunk-JQKS42G4.js +1 -0
- package/dist/chunk-M3XNO56P.js +1 -0
- package/dist/chunk-ORIDWL3T.js +0 -0
- package/dist/chunk-QB3NL7VQ.js +1 -0
- package/dist/chunk-TAUWDQZF.js +9 -0
- package/dist/chunk-VS2D4B3W.js +1 -0
- package/dist/chunk-WQ3WMMZD.js +1 -0
- package/dist/chunk-XK63E4SX.js +1 -0
- package/dist/chunk-XNDS4YFR.js +1 -0
- package/dist/chunk-XNHVRFAK.js +1 -0
- package/dist/chunk-ZRT3ZQVH.js +1 -0
- package/dist/collision-builder-jF-toPIl.d.ts +38 -0
- package/dist/core.d.ts +45 -30
- package/dist/core.js +1 -24
- package/dist/debug-state-BPT6jEog.d.ts +17 -0
- package/dist/debug.d.ts +71 -19
- package/dist/debug.js +1 -1
- package/dist/{default-controls-BGc61yYl.d.ts → default-controls-0-vCnli7.d.ts} +3 -3
- package/dist/{entity-DNkYKfdp.d.ts → entity-BdSI8CL3.d.ts} +63 -444
- package/dist/entity-DZbFQ1Wg.d.ts +28 -0
- package/dist/{entity-type-map-C94h2TDW.d.ts → entity-type-map-Bd69SpAS.d.ts} +153 -6
- package/dist/entity.d.ts +11 -8
- package/dist/entity.js +1 -1
- package/dist/events.d.ts +10 -1
- package/dist/events.js +1 -1
- package/dist/{game-Cuj5gy7U.d.ts → game-C1FHVqXl.d.ts} +429 -133
- package/dist/game-default-QHROHW2O.js +1 -0
- package/dist/{game-interfaces-tfpM5NBk.d.ts → game-interfaces-mchNYSZE.d.ts} +2 -2
- package/dist/globals.d.ts +12 -1
- package/dist/globals.js +1 -1
- package/dist/graphics.d.ts +16 -46
- package/dist/graphics.js +1 -1
- package/dist/input-ui.d.ts +5 -4
- package/dist/input-ui.js +1 -1
- package/dist/input.d.ts +4 -3
- package/dist/input.js +1 -1
- package/dist/{material-Wz83vTTp.d.ts → material-9vJ6SZaI.d.ts} +25 -50
- package/dist/public.d.ts +38 -0
- package/dist/public.js +1 -0
- package/dist/runtime.d.ts +7 -381
- package/dist/runtime.js +1 -1
- package/dist/schema/entity.schema.json +244 -0
- package/dist/schema/game-config.schema.json +625 -0
- package/dist/schema/input-config.schema.json +499 -0
- package/dist/schema/stage-config.schema.json +93 -0
- package/dist/schema/stage.schema.json +271 -0
- package/dist/schema.d.ts +538 -0
- package/dist/schema.js +1 -0
- package/dist/stage-transition-CmGpV4tc.d.ts +46 -0
- package/dist/vector-CiSHbivc.d.ts +133 -0
- package/dist/web-components.d.ts +15 -12
- package/dist/web-components.js +1 -9
- package/dist/{zylem-stage-runtime-Cs-UDEVU.d.ts → zylem-camera-C3bn6BTI.d.ts} +62 -264
- package/package.json +28 -20
- package/dist/chunk-73VZQZUL.js +0 -1
- package/dist/chunk-A34ZG3L4.js +0 -1
- package/dist/chunk-CDPY4VOQ.js +0 -1
- package/dist/chunk-DR6XXZE7.js +0 -19
- package/dist/chunk-FM5TBEPO.js +0 -1
- package/dist/chunk-G2IIMSUH.js +0 -1
- package/dist/chunk-NIH5CONO.js +0 -1
- package/dist/chunk-ONWXGBWB.js +0 -1
- package/dist/chunk-QEDQDR27.js +0 -1
- package/dist/chunk-WKHW2QO2.js +0 -1
- package/dist/chunk-YHKXQ2ZN.js +0 -1
- package/dist/game-default-PZLLHYL7.js +0 -1
- package/dist/world-C9zdyl5d.d.ts +0 -103
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BufferGeometry, Material, Mesh, Group, Vector3, Color, ShaderMaterial } from 'three';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { SimulationColliderDefinition, TransformState, SimulationBodyDefinition, MoveableEntity, BehaviorRuntime, Vector, BehaviorDescriptor, BehaviorHandle, BehaviorRef } from '@zylem/behaviors/core';
|
|
3
|
+
import { c as Vec3, e as Vec3Input, b as Vec2Input, l as SimulationBody } from './vector-CiSHbivc.js';
|
|
4
|
+
import { M as MaterialBuilder, e as MaterialOptions } from './material-9vJ6SZaI.js';
|
|
5
|
+
import { C as CollisionBuilder, a as CollisionOptions } from './collision-builder-jF-toPIl.js';
|
|
6
|
+
import { a as SetupContext, U as UpdateContext, D as DestroyContext, h as SetupFunction, i as LoadedFunction, g as UpdateFunction, j as DestroyFunction, C as CleanupFunction, k as LoadedContext, l as CleanupContext } from './base-node-life-cycle-D2NuN1VB.js';
|
|
5
7
|
import { EventEmitterDelegate, EntityEvents } from './events.js';
|
|
6
|
-
import { TransformState, MoveableEntity, BehaviorDescriptor, BehaviorHandle, BehaviorRef } from '@zylem/behaviors/core';
|
|
7
8
|
|
|
8
9
|
interface NodeInterface {
|
|
9
10
|
uuid: string;
|
|
@@ -98,417 +99,19 @@ declare abstract class BaseNode<Options = any, T = any> implements NodeInterface
|
|
|
98
99
|
private recordLifecycleRegistration;
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
/**
|
|
102
|
-
* `WasmStageRuntime` — owns one wasm `WebAssembly.Instance` of `@zylem/runtime`
|
|
103
|
-
* and exposes the unified-Stage FFI as a set of typed TypeScript methods.
|
|
104
|
-
* Replaces the legacy {@link ZylemRuntimeStageAdapter} + {@link ZylemWorld}
|
|
105
|
-
* pair; every `ZylemStage` instantiates exactly one `WasmStageRuntime`.
|
|
106
|
-
*
|
|
107
|
-
* The runtime is the single source of truth for per-frame physics state.
|
|
108
|
-
* TS-side behaviors and visual layers (destructible-3d, particle-emitter,
|
|
109
|
-
* screen-visibility) read transforms from the render buffer; sim-only
|
|
110
|
-
* behaviors push their attach/query payload through the per-behavior
|
|
111
|
-
* helpers exposed here.
|
|
112
|
-
*/
|
|
113
|
-
/** Sentinel handle for "no entity / failed allocation". Mirrors `INVALID_SLOT` in Rust. */
|
|
114
|
-
declare const STAGE_INVALID_SLOT = 4294967295;
|
|
115
|
-
/** Fixed render-buffer stride in floats. Must match `STAGE_RENDER_STRIDE` in Rust. */
|
|
116
|
-
declare const STAGE_RENDER_STRIDE = 12;
|
|
117
|
-
/** Fixed event-buffer stride in floats. Must match `STAGE_EVENT_STRIDE` in Rust. */
|
|
118
|
-
declare const STAGE_EVENT_STRIDE = 6;
|
|
119
|
-
/** Fixed pose-scratch stride in floats. Must match `POSE_SCRATCH_LEN` in Rust. */
|
|
120
|
-
declare const STAGE_POSE_LEN = 7;
|
|
121
|
-
declare const enum StageBodyKind {
|
|
122
|
-
Dynamic = 0,
|
|
123
|
-
Static = 1,
|
|
124
|
-
KinematicPosition = 2,
|
|
125
|
-
KinematicVelocity = 3
|
|
126
|
-
}
|
|
127
|
-
declare const enum StageBoundaryDim {
|
|
128
|
-
Two = 2,
|
|
129
|
-
Three = 3
|
|
130
|
-
}
|
|
131
|
-
declare const enum StageRicochetDim {
|
|
132
|
-
Two = 2,
|
|
133
|
-
Three = 3
|
|
134
|
-
}
|
|
135
|
-
declare const enum StageRicochetReflection {
|
|
136
|
-
Mirror = 0,
|
|
137
|
-
Angled = 1
|
|
138
|
-
}
|
|
139
|
-
declare const enum StageTopDownPlane {
|
|
140
|
-
Xy = 0,
|
|
141
|
-
Xz = 1
|
|
142
|
-
}
|
|
143
|
-
declare const enum StageEventType {
|
|
144
|
-
CollisionStarted = 1,
|
|
145
|
-
CollisionStopped = 2,
|
|
146
|
-
BoundaryHit = 3,
|
|
147
|
-
Ricochet = 4,
|
|
148
|
-
RegionEntered = 5,
|
|
149
|
-
JumpStarted = 6,
|
|
150
|
-
Landed = 7,
|
|
151
|
-
Wrapped = 8,
|
|
152
|
-
CooldownFired = 9
|
|
153
|
-
}
|
|
154
|
-
interface StageEvent {
|
|
155
|
-
type: StageEventType;
|
|
156
|
-
primarySlot: number | null;
|
|
157
|
-
secondarySlot: number | null;
|
|
158
|
-
payload: [number, number, number];
|
|
159
|
-
}
|
|
160
|
-
interface StagePose {
|
|
161
|
-
position: [number, number, number];
|
|
162
|
-
rotation: [number, number, number, number];
|
|
163
|
-
}
|
|
164
|
-
interface StageBodyConfig {
|
|
165
|
-
kind: StageBodyKind;
|
|
166
|
-
position: readonly [number, number, number];
|
|
167
|
-
rotation: readonly [number, number, number, number];
|
|
168
|
-
linearDamping: number;
|
|
169
|
-
angularDamping: number;
|
|
170
|
-
gravityScale: number;
|
|
171
|
-
canSleep: boolean;
|
|
172
|
-
ccdEnabled: boolean;
|
|
173
|
-
lockRotation: readonly [boolean, boolean, boolean];
|
|
174
|
-
lockTranslation: readonly [boolean, boolean, boolean];
|
|
175
|
-
}
|
|
176
|
-
type StageColliderShape = {
|
|
177
|
-
type: 'box';
|
|
178
|
-
halfExtents: readonly [number, number, number];
|
|
179
|
-
} | {
|
|
180
|
-
type: 'sphere';
|
|
181
|
-
radius: number;
|
|
182
|
-
} | {
|
|
183
|
-
type: 'capsule';
|
|
184
|
-
halfHeight: number;
|
|
185
|
-
radius: number;
|
|
186
|
-
} | {
|
|
187
|
-
type: 'cylinder';
|
|
188
|
-
halfHeight: number;
|
|
189
|
-
radius: number;
|
|
190
|
-
} | {
|
|
191
|
-
type: 'convexHull';
|
|
192
|
-
vertices: Float32Array;
|
|
193
|
-
} | {
|
|
194
|
-
type: 'trimesh';
|
|
195
|
-
vertices: Float32Array;
|
|
196
|
-
indices: Uint32Array;
|
|
197
|
-
} | {
|
|
198
|
-
type: 'heightfield';
|
|
199
|
-
rows: number;
|
|
200
|
-
cols: number;
|
|
201
|
-
scale: readonly [number, number, number];
|
|
202
|
-
heights: Float32Array;
|
|
203
|
-
};
|
|
204
|
-
interface StageColliderConfig {
|
|
205
|
-
shape: StageColliderShape;
|
|
206
|
-
offset: readonly [number, number, number];
|
|
207
|
-
friction: number;
|
|
208
|
-
restitution: number;
|
|
209
|
-
sensor: boolean;
|
|
210
|
-
/** Packed Rapier interaction-groups: high 16 bits = membership, low 16 bits = filter. */
|
|
211
|
-
collisionGroups: number;
|
|
212
|
-
}
|
|
213
|
-
/** Minimal exports surface used by `WasmStageRuntime`. Mirrors `stage_ffi.rs`. */
|
|
214
|
-
interface StageWasmExports {
|
|
215
|
-
readonly memory: WebAssembly.Memory;
|
|
216
|
-
zylem_stage_create(initialCapacity: number): number;
|
|
217
|
-
zylem_stage_destroy(): void;
|
|
218
|
-
zylem_stage_set_gravity(x: number, y: number, z: number): void;
|
|
219
|
-
zylem_stage_step(dt: number): number;
|
|
220
|
-
zylem_stage_active_count(): number;
|
|
221
|
-
zylem_stage_capacity(): number;
|
|
222
|
-
zylem_stage_tick_count(): number;
|
|
223
|
-
zylem_stage_create_entity(): number;
|
|
224
|
-
zylem_stage_destroy_entity(slot: number): number;
|
|
225
|
-
zylem_stage_attach_body(slot: number, kind: number, px: number, py: number, pz: number, rx: number, ry: number, rz: number, rw: number, linearDamping: number, angularDamping: number, gravityScale: number, canSleep: number, ccdEnabled: number, lockRotX: number, lockRotY: number, lockRotZ: number, lockTransX: number, lockTransY: number, lockTransZ: number): number;
|
|
226
|
-
zylem_stage_add_collider_box(slot: number, hx: number, hy: number, hz: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
227
|
-
zylem_stage_add_collider_sphere(slot: number, radius: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
228
|
-
zylem_stage_add_collider_capsule(slot: number, halfHeight: number, radius: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
229
|
-
zylem_stage_add_collider_cylinder(slot: number, halfHeight: number, radius: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
230
|
-
zylem_stage_add_collider_convex_hull(slot: number, vertexOffset: number, vertexCount: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
231
|
-
zylem_stage_add_collider_trimesh(slot: number, vertexOffset: number, vertexCount: number, indexOffset: number, indexCount: number, ox: number, oy: number, oz: number, friction: number, restitution: number, sensor: number, collisionGroups: number): number;
|
|
232
|
-
zylem_stage_add_collider_heightfield(slot: number, rows: number, cols: number, sx: number, sy: number, sz: number, heightOffset: number, px: number, py: number, pz: number, friction: number, restitution: number, collisionGroups: number): number;
|
|
233
|
-
zylem_stage_get_pose(slot: number): number;
|
|
234
|
-
zylem_stage_pose_ptr(): number;
|
|
235
|
-
zylem_stage_pose_len(): number;
|
|
236
|
-
zylem_stage_set_position(slot: number, x: number, y: number, z: number): number;
|
|
237
|
-
zylem_stage_set_rotation(slot: number, x: number, y: number, z: number, w: number): number;
|
|
238
|
-
zylem_stage_set_linvel(slot: number, x: number, y: number, z: number): number;
|
|
239
|
-
zylem_stage_get_linvel(slot: number): number;
|
|
240
|
-
zylem_stage_set_angvel(slot: number, x: number, y: number, z: number): number;
|
|
241
|
-
zylem_stage_apply_impulse(slot: number, x: number, y: number, z: number): number;
|
|
242
|
-
zylem_stage_vec3_ptr(): number;
|
|
243
|
-
zylem_stage_render_ptr(): number;
|
|
244
|
-
zylem_stage_render_len(): number;
|
|
245
|
-
zylem_stage_render_stride(): number;
|
|
246
|
-
zylem_stage_event_ptr(): number;
|
|
247
|
-
zylem_stage_event_len(): number;
|
|
248
|
-
zylem_stage_event_count(): number;
|
|
249
|
-
zylem_stage_event_stride(): number;
|
|
250
|
-
zylem_stage_query_ptr(): number;
|
|
251
|
-
zylem_stage_query_len(): number;
|
|
252
|
-
zylem_stage_scratch_ptr(): number;
|
|
253
|
-
zylem_stage_scratch_capacity(): number;
|
|
254
|
-
zylem_stage_attach_cooldown(slot: number): number;
|
|
255
|
-
zylem_stage_cooldown_register(slot: number, id: number, duration: number, immediate: number): number;
|
|
256
|
-
zylem_stage_cooldown_fire(slot: number, id: number): number;
|
|
257
|
-
zylem_stage_cooldown_reset(slot: number, id: number): number;
|
|
258
|
-
zylem_stage_cooldown_remaining(slot: number, id: number): number;
|
|
259
|
-
zylem_stage_attach_world_boundary(slot: number, dim: number, top: number, bottom: number, left: number, right: number, front: number, back: number, padding: number): number;
|
|
260
|
-
zylem_stage_query_world_boundary(slot: number): number;
|
|
261
|
-
zylem_stage_attach_screen_wrap(slot: number, width: number, height: number, centerX: number, centerY: number, edgeThreshold: number): number;
|
|
262
|
-
zylem_stage_query_screen_wrap(slot: number): number;
|
|
263
|
-
zylem_stage_attach_ricochet(slot: number, dim: number, minSpeed: number, maxSpeed: number, speedMultiplier: number, maxAngleDeg: number, reflectionMode: number): number;
|
|
264
|
-
zylem_stage_query_ricochet(slot: number): number;
|
|
265
|
-
zylem_stage_attach_thruster(slot: number, maxSpeed: number, acceleration: number, turnRateRadS: number, linearDamping: number): number;
|
|
266
|
-
zylem_stage_set_thruster_input(slot: number, thrust: number, turn: number): void;
|
|
267
|
-
zylem_stage_query_thruster(slot: number): number;
|
|
268
|
-
zylem_stage_attach_top_down(slot: number, plane: number, speed: number, faceMovement: number): number;
|
|
269
|
-
zylem_stage_set_top_down_input(slot: number, a: number, b: number): void;
|
|
270
|
-
zylem_stage_attach_jumper_2d(slot: number, jumpForce: number, maxJumps: number, jumpBufferTime: number, coyoteTime: number, gravity: number): number;
|
|
271
|
-
zylem_stage_set_jumper_2d_input(slot: number, jumpPressed: number): void;
|
|
272
|
-
zylem_stage_query_jumper_2d(slot: number): number;
|
|
273
|
-
zylem_stage_attach_jumper_3d(slot: number, jumpForce: number, maxJumps: number, gravity: number): number;
|
|
274
|
-
zylem_stage_set_jumper_3d_input(slot: number, jump: number): void;
|
|
275
|
-
zylem_stage_query_jumper_3d(slot: number): number;
|
|
276
|
-
zylem_stage_attach_shooter_2d(slot: number, fireRateHz: number, muzzleOffsetX: number, muzzleOffsetY: number, muzzleSpeed: number): number;
|
|
277
|
-
zylem_stage_shooter_2d_fire(slot: number, x: number, y: number, z: number, yaw: number): number;
|
|
278
|
-
zylem_stage_query_shooter_2d(slot: number): number;
|
|
279
|
-
zylem_stage_attach_platformer_3d(slot: number, halfHeight: number, radius: number, walkSpeed: number, runSpeed: number, jumpForce: number, maxJumps: number, gravity: number): number;
|
|
280
|
-
zylem_stage_set_platformer_3d_input_axes(slot: number, moveX: number, moveZ: number): void;
|
|
281
|
-
zylem_stage_set_platformer_3d_input_buttons(slot: number, jump: number, run: number): void;
|
|
282
|
-
zylem_stage_query_platformer_3d(slot: number): number;
|
|
283
|
-
zylem_stage_attach_first_person(slot: number, walkSpeed: number, runSpeed: number, eyeHeight: number, lookSensitivity: number): number;
|
|
284
|
-
zylem_stage_set_first_person_input(slot: number, moveX: number, moveZ: number, lookYaw: number, lookPitch: number, run: number): void;
|
|
285
|
-
zylem_stage_query_first_person(slot: number): number;
|
|
286
|
-
zylem_stage_invalid_slot(): number;
|
|
287
|
-
}
|
|
288
|
-
/** Default options for `createWasmStageRuntime`. */
|
|
289
|
-
interface WasmStageRuntimeOptions {
|
|
290
|
-
initialCapacity?: number;
|
|
291
|
-
gravity?: readonly [number, number, number];
|
|
292
|
-
imports?: WebAssembly.Imports;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Owns the wasm instance plus the live float-views over its render / event /
|
|
296
|
-
* pose / scratch buffers. The instance is per-`ZylemStage`; each stage gets
|
|
297
|
-
* its own `WebAssembly.Instance` so the singleton inside `stage_ffi.rs`
|
|
298
|
-
* stays single-stage scoped (today's `thread_local!` contract).
|
|
299
|
-
*/
|
|
300
|
-
declare class WasmStageRuntime {
|
|
301
|
-
readonly exports: StageWasmExports;
|
|
302
|
-
private readonly memory;
|
|
303
|
-
private renderView;
|
|
304
|
-
private eventView;
|
|
305
|
-
private poseView;
|
|
306
|
-
private vec3View;
|
|
307
|
-
private queryView;
|
|
308
|
-
private scratchView;
|
|
309
|
-
constructor(exports: StageWasmExports, options?: WasmStageRuntimeOptions);
|
|
310
|
-
/** Recreate typed views over wasm memory. Call after step() or whenever memory may have grown. */
|
|
311
|
-
refreshViews(): void;
|
|
312
|
-
/** Step the simulation by `dt` seconds. Refreshes views afterwards. */
|
|
313
|
-
step(dt: number): number;
|
|
314
|
-
dispose(): void;
|
|
315
|
-
get tickCount(): number;
|
|
316
|
-
get activeCount(): number;
|
|
317
|
-
setGravity(x: number, y: number, z: number): void;
|
|
318
|
-
createEntity(): number;
|
|
319
|
-
destroyEntity(slot: number): boolean;
|
|
320
|
-
attachBody(slot: number, config: StageBodyConfig): boolean;
|
|
321
|
-
addCollider(slot: number, config: StageColliderConfig): boolean;
|
|
322
|
-
private stageScratch;
|
|
323
|
-
private stageScratchIndices;
|
|
324
|
-
getPose(slot: number, out?: StagePose): StagePose | null;
|
|
325
|
-
setPosition(slot: number, x: number, y: number, z: number): boolean;
|
|
326
|
-
setRotation(slot: number, x: number, y: number, z: number, w: number): boolean;
|
|
327
|
-
setLinearVelocity(slot: number, x: number, y: number, z: number): boolean;
|
|
328
|
-
getLinearVelocity(slot: number, out?: [number, number, number]): [number, number, number] | null;
|
|
329
|
-
setAngularVelocity(slot: number, x: number, y: number, z: number): boolean;
|
|
330
|
-
applyImpulse(slot: number, x: number, y: number, z: number): boolean;
|
|
331
|
-
/** Read-only view over the render buffer; one slot occupies {@link STAGE_RENDER_STRIDE} floats. */
|
|
332
|
-
get render(): Float32Array;
|
|
333
|
-
get renderStride(): number;
|
|
334
|
-
/** Drain the wasm event buffer into a fresh array of typed events. */
|
|
335
|
-
drainEvents(): StageEvent[];
|
|
336
|
-
get queryScratch(): Float32Array;
|
|
337
|
-
attachCooldown(slot: number): boolean;
|
|
338
|
-
registerCooldown(slot: number, id: number, durationSeconds: number, immediate?: boolean): boolean;
|
|
339
|
-
fireCooldown(slot: number, id: number): boolean;
|
|
340
|
-
resetCooldown(slot: number, id: number): boolean;
|
|
341
|
-
cooldownRemaining(slot: number, id: number): number;
|
|
342
|
-
attachWorldBoundary(slot: number, dim: StageBoundaryDim, bounds: {
|
|
343
|
-
top: number;
|
|
344
|
-
bottom: number;
|
|
345
|
-
left: number;
|
|
346
|
-
right: number;
|
|
347
|
-
front: number;
|
|
348
|
-
back: number;
|
|
349
|
-
padding?: number;
|
|
350
|
-
}): boolean;
|
|
351
|
-
queryWorldBoundary(slot: number): {
|
|
352
|
-
hits: number;
|
|
353
|
-
clamped: [number, number, number];
|
|
354
|
-
} | null;
|
|
355
|
-
attachScreenWrap(slot: number, opts: {
|
|
356
|
-
width: number;
|
|
357
|
-
height: number;
|
|
358
|
-
centerX?: number;
|
|
359
|
-
centerY?: number;
|
|
360
|
-
edgeThreshold?: number;
|
|
361
|
-
}): boolean;
|
|
362
|
-
queryScreenWrap(slot: number): {
|
|
363
|
-
fsm: number;
|
|
364
|
-
lastWrappedAxes: number;
|
|
365
|
-
} | null;
|
|
366
|
-
attachRicochet(slot: number, dim: StageRicochetDim, opts: {
|
|
367
|
-
minSpeed: number;
|
|
368
|
-
maxSpeed: number;
|
|
369
|
-
speedMultiplier: number;
|
|
370
|
-
maxAngleDeg: number;
|
|
371
|
-
reflectionMode: StageRicochetReflection;
|
|
372
|
-
}): boolean;
|
|
373
|
-
queryRicochet(slot: number): {
|
|
374
|
-
bounces: number;
|
|
375
|
-
lastKind: number;
|
|
376
|
-
} | null;
|
|
377
|
-
attachThruster(slot: number, opts: {
|
|
378
|
-
maxSpeed: number;
|
|
379
|
-
acceleration: number;
|
|
380
|
-
turnRateRadPerSec: number;
|
|
381
|
-
linearDamping: number;
|
|
382
|
-
}): boolean;
|
|
383
|
-
setThrusterInput(slot: number, thrust: number, turn: number): void;
|
|
384
|
-
queryThruster(slot: number): {
|
|
385
|
-
headingRad: number;
|
|
386
|
-
speed: number;
|
|
387
|
-
} | null;
|
|
388
|
-
attachTopDown(slot: number, opts: {
|
|
389
|
-
plane: StageTopDownPlane;
|
|
390
|
-
speed: number;
|
|
391
|
-
faceMovement?: boolean;
|
|
392
|
-
}): boolean;
|
|
393
|
-
setTopDownInput(slot: number, axisA: number, axisB: number): void;
|
|
394
|
-
attachJumper2D(slot: number, opts: {
|
|
395
|
-
jumpForce: number;
|
|
396
|
-
maxJumps: number;
|
|
397
|
-
jumpBufferTime: number;
|
|
398
|
-
coyoteTime: number;
|
|
399
|
-
gravity: number;
|
|
400
|
-
}): boolean;
|
|
401
|
-
setJumper2DInput(slot: number, jumpPressed: boolean): void;
|
|
402
|
-
queryJumper2D(slot: number): {
|
|
403
|
-
grounded: boolean;
|
|
404
|
-
jumpCount: number;
|
|
405
|
-
coyote: number;
|
|
406
|
-
jumpBuffer: number;
|
|
407
|
-
} | null;
|
|
408
|
-
attachJumper3D(slot: number, opts: {
|
|
409
|
-
jumpForce: number;
|
|
410
|
-
maxJumps: number;
|
|
411
|
-
gravity: number;
|
|
412
|
-
}): boolean;
|
|
413
|
-
setJumper3DInput(slot: number, jump: boolean): void;
|
|
414
|
-
queryJumper3D(slot: number): {
|
|
415
|
-
grounded: boolean;
|
|
416
|
-
jumpCount: number;
|
|
417
|
-
verticalVelocity: number;
|
|
418
|
-
} | null;
|
|
419
|
-
attachShooter2D(slot: number, opts: {
|
|
420
|
-
fireRateHz: number;
|
|
421
|
-
muzzleOffsetX: number;
|
|
422
|
-
muzzleOffsetY: number;
|
|
423
|
-
muzzleSpeed: number;
|
|
424
|
-
}): boolean;
|
|
425
|
-
fireShooter2D(slot: number, x: number, y: number, z: number, yaw: number): boolean;
|
|
426
|
-
queryShooter2D(slot: number): {
|
|
427
|
-
cooldown: number;
|
|
428
|
-
firedCount: number;
|
|
429
|
-
} | null;
|
|
430
|
-
attachPlatformer3D(slot: number, opts: {
|
|
431
|
-
halfHeight: number;
|
|
432
|
-
radius: number;
|
|
433
|
-
walkSpeed: number;
|
|
434
|
-
runSpeed: number;
|
|
435
|
-
jumpForce: number;
|
|
436
|
-
maxJumps: number;
|
|
437
|
-
gravity: number;
|
|
438
|
-
}): boolean;
|
|
439
|
-
setPlatformer3DInputAxes(slot: number, moveX: number, moveZ: number): void;
|
|
440
|
-
setPlatformer3DInputButtons(slot: number, jump: boolean, run: boolean): void;
|
|
441
|
-
queryPlatformer3D(slot: number): {
|
|
442
|
-
grounded: boolean;
|
|
443
|
-
jumpCount: number;
|
|
444
|
-
fsmState: number;
|
|
445
|
-
speed: number;
|
|
446
|
-
} | null;
|
|
447
|
-
attachFirstPerson(slot: number, opts: {
|
|
448
|
-
walkSpeed: number;
|
|
449
|
-
runSpeed: number;
|
|
450
|
-
eyeHeight: number;
|
|
451
|
-
lookSensitivity: number;
|
|
452
|
-
}): boolean;
|
|
453
|
-
setFirstPersonInput(slot: number, opts: {
|
|
454
|
-
moveX: number;
|
|
455
|
-
moveZ: number;
|
|
456
|
-
lookYawDelta: number;
|
|
457
|
-
lookPitchDelta: number;
|
|
458
|
-
run: boolean;
|
|
459
|
-
}): void;
|
|
460
|
-
queryFirstPerson(slot: number): {
|
|
461
|
-
yaw: number;
|
|
462
|
-
pitch: number;
|
|
463
|
-
speed: number;
|
|
464
|
-
eyeHeight: number;
|
|
465
|
-
} | null;
|
|
466
|
-
}
|
|
467
|
-
/** Loads + instantiates a wasm module and constructs a `WasmStageRuntime`. */
|
|
468
|
-
declare function createWasmStageRuntime(source: RequestInfo | URL | ArrayBuffer, options?: WasmStageRuntimeOptions): Promise<WasmStageRuntime>;
|
|
469
|
-
|
|
470
|
-
/**
|
|
471
|
-
* Options for configuring entity collision behavior.
|
|
472
|
-
*/
|
|
473
|
-
interface CollisionOptions {
|
|
474
|
-
static?: boolean;
|
|
475
|
-
sensor?: boolean;
|
|
476
|
-
size?: Vec3Input;
|
|
477
|
-
position?: Vec3Input;
|
|
478
|
-
collisionType?: string;
|
|
479
|
-
collisionFilter?: string[];
|
|
480
|
-
}
|
|
481
|
-
declare class CollisionBuilder {
|
|
482
|
-
static: boolean;
|
|
483
|
-
sensor: boolean;
|
|
484
|
-
gravity: Vec3;
|
|
485
|
-
build(options: Partial<CollisionOptions>): [RigidBodyDesc, ColliderDesc];
|
|
486
|
-
withCollision(collisionOptions: Partial<CollisionOptions>): this;
|
|
487
|
-
collider(options: CollisionOptions): ColliderDesc;
|
|
488
|
-
bodyDesc({ isDynamicBody }: {
|
|
489
|
-
isDynamicBody?: boolean | undefined;
|
|
490
|
-
}): RigidBodyDesc;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
102
|
/**
|
|
494
103
|
* TODO: allow for multiple materials requires geometry groups
|
|
495
104
|
* TODO: allow for instanced uniforms
|
|
496
105
|
* TODO: allow for geometry groups
|
|
497
|
-
* TODO: allow for batched meshes
|
|
498
|
-
* import { InstancedUniformsMesh } from 'three-instanced-uniforms-mesh';
|
|
499
|
-
* may not need geometry groups for shaders though
|
|
500
|
-
* setGeometry<T extends BufferGeometry>(geometry: T) {
|
|
501
|
-
* MeshBuilder.bachedMesh = new BatchedMesh(10, 5000, 10000, material);
|
|
502
|
-
* }
|
|
503
106
|
*/
|
|
504
|
-
type MeshBuilderOptions = Partial<Pick<GameEntityOptions, '
|
|
107
|
+
type MeshBuilderOptions = Partial<Pick<GameEntityOptions, 'material'>>;
|
|
505
108
|
declare class MeshBuilder {
|
|
506
|
-
_build(
|
|
109
|
+
_build(_meshOptions: MeshBuilderOptions, geometry: BufferGeometry, materials: Material[]): Mesh;
|
|
507
110
|
_postBuild(): void;
|
|
508
111
|
}
|
|
509
112
|
|
|
510
113
|
declare abstract class EntityCollisionBuilder extends CollisionBuilder {
|
|
511
|
-
abstract collider(options: GameEntityOptions):
|
|
114
|
+
abstract collider(options: GameEntityOptions): SimulationColliderDefinition;
|
|
512
115
|
}
|
|
513
116
|
declare abstract class EntityMeshBuilder extends MeshBuilder {
|
|
514
117
|
build(options: GameEntityOptions): BufferGeometry;
|
|
@@ -528,8 +131,17 @@ declare abstract class EntityBuilder<T extends GameEntity<U> & P, U extends Game
|
|
|
528
131
|
protected abstract createEntity(options: Partial<U>): T;
|
|
529
132
|
}
|
|
530
133
|
|
|
134
|
+
/** Structural slice of the physics body used by rotation helpers. */
|
|
135
|
+
interface RotatableBodyLike {
|
|
136
|
+
rotation(): {
|
|
137
|
+
x: number;
|
|
138
|
+
y: number;
|
|
139
|
+
z: number;
|
|
140
|
+
w: number;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
531
143
|
interface RotatableEntity {
|
|
532
|
-
body:
|
|
144
|
+
body: RotatableBodyLike | null;
|
|
533
145
|
group: any;
|
|
534
146
|
transformStore?: TransformState;
|
|
535
147
|
}
|
|
@@ -615,14 +227,14 @@ interface RotatableEntityAPI extends RotatableEntity {
|
|
|
615
227
|
}
|
|
616
228
|
|
|
617
229
|
/**
|
|
618
|
-
* A built collision component containing
|
|
619
|
-
* Returned by collision factory functions
|
|
620
|
-
* and consumed by GameEntity.add().
|
|
230
|
+
* A built collision component containing plain body and collider definitions
|
|
231
|
+
* for the behaviors `Simulation`. Returned by collision factory functions
|
|
232
|
+
* (boxCollision, sphereCollision, etc.) and consumed by GameEntity.add().
|
|
621
233
|
*/
|
|
622
234
|
interface CollisionComponent {
|
|
623
235
|
__kind: 'collision';
|
|
624
|
-
bodyDesc:
|
|
625
|
-
colliderDesc:
|
|
236
|
+
bodyDesc: SimulationBodyDefinition;
|
|
237
|
+
colliderDesc: SimulationColliderDefinition;
|
|
626
238
|
cloneComponent: () => CollisionComponent;
|
|
627
239
|
}
|
|
628
240
|
interface BaseCollisionOptions {
|
|
@@ -630,6 +242,10 @@ interface BaseCollisionOptions {
|
|
|
630
242
|
static?: boolean;
|
|
631
243
|
/** Whether this collider is a sensor */
|
|
632
244
|
sensor?: boolean;
|
|
245
|
+
/** Allow the body to sleep when at rest (recommended for bulk dynamic scenes) */
|
|
246
|
+
canSleep?: boolean;
|
|
247
|
+
/** Continuous collision detection (expensive at scale; disable for small boxes) */
|
|
248
|
+
ccdEnabled?: boolean;
|
|
633
249
|
/** Position offset relative to the entity origin */
|
|
634
250
|
offset?: Vec3Input;
|
|
635
251
|
/** Collision type string for group filtering */
|
|
@@ -771,13 +387,13 @@ type IBuilder<BuilderOptions = any> = {
|
|
|
771
387
|
postBuild: (options: BuilderOptions) => BuilderOptions;
|
|
772
388
|
};
|
|
773
389
|
type GameEntitySimulationMode = 'ts' | 'runtime';
|
|
774
|
-
|
|
390
|
+
/** Scene-direct, WebGPU bundle (static), or instanced pack. Default `none`. */
|
|
391
|
+
type RenderCategory = 'none' | 'environment' | 'pack';
|
|
775
392
|
type RuntimeEntityBodyMode = 'dynamic' | 'static' | 'none';
|
|
776
393
|
type RuntimeEntityColorMode = 'base' | 'heatTint';
|
|
777
394
|
interface RuntimeEntityOptions {
|
|
778
395
|
simulation?: GameEntitySimulationMode;
|
|
779
|
-
|
|
780
|
-
batchKeyOverride?: string;
|
|
396
|
+
packKeyOverride?: string;
|
|
781
397
|
body?: RuntimeEntityBodyMode;
|
|
782
398
|
colorMode?: RuntimeEntityColorMode;
|
|
783
399
|
}
|
|
@@ -786,7 +402,8 @@ type GameEntityOptions = {
|
|
|
786
402
|
color?: Color;
|
|
787
403
|
size?: Vec3Input;
|
|
788
404
|
position?: Vec3Input;
|
|
789
|
-
|
|
405
|
+
/** Render path: `environment` (bundle), `pack` (instanced), or `none` (default). */
|
|
406
|
+
category?: RenderCategory;
|
|
790
407
|
runtime?: RuntimeEntityOptions;
|
|
791
408
|
collision?: Partial<CollisionOptions>;
|
|
792
409
|
material?: Partial<MaterialOptions>;
|
|
@@ -814,46 +431,51 @@ declare class GameEntity<O extends GameEntityOptions> extends BaseNode<O> implem
|
|
|
814
431
|
group: Group | undefined;
|
|
815
432
|
mesh: Mesh | undefined;
|
|
816
433
|
materials: Material[] | undefined;
|
|
817
|
-
bodyDesc:
|
|
818
|
-
body:
|
|
434
|
+
bodyDesc: SimulationBodyDefinition | null;
|
|
435
|
+
body: SimulationBody | null;
|
|
819
436
|
physicsAttached: boolean;
|
|
820
|
-
|
|
821
|
-
|
|
437
|
+
/**
|
|
438
|
+
* The physics world that currently owns this entity's body/colliders.
|
|
439
|
+
* Tagged on registration and checked on teardown so a stale world never
|
|
440
|
+
* frees handles another world now owns (which would poison the wasm
|
|
441
|
+
* simulation). Untyped to avoid a circular import.
|
|
442
|
+
*/
|
|
443
|
+
physicsWorldRef: unknown;
|
|
444
|
+
colliderDesc: SimulationColliderDefinition | undefined;
|
|
822
445
|
custom: Record<string, any>;
|
|
823
446
|
/** All collider descriptions for this entity (including primary) */
|
|
824
|
-
colliderDescs:
|
|
825
|
-
/** All colliders attached to this entity's rigid body */
|
|
826
|
-
colliders: Collider[];
|
|
447
|
+
colliderDescs: SimulationColliderDefinition[];
|
|
827
448
|
/** Additional meshes for compound visual entities (added via add()) */
|
|
828
449
|
compoundMeshes: Mesh[];
|
|
829
450
|
debugInfo: Record<string, any>;
|
|
830
451
|
debugMaterial: ShaderMaterial | undefined;
|
|
831
452
|
collisionDelegate: CollisionDelegate<this, O>;
|
|
832
453
|
collisionType?: string;
|
|
833
|
-
/**
|
|
834
|
-
|
|
835
|
-
/**
|
|
454
|
+
/** Pack key for instanced rendering (null if not instanced) */
|
|
455
|
+
packKey: string | null;
|
|
456
|
+
/** Bundle key for WebGPU bundle rendering (null if not bundled) */
|
|
457
|
+
bundleKey: string | null;
|
|
458
|
+
/** Index within the instanced mesh pack */
|
|
836
459
|
instanceId: number;
|
|
837
460
|
/** Whether this entity uses instanced rendering */
|
|
838
461
|
isInstanced: boolean;
|
|
839
|
-
/**
|
|
840
|
-
|
|
462
|
+
/** Whether this entity is drawn via a WebGPU render bundle */
|
|
463
|
+
isBundled: boolean;
|
|
841
464
|
/**
|
|
842
|
-
*
|
|
843
|
-
*
|
|
844
|
-
*
|
|
845
|
-
* `entity.body` / `entity.collider` fields once Phase 3 lands.
|
|
465
|
+
* Raw wasm slot index for this entity in the stage's `Simulation`; -1 when
|
|
466
|
+
* not attached. Behavior systems address the runtime's slot-indexed buffers by
|
|
467
|
+
* this slot.
|
|
846
468
|
*/
|
|
847
469
|
runtimeHandle: number;
|
|
848
|
-
/** True once the entity has been
|
|
470
|
+
/** True once the entity has been spawned into the wasm simulation. */
|
|
849
471
|
runtimeAttached: boolean;
|
|
850
472
|
/**
|
|
851
|
-
*
|
|
852
|
-
* `
|
|
853
|
-
* {@link GameEntity.setPose} can route through
|
|
854
|
-
*
|
|
473
|
+
* The stage simulation's low-level runtime adapter. Set by
|
|
474
|
+
* `ZylemWorld.addEntity()` so {@link GameEntity.getPose} /
|
|
475
|
+
* {@link GameEntity.setPose} and behavior descriptors can route through
|
|
476
|
+
* the runtime without threading the handle around.
|
|
855
477
|
*/
|
|
856
|
-
wasmStageRef:
|
|
478
|
+
wasmStageRef: BehaviorRuntime | null;
|
|
857
479
|
protected eventDelegate: EventEmitterDelegate<EntityEvents>;
|
|
858
480
|
private behaviorRefs;
|
|
859
481
|
private cloneFactory;
|
|
@@ -893,10 +515,8 @@ declare class GameEntity<O extends GameEntityOptions> extends BaseNode<O> implem
|
|
|
893
515
|
getRotation: () => any;
|
|
894
516
|
constructor();
|
|
895
517
|
/**
|
|
896
|
-
* Read the entity's pose
|
|
897
|
-
* the entity has
|
|
898
|
-
* legacy TS Rapier `RigidBody` translation/rotation. Returns `null` when
|
|
899
|
-
* neither source is available.
|
|
518
|
+
* Read the entity's pose from the wasm simulation. Returns `null` when
|
|
519
|
+
* the entity has not been spawned into the runtime yet.
|
|
900
520
|
*/
|
|
901
521
|
getPose(): {
|
|
902
522
|
position: Vec3;
|
|
@@ -908,8 +528,7 @@ declare class GameEntity<O extends GameEntityOptions> extends BaseNode<O> implem
|
|
|
908
528
|
};
|
|
909
529
|
} | null;
|
|
910
530
|
/**
|
|
911
|
-
* Write the entity's pose
|
|
912
|
-
* when present; otherwise writes to the legacy TS Rapier `RigidBody`.
|
|
531
|
+
* Write the entity's pose into the wasm simulation.
|
|
913
532
|
*
|
|
914
533
|
* Either or both of `position` and `rotation` may be omitted to leave
|
|
915
534
|
* that component unchanged.
|
|
@@ -1040,4 +659,4 @@ declare class GameEntity<O extends GameEntityOptions> extends BaseNode<O> implem
|
|
|
1040
659
|
*/
|
|
1041
660
|
declare function create(options?: Partial<GameEntityOptions>): GameEntity<GameEntityOptions>;
|
|
1042
661
|
|
|
1043
|
-
export { type Action as A,
|
|
662
|
+
export { type Action as A, BaseNode as B, type CollisionComponent as C, EntityMeshBuilder as D, EntityBuilder as E, EntityCollisionBuilder as F, GameEntity as G, type NodeInterface as N, type GameEntityOptions as a, boxCollision as b, create as c, coneCollision as d, cylinderCollision as e, pillCollision as f, planeCollision as g, rotateYEuler as h, rotateEuler as i, rotateX as j, rotateY as k, rotateZ as l, setRotationY as m, setRotationX as n, setRotationZ as o, pyramidCollision as p, setRotationDegrees as q, rotateInDirection as r, sphereCollision as s, setRotationDegreesY as t, setRotationDegreesX as u, setRotationDegreesZ as v, setRotation as w, getRotation as x, GameEntityLifeCycle as y, zoneCollision as z };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Group, Mesh } from 'three';
|
|
2
|
+
import { l as SimulationBody } from './vector-CiSHbivc.js';
|
|
3
|
+
|
|
4
|
+
type LifecycleFunction<T> = (params?: any) => void;
|
|
5
|
+
interface Entity<T = any> {
|
|
6
|
+
setup: (entity: T) => void;
|
|
7
|
+
destroy: () => void;
|
|
8
|
+
update: LifecycleFunction<T>;
|
|
9
|
+
type: string;
|
|
10
|
+
_collision?: (entity: any, other: any, globals?: any) => void;
|
|
11
|
+
_destroy?: (globals?: any) => void;
|
|
12
|
+
name?: string;
|
|
13
|
+
tag?: Set<string>;
|
|
14
|
+
}
|
|
15
|
+
interface StageEntity extends Entity {
|
|
16
|
+
uuid: string;
|
|
17
|
+
body: SimulationBody;
|
|
18
|
+
group: Group;
|
|
19
|
+
mesh: Mesh;
|
|
20
|
+
instanceId: number;
|
|
21
|
+
isInstanced?: boolean;
|
|
22
|
+
isBundled?: boolean;
|
|
23
|
+
controlledRotation: boolean;
|
|
24
|
+
name: string;
|
|
25
|
+
markedForRemoval: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type { Entity as E, LifecycleFunction as L, StageEntity as S };
|