@zylem/game-lib 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -16
  3. package/dist/actions.d.ts +30 -21
  4. package/dist/actions.js +628 -145
  5. package/dist/actions.js.map +1 -1
  6. package/dist/behavior/platformer-3d.d.ts +296 -0
  7. package/dist/behavior/platformer-3d.js +518 -0
  8. package/dist/behavior/platformer-3d.js.map +1 -0
  9. package/dist/behavior/ricochet-2d.d.ts +274 -0
  10. package/dist/behavior/ricochet-2d.js +394 -0
  11. package/dist/behavior/ricochet-2d.js.map +1 -0
  12. package/dist/behavior/screen-wrap.d.ts +86 -0
  13. package/dist/behavior/screen-wrap.js +195 -0
  14. package/dist/behavior/screen-wrap.js.map +1 -0
  15. package/dist/behavior/thruster.d.ts +10 -0
  16. package/dist/behavior/thruster.js +234 -0
  17. package/dist/behavior/thruster.js.map +1 -0
  18. package/dist/behavior/world-boundary-2d.d.ts +141 -0
  19. package/dist/behavior/world-boundary-2d.js +181 -0
  20. package/dist/behavior/world-boundary-2d.js.map +1 -0
  21. package/dist/behavior-descriptor-BWNWmIjv.d.ts +142 -0
  22. package/dist/{blueprints-Cq3Ko6_G.d.ts → blueprints-BWGz8fII.d.ts} +2 -2
  23. package/dist/camera-B5e4c78l.d.ts +468 -0
  24. package/dist/camera.d.ts +3 -2
  25. package/dist/camera.js +900 -211
  26. package/dist/camera.js.map +1 -1
  27. package/dist/composition-DrzFrbqI.d.ts +218 -0
  28. package/dist/{core-bO8TzV7u.d.ts → core-DAkskq6Y.d.ts} +60 -62
  29. package/dist/core.d.ts +10 -6
  30. package/dist/core.js +6896 -5020
  31. package/dist/core.js.map +1 -1
  32. package/dist/{entities-DvByhMGU.d.ts → entities-DC9ce_vx.d.ts} +113 -3
  33. package/dist/entities.d.ts +5 -3
  34. package/dist/entities.js +3727 -3167
  35. package/dist/entities.js.map +1 -1
  36. package/dist/entity-BpbZqg19.d.ts +1100 -0
  37. package/dist/global-change-Dc8uCKi2.d.ts +25 -0
  38. package/dist/main.d.ts +418 -15
  39. package/dist/main.js +11384 -8515
  40. package/dist/main.js.map +1 -1
  41. package/dist/{stage-types-Bd-KtcYT.d.ts → stage-types-BFsm3qsZ.d.ts} +205 -13
  42. package/dist/stage.d.ts +10 -7
  43. package/dist/stage.js +5311 -3880
  44. package/dist/stage.js.map +1 -1
  45. package/dist/thruster-DhRaJnoL.d.ts +172 -0
  46. package/dist/world-Be5m1XC1.d.ts +31 -0
  47. package/package.json +29 -13
  48. package/dist/behaviors.d.ts +0 -854
  49. package/dist/behaviors.js +0 -1209
  50. package/dist/behaviors.js.map +0 -1
  51. package/dist/camera-CeJPAgGg.d.ts +0 -116
  52. package/dist/moveable-B_vyA6cw.d.ts +0 -67
  53. package/dist/transformable-CUhvyuYO.d.ts +0 -67
  54. package/dist/world-C8tQ7Plj.d.ts +0 -774
@@ -0,0 +1,468 @@
1
+ import { Object3D, WebGLRenderer, Vector2, Scene, Camera, Vector3 } from 'three';
2
+ import { S as StageEntity } from './entity-Bq_eNEDI.js';
3
+ import { WebGPURenderer } from 'three/webgpu';
4
+ import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
5
+
6
+ declare const Perspectives: {
7
+ readonly FirstPerson: "first-person";
8
+ readonly ThirdPerson: "third-person";
9
+ readonly Isometric: "isometric";
10
+ readonly Flat2D: "flat-2d";
11
+ readonly Fixed2D: "fixed-2d";
12
+ };
13
+ type PerspectiveType = (typeof Perspectives)[keyof typeof Perspectives];
14
+
15
+ interface CameraDebugState {
16
+ enabled: boolean;
17
+ selected: string[];
18
+ }
19
+ interface CameraDebugDelegate {
20
+ subscribe(listener: (state: CameraDebugState) => void): () => void;
21
+ resolveTarget(uuid: string): Object3D | null;
22
+ }
23
+
24
+ /**
25
+ * Renderer type option for choosing rendering backend
26
+ * - 'auto': Try WebGPU first, fall back to WebGL
27
+ * - 'webgpu': Force WebGPU (error if not supported)
28
+ * - 'webgl': Force WebGL
29
+ */
30
+ type RendererType = 'auto' | 'webgpu' | 'webgl';
31
+ /**
32
+ * Union type for renderer instances
33
+ */
34
+ type ZylemRenderer = WebGLRenderer | WebGPURenderer;
35
+ /**
36
+ * Viewport definition in normalized coordinates (0-1).
37
+ * Represents a rectangular region of the canvas for camera rendering.
38
+ */
39
+ interface Viewport {
40
+ x: number;
41
+ y: number;
42
+ width: number;
43
+ height: number;
44
+ }
45
+ /**
46
+ * Check if WebGPU is supported in the current browser
47
+ */
48
+ declare function isWebGPUSupported(): Promise<boolean>;
49
+ /**
50
+ * RendererManager owns the shared WebGL/WebGPU renderer, canvas element,
51
+ * effect composer, and render loop. There is one RendererManager per game.
52
+ *
53
+ * It iterates active cameras and renders each with its configured viewport.
54
+ */
55
+ declare class RendererManager {
56
+ renderer: ZylemRenderer;
57
+ composer: EffectComposer;
58
+ screenResolution: Vector2;
59
+ rendererType: RendererType;
60
+ private _isWebGPU;
61
+ private _initialized;
62
+ private _sceneRef;
63
+ constructor(screenResolution?: Vector2, rendererType?: RendererType);
64
+ /**
65
+ * Check if the renderer has been initialized
66
+ */
67
+ get initialized(): boolean;
68
+ /**
69
+ * Check if using WebGPU renderer
70
+ */
71
+ get isWebGPU(): boolean;
72
+ /**
73
+ * Initialize the renderer (must be called before rendering).
74
+ * Async because WebGPU requires async initialization.
75
+ */
76
+ initRenderer(): Promise<void>;
77
+ /**
78
+ * Set the current scene reference for rendering.
79
+ */
80
+ setScene(scene: Scene): void;
81
+ /**
82
+ * Setup post-processing render pass for a camera (WebGL only).
83
+ */
84
+ setupRenderPass(scene: Scene, camera: Camera): void;
85
+ /**
86
+ * Start the render loop. Calls the provided callback each frame.
87
+ */
88
+ startRenderLoop(onFrame: (delta: number) => void): void;
89
+ /**
90
+ * Stop the render loop.
91
+ */
92
+ stopRenderLoop(): void;
93
+ /**
94
+ * Render a scene from a single camera's perspective.
95
+ * Sets the viewport based on the camera's viewport config.
96
+ */
97
+ renderCamera(scene: Scene, camera: ZylemCamera): void;
98
+ /**
99
+ * Render a scene from multiple cameras, each with their own viewport.
100
+ * Cameras are rendered in order (first = bottom layer, last = top layer).
101
+ */
102
+ renderCameras(scene: Scene, cameras: ZylemCamera[]): void;
103
+ /**
104
+ * Simple single-camera render (backwards compatible).
105
+ * Uses the full viewport for a single camera.
106
+ */
107
+ render(scene: Scene, camera: Camera): void;
108
+ /**
109
+ * Resize the renderer and update resolution.
110
+ */
111
+ resize(width: number, height: number): void;
112
+ /**
113
+ * Update renderer pixel ratio (DPR).
114
+ */
115
+ setPixelRatio(dpr: number): void;
116
+ /**
117
+ * Get the DOM element for the renderer.
118
+ */
119
+ getDomElement(): HTMLCanvasElement;
120
+ /**
121
+ * Dispose renderer, composer, and related resources.
122
+ */
123
+ dispose(): void;
124
+ }
125
+
126
+ /**
127
+ * Interface for perspective-specific camera controllers
128
+ */
129
+ interface PerspectiveController {
130
+ setup(params: {
131
+ screenResolution: Vector2;
132
+ renderer: ZylemRenderer;
133
+ scene: Scene;
134
+ camera: ZylemCamera;
135
+ }): void;
136
+ update(delta: number): void;
137
+ resize(width: number, height: number): void;
138
+ }
139
+ /**
140
+ * ZylemCamera is a lightweight camera wrapper that manages the Three.js camera,
141
+ * perspective controller, and viewport configuration. It no longer owns a renderer;
142
+ * rendering is handled by RendererManager.
143
+ */
144
+ declare class ZylemCamera {
145
+ cameraRig: Object3D | null;
146
+ camera: Camera;
147
+ screenResolution: Vector2;
148
+ _perspective: PerspectiveType;
149
+ frustumSize: number;
150
+ rendererType: RendererType;
151
+ sceneRef: Scene | null;
152
+ /** Name for camera manager lookup */
153
+ name: string;
154
+ /**
155
+ * Viewport in normalized coordinates (0-1).
156
+ * Default is fullscreen: { x: 0, y: 0, width: 1, height: 1 }
157
+ */
158
+ viewport: Viewport;
159
+ /**
160
+ * Multiple targets for the camera to follow/frame.
161
+ * Replaces the old single `target` property.
162
+ */
163
+ targets: StageEntity[];
164
+ /**
165
+ * @deprecated Use `targets` array instead. This getter/setter is kept for backward compatibility.
166
+ */
167
+ get target(): StageEntity | null;
168
+ set target(entity: StageEntity | null);
169
+ perspectiveController: PerspectiveController | null;
170
+ private orbitController;
171
+ private _useOrbitalControls;
172
+ /** Reference to the shared renderer manager (set during setup) */
173
+ private _rendererManager;
174
+ constructor(perspective: PerspectiveType, screenResolution: Vector2, frustumSize?: number, rendererType?: RendererType);
175
+ /**
176
+ * Setup the camera with a scene and renderer manager.
177
+ * The renderer manager provides shared rendering infrastructure.
178
+ */
179
+ setup(scene: Scene, rendererManager?: RendererManager): Promise<void>;
180
+ /**
181
+ * Legacy setup method for backward compatibility.
182
+ * Creates a temporary RendererManager internally.
183
+ * @deprecated Use setup(scene, rendererManager) instead.
184
+ */
185
+ setupLegacy(scene: Scene): Promise<void>;
186
+ /**
187
+ * Update camera controllers (called each frame).
188
+ * Does NOT render -- rendering is handled by RendererManager.
189
+ */
190
+ update(delta: number): void;
191
+ /**
192
+ * Check if debug mode is active (orbit controls taking over camera)
193
+ */
194
+ isDebugModeActive(): boolean;
195
+ /**
196
+ * Enable user-configured orbital controls (not debug mode).
197
+ */
198
+ enableOrbitalControls(): void;
199
+ /**
200
+ * Disable user-configured orbital controls.
201
+ */
202
+ disableOrbitalControls(): void;
203
+ /**
204
+ * Whether user orbital controls are enabled.
205
+ */
206
+ get useOrbitalControls(): boolean;
207
+ /**
208
+ * Add a target entity for the camera to follow/frame.
209
+ */
210
+ addTarget(entity: StageEntity): void;
211
+ /**
212
+ * Remove a target entity.
213
+ */
214
+ removeTarget(entity: StageEntity): void;
215
+ /**
216
+ * Clear all targets.
217
+ */
218
+ clearTargets(): void;
219
+ /**
220
+ * Dispose camera resources (not the renderer -- that's managed by RendererManager).
221
+ */
222
+ destroy(): void;
223
+ /**
224
+ * Attach a delegate to react to debug state changes.
225
+ */
226
+ setDebugDelegate(delegate: CameraDebugDelegate | null): void;
227
+ /**
228
+ * Resize camera projection.
229
+ */
230
+ resize(width: number, height: number): void;
231
+ /**
232
+ * Set the viewport for this camera (normalized 0-1 coordinates).
233
+ */
234
+ setViewport(x: number, y: number, width: number, height: number): void;
235
+ /**
236
+ * Create camera based on perspective type
237
+ */
238
+ private createCameraForPerspective;
239
+ /**
240
+ * Initialize perspective-specific controller
241
+ */
242
+ private initializePerspectiveController;
243
+ private createThirdPersonCamera;
244
+ private createFirstPersonCamera;
245
+ private createIsometricCamera;
246
+ private createFlat2DCamera;
247
+ private createFixed2DCamera;
248
+ private moveCamera;
249
+ move(position: Vector3): void;
250
+ rotate(pitch: number, yaw: number, roll: number): void;
251
+ /**
252
+ * Check if this perspective type needs a camera rig
253
+ */
254
+ private needsRig;
255
+ /**
256
+ * Get the DOM element for the renderer.
257
+ * @deprecated Access via RendererManager instead.
258
+ */
259
+ getDomElement(): HTMLCanvasElement;
260
+ /**
261
+ * Get the renderer manager reference.
262
+ */
263
+ getRendererManager(): RendererManager | null;
264
+ /**
265
+ * Set the renderer manager reference (used by CameraManager during setup).
266
+ */
267
+ setRendererManager(manager: RendererManager): void;
268
+ /**
269
+ * @deprecated Renderer is now owned by RendererManager
270
+ */
271
+ get renderer(): any;
272
+ /**
273
+ * @deprecated Composer is now owned by RendererManager
274
+ */
275
+ get composer(): any;
276
+ /**
277
+ * @deprecated Use RendererManager.setPixelRatio() instead
278
+ */
279
+ setPixelRatio(dpr: number): void;
280
+ }
281
+
282
+ /**
283
+ * CameraManager orchestrates multiple cameras per stage.
284
+ *
285
+ * Responsibilities:
286
+ * - Named camera registry (add/remove/get by name or reference)
287
+ * - Active camera list management (determines which cameras render)
288
+ * - Always-available debug camera with orbit controls
289
+ * - Per-frame update of all active cameras' perspective controllers
290
+ * - Coordinating rendering via RendererManager for all active viewports
291
+ */
292
+ declare class CameraManager {
293
+ /** Named camera registry */
294
+ private cameras;
295
+ /** Currently active cameras, ordered by render layer (first = bottom) */
296
+ private _activeCameras;
297
+ /** Auto-created debug camera with orbit controls */
298
+ private _debugCamera;
299
+ /** Reference to the shared renderer manager */
300
+ private _rendererManager;
301
+ /** Scene reference */
302
+ private _sceneRef;
303
+ /** Counter for auto-generated camera names */
304
+ private _autoNameCounter;
305
+ constructor();
306
+ /**
307
+ * Get the list of currently active cameras.
308
+ */
309
+ get activeCameras(): ReadonlyArray<ZylemCamera>;
310
+ /**
311
+ * Get the primary active camera (first in the active list).
312
+ */
313
+ get primaryCamera(): ZylemCamera | null;
314
+ /**
315
+ * Get the debug camera.
316
+ */
317
+ get debugCamera(): ZylemCamera | null;
318
+ /**
319
+ * Get all registered cameras.
320
+ */
321
+ get allCameras(): ReadonlyArray<ZylemCamera>;
322
+ /**
323
+ * Add a camera to the manager.
324
+ * If no name is provided, one is auto-generated.
325
+ * The first camera added becomes the active camera.
326
+ *
327
+ * @param camera The ZylemCamera instance to add
328
+ * @param name Optional name for lookup
329
+ * @returns The assigned name
330
+ */
331
+ addCamera(camera: ZylemCamera, name?: string): string;
332
+ /**
333
+ * Remove a camera by name or reference.
334
+ * Cannot remove the debug camera via this method.
335
+ */
336
+ removeCamera(nameOrRef: string | ZylemCamera): boolean;
337
+ /**
338
+ * Set a camera as the primary active camera (replaces all active cameras
339
+ * except additional viewport cameras).
340
+ *
341
+ * @param nameOrRef Camera name or reference to activate
342
+ */
343
+ setActiveCamera(nameOrRef: string | ZylemCamera): boolean;
344
+ /**
345
+ * Add a camera as an additional active camera (for split-screen or PiP).
346
+ */
347
+ addActiveCamera(nameOrRef: string | ZylemCamera): boolean;
348
+ /**
349
+ * Remove a camera from the active render list (does not remove from registry).
350
+ */
351
+ deactivateCamera(nameOrRef: string | ZylemCamera): boolean;
352
+ /**
353
+ * Get a camera by name.
354
+ */
355
+ getCamera(name: string): ZylemCamera | null;
356
+ /**
357
+ * Setup all cameras with the given scene and renderer manager.
358
+ * Also creates the debug camera.
359
+ */
360
+ setup(scene: Scene, rendererManager: RendererManager): Promise<void>;
361
+ /**
362
+ * Update all active cameras' controllers.
363
+ */
364
+ update(delta: number): void;
365
+ /**
366
+ * Render all active cameras through the renderer manager.
367
+ */
368
+ render(scene: Scene): void;
369
+ /**
370
+ * Create a default third-person camera if no cameras have been added.
371
+ */
372
+ ensureDefaultCamera(): ZylemCamera;
373
+ /**
374
+ * Dispose all cameras and cleanup.
375
+ */
376
+ dispose(): void;
377
+ /**
378
+ * Create the always-available debug camera with orbit controls.
379
+ */
380
+ private createDebugCamera;
381
+ /**
382
+ * Resolve a camera from a name or reference.
383
+ */
384
+ private resolveCamera;
385
+ }
386
+
387
+ interface CameraOptions {
388
+ perspective?: PerspectiveType;
389
+ position?: Vector3 | {
390
+ x: number;
391
+ y: number;
392
+ z: number;
393
+ };
394
+ target?: Vector3 | {
395
+ x: number;
396
+ y: number;
397
+ z: number;
398
+ } | any;
399
+ zoom?: number;
400
+ screenResolution?: Vector2;
401
+ /**
402
+ * Renderer type: 'auto' | 'webgpu' | 'webgl'
403
+ * Use 'webgpu' for TSL shaders
404
+ * @default 'webgl'
405
+ */
406
+ rendererType?: RendererType;
407
+ /**
408
+ * Enable orbital controls for this camera.
409
+ * Can be toggled at runtime via enableOrbitalControls() / disableOrbitalControls().
410
+ * @default false
411
+ */
412
+ useOrbitalControls?: boolean;
413
+ /**
414
+ * Viewport in normalized coordinates (0-1).
415
+ * Defines where this camera renders on the canvas.
416
+ * @default { x: 0, y: 0, width: 1, height: 1 } (fullscreen)
417
+ */
418
+ viewport?: Viewport;
419
+ /**
420
+ * Optional name for camera manager lookup.
421
+ */
422
+ name?: string;
423
+ }
424
+ /**
425
+ * CameraWrapper is the user-facing camera handle returned by createCamera().
426
+ * It provides convenience methods for target management, orbital controls, and viewport configuration.
427
+ */
428
+ declare class CameraWrapper {
429
+ cameraRef: ZylemCamera;
430
+ constructor(camera: ZylemCamera);
431
+ /**
432
+ * Add a target entity for the camera to follow/frame.
433
+ * With multiple targets, the camera auto-frames to include all of them.
434
+ */
435
+ addTarget(entity: StageEntity): void;
436
+ /**
437
+ * Remove a target entity from the camera.
438
+ */
439
+ removeTarget(entity: StageEntity): void;
440
+ /**
441
+ * Clear all targets. Camera will look at world origin.
442
+ */
443
+ clearTargets(): void;
444
+ /**
445
+ * Enable orbital controls for this camera.
446
+ * Allows the user to orbit, pan, and zoom the camera.
447
+ */
448
+ enableOrbitalControls(): void;
449
+ /**
450
+ * Disable orbital controls for this camera.
451
+ */
452
+ disableOrbitalControls(): void;
453
+ /**
454
+ * Set the viewport for this camera (normalized 0-1 coordinates).
455
+ * @param x Left edge (0 = left of canvas)
456
+ * @param y Bottom edge (0 = bottom of canvas)
457
+ * @param width Width as fraction of canvas
458
+ * @param height Height as fraction of canvas
459
+ */
460
+ setViewport(x: number, y: number, width: number, height: number): void;
461
+ }
462
+ /**
463
+ * Create a camera with the given options.
464
+ * Returns a CameraWrapper for convenient access to camera features.
465
+ */
466
+ declare function createCamera(options: CameraOptions): CameraWrapper;
467
+
468
+ export { CameraManager as C, type PerspectiveType as P, RendererManager as R, type Viewport as V, ZylemCamera as Z, type CameraDebugDelegate as a, type CameraDebugState as b, CameraWrapper as c, createCamera as d, type CameraOptions as e, Perspectives as f, type RendererType as g, type ZylemRenderer as h, isWebGPUSupported as i };
package/dist/camera.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { P as PerspectiveType, d as Perspectives, c as createCamera } from './camera-CeJPAgGg.js';
1
+ export { C as CameraManager, e as CameraOptions, c as CameraWrapper, P as PerspectiveType, f as Perspectives, g as RendererType, V as Viewport, h as ZylemRenderer, d as createCamera, i as isWebGPUSupported } from './camera-B5e4c78l.js';
2
2
  import 'three';
3
- import 'three/examples/jsm/postprocessing/EffectComposer.js';
4
3
  import './entity-Bq_eNEDI.js';
5
4
  import '@dimforge/rapier3d-compat';
5
+ import 'three/webgpu';
6
+ import 'three/examples/jsm/postprocessing/EffectComposer.js';