nova64 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/examples/strider-demo-3d/fix-game.sh +0 -0
  2. package/dist/os9-shell/assets/index-3Hr_q5dj.js +483 -0
  3. package/dist/os9-shell/assets/index-3Hr_q5dj.js.map +1 -0
  4. package/dist/os9-shell/index.html +2 -1
  5. package/dist/runtime/api-2d.js +1158 -0
  6. package/dist/runtime/api-3d/camera.js +73 -0
  7. package/dist/runtime/api-3d/instancing.js +180 -0
  8. package/dist/runtime/api-3d/lights.js +51 -0
  9. package/dist/runtime/api-3d/materials.js +47 -0
  10. package/dist/runtime/api-3d/models.js +84 -0
  11. package/dist/runtime/api-3d/particles.js +296 -0
  12. package/dist/runtime/api-3d/pbr.js +113 -0
  13. package/dist/runtime/api-3d/primitives.js +304 -0
  14. package/dist/runtime/api-3d/scene.js +169 -0
  15. package/dist/runtime/api-3d/transforms.js +161 -0
  16. package/dist/runtime/api-3d.js +166 -0
  17. package/dist/runtime/api-effects.js +840 -0
  18. package/dist/runtime/api-gameutils.js +476 -0
  19. package/dist/runtime/api-generative.js +610 -0
  20. package/dist/runtime/api-presets.js +85 -0
  21. package/dist/runtime/api-skybox.js +232 -0
  22. package/dist/runtime/api-sprites.js +100 -0
  23. package/dist/runtime/api-voxel.js +712 -0
  24. package/dist/runtime/api.js +201 -0
  25. package/dist/runtime/assets.js +27 -0
  26. package/dist/runtime/audio.js +114 -0
  27. package/dist/runtime/collision.js +47 -0
  28. package/dist/runtime/console.js +101 -0
  29. package/dist/runtime/editor.js +233 -0
  30. package/dist/runtime/font.js +233 -0
  31. package/dist/runtime/framebuffer.js +28 -0
  32. package/dist/runtime/fullscreen-button.js +185 -0
  33. package/dist/runtime/gpu-canvas2d.js +47 -0
  34. package/dist/runtime/gpu-threejs.js +643 -0
  35. package/dist/runtime/gpu-webgl2.js +310 -0
  36. package/dist/runtime/index.d.ts +682 -0
  37. package/dist/runtime/index.js +22 -0
  38. package/dist/runtime/input.js +225 -0
  39. package/dist/runtime/logger.js +60 -0
  40. package/dist/runtime/physics.js +101 -0
  41. package/dist/runtime/screens.js +213 -0
  42. package/dist/runtime/storage.js +38 -0
  43. package/dist/runtime/store.js +151 -0
  44. package/dist/runtime/textinput.js +68 -0
  45. package/dist/runtime/ui/buttons.js +124 -0
  46. package/dist/runtime/ui/panels.js +105 -0
  47. package/dist/runtime/ui/text.js +86 -0
  48. package/dist/runtime/ui/widgets.js +141 -0
  49. package/dist/runtime/ui.js +111 -0
  50. package/package.json +34 -32
  51. package/public/os9-shell/assets/index-3Hr_q5dj.js +483 -0
  52. package/public/os9-shell/assets/index-3Hr_q5dj.js.map +1 -0
  53. package/public/os9-shell/index.html +2 -1
@@ -0,0 +1,682 @@
1
+ // Nova64 — Type declarations
2
+ // https://github.com/seacloud9/nova64
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // Shared primitives
6
+ // ---------------------------------------------------------------------------
7
+
8
+ /** Hex colour integer, e.g. 0xff0000 for red. */
9
+ export type Color = number;
10
+
11
+ /** Mesh identifier returned by primitive-creation functions. */
12
+ export type MeshId = number;
13
+
14
+ /** Light identifier returned by createPointLight. */
15
+ export type LightId = number;
16
+
17
+ /** Instanced-mesh identifier returned by createInstancedMesh. */
18
+ export type InstancedMeshId = number;
19
+
20
+ /** LOD identifier returned by createLODMesh. */
21
+ export type LODId = number;
22
+
23
+ /** Particle system identifier returned by createParticleSystem. */
24
+ export type ParticleSystemId = number;
25
+
26
+ export interface ParticleSystemOptions {
27
+ shape?: 'sphere' | 'cube';
28
+ size?: number;
29
+ segments?: number;
30
+ color?: Color;
31
+ emissive?: Color;
32
+ emissiveIntensity?: number;
33
+ gravity?: number;
34
+ drag?: number;
35
+ emitterX?: number;
36
+ emitterY?: number;
37
+ emitterZ?: number;
38
+ emitRate?: number;
39
+ minLife?: number;
40
+ maxLife?: number;
41
+ minSpeed?: number;
42
+ maxSpeed?: number;
43
+ spread?: number;
44
+ minSize?: number;
45
+ maxSize?: number;
46
+ startColor?: Color;
47
+ endColor?: Color;
48
+ }
49
+
50
+ export interface ParticleEmitter {
51
+ x: number;
52
+ y: number;
53
+ z: number;
54
+ emitRate: number;
55
+ minLife: number;
56
+ maxLife: number;
57
+ minSpeed: number;
58
+ maxSpeed: number;
59
+ spread: number;
60
+ minSize: number;
61
+ maxSize: number;
62
+ }
63
+
64
+ export interface ParticleOverrides {
65
+ x: number;
66
+ y: number;
67
+ z: number;
68
+ vx: number;
69
+ vy: number;
70
+ vz: number;
71
+ spread: number;
72
+ r: number;
73
+ g: number;
74
+ b: number;
75
+ }
76
+
77
+ /** Panel object returned by createPanel. */
78
+ export interface Panel {
79
+ x: number;
80
+ y: number;
81
+ width: number;
82
+ height: number;
83
+ options: PanelOptions;
84
+ }
85
+
86
+ /** Button object returned by createButton. */
87
+ export interface Button {
88
+ x: number;
89
+ y: number;
90
+ width: number;
91
+ height: number;
92
+ text: string;
93
+ callback: () => void;
94
+ options: ButtonOptions;
95
+ hovered: boolean;
96
+ pressed: boolean;
97
+ }
98
+
99
+ export interface MousePosition {
100
+ x: number;
101
+ y: number;
102
+ }
103
+
104
+ // ---------------------------------------------------------------------------
105
+ // Material / primitive options
106
+ // ---------------------------------------------------------------------------
107
+
108
+ export interface MeshOptions {
109
+ /** @default 'standard' */
110
+ material?: 'standard' | 'holographic' | 'metallic' | 'emissive' | 'wireframe';
111
+ roughness?: number;
112
+ metalness?: number;
113
+ emissive?: Color;
114
+ emissiveIntensity?: number;
115
+ transparent?: boolean;
116
+ opacity?: number;
117
+ wireframe?: boolean;
118
+ flatShading?: boolean;
119
+ segments?: number;
120
+ size?: number;
121
+ height?: number;
122
+ width?: number;
123
+ }
124
+
125
+ export interface LODLevel {
126
+ shape?: 'cube' | 'sphere' | 'plane' | 'cylinder' | 'cone';
127
+ size?: number;
128
+ color?: Color;
129
+ distance: number;
130
+ options?: MeshOptions;
131
+ }
132
+
133
+ export interface PBRMaps {
134
+ normalMap?: THREE.Texture | null;
135
+ roughnessMap?: THREE.Texture | null;
136
+ metalnessMap?: THREE.Texture | null;
137
+ aoMap?: THREE.Texture | null;
138
+ }
139
+
140
+ // ---------------------------------------------------------------------------
141
+ // UI options
142
+ // ---------------------------------------------------------------------------
143
+
144
+ export interface PanelOptions {
145
+ color?: Color;
146
+ border?: Color;
147
+ borderWidth?: number;
148
+ alpha?: number;
149
+ radius?: number;
150
+ title?: string;
151
+ }
152
+
153
+ export interface ButtonOptions {
154
+ normalColor?: Color;
155
+ hoverColor?: Color;
156
+ pressedColor?: Color;
157
+ textColor?: Color;
158
+ borderColor?: Color;
159
+ borderWidth?: number;
160
+ radius?: number;
161
+ fontSize?: number;
162
+ }
163
+
164
+ export interface ProgressBarOptions {
165
+ backgroundColor?: Color;
166
+ fillColor?: Color;
167
+ borderColor?: Color;
168
+ showText?: boolean;
169
+ textColor?: Color;
170
+ radius?: number;
171
+ }
172
+
173
+ // ---------------------------------------------------------------------------
174
+ // Stats
175
+ // ---------------------------------------------------------------------------
176
+
177
+ export interface Stats3D {
178
+ meshCount: number;
179
+ lightCount: number;
180
+ instancedMeshCount: number;
181
+ lodCount: number;
182
+ }
183
+
184
+ // ---------------------------------------------------------------------------
185
+ // Logger
186
+ // ---------------------------------------------------------------------------
187
+
188
+ export interface LogRecord {
189
+ level: number;
190
+ message: string;
191
+ args: unknown[];
192
+ timestamp: number;
193
+ }
194
+
195
+ export declare const LogLevel: Readonly<{
196
+ DEBUG: 0;
197
+ INFO: 1;
198
+ WARN: 2;
199
+ ERROR: 3;
200
+ NONE: 4;
201
+ }>;
202
+
203
+ export declare class Logger {
204
+ level: number;
205
+ history: LogRecord[];
206
+ debug(message: string, ...args: unknown[]): void;
207
+ info(message: string, ...args: unknown[]): void;
208
+ warn(message: string, ...args: unknown[]): void;
209
+ error(message: string, ...args: unknown[]): void;
210
+ setLevel(level: number): void;
211
+ getHistory(): LogRecord[];
212
+ clearHistory(): void;
213
+ }
214
+
215
+ export declare const logger: Logger;
216
+
217
+ // ---------------------------------------------------------------------------
218
+ // 3D API
219
+ // ---------------------------------------------------------------------------
220
+
221
+ export interface ThreeDApiInstance {
222
+ // Primitives
223
+ createCube(
224
+ size?: number,
225
+ color?: Color,
226
+ position?: [number, number, number],
227
+ options?: MeshOptions
228
+ ): MeshId;
229
+ createSphere(
230
+ radius?: number,
231
+ color?: Color,
232
+ position?: [number, number, number],
233
+ segments?: number,
234
+ options?: MeshOptions
235
+ ): MeshId;
236
+ createCylinder(
237
+ radiusTop?: number,
238
+ radiusBottom?: number,
239
+ height?: number,
240
+ color?: Color,
241
+ position?: [number, number, number],
242
+ options?: MeshOptions
243
+ ): MeshId;
244
+ createPlane(
245
+ width?: number,
246
+ height?: number,
247
+ color?: Color,
248
+ position?: [number, number, number]
249
+ ): MeshId;
250
+ createAdvancedCube(
251
+ size?: number,
252
+ materialOptions?: MeshOptions,
253
+ position?: [number, number, number]
254
+ ): MeshId;
255
+ createAdvancedSphere(
256
+ radius?: number,
257
+ materialOptions?: MeshOptions,
258
+ position?: [number, number, number]
259
+ ): MeshId;
260
+ createTorus(
261
+ radius?: number,
262
+ tube?: number,
263
+ color?: Color,
264
+ position?: [number, number, number],
265
+ options?: MeshOptions
266
+ ): MeshId;
267
+ createCone(
268
+ radius?: number,
269
+ height?: number,
270
+ color?: Color,
271
+ position?: [number, number, number],
272
+ options?: MeshOptions
273
+ ): MeshId;
274
+ createCapsule(
275
+ radius?: number,
276
+ length?: number,
277
+ color?: Color,
278
+ position?: [number, number, number],
279
+ options?: MeshOptions
280
+ ): MeshId;
281
+
282
+ // Mesh management
283
+ destroyMesh(id: MeshId): void;
284
+ removeMesh(id: MeshId): void;
285
+ getMesh(id: MeshId): THREE.Mesh | undefined;
286
+
287
+ // Model loading
288
+ loadModel(
289
+ url: string,
290
+ position?: [number, number, number],
291
+ options?: MeshOptions
292
+ ): Promise<MeshId>;
293
+ playAnimation(
294
+ meshId: MeshId,
295
+ nameOrIndex?: string | number,
296
+ loop?: boolean,
297
+ timeScale?: number
298
+ ): void;
299
+ updateAnimations(dt: number): void;
300
+ loadTexture(url: string): Promise<THREE.Texture>;
301
+
302
+ // Transforms
303
+ setPosition(meshId: MeshId, x: number, y: number, z: number): void;
304
+ setRotation(meshId: MeshId, x: number, y: number, z: number): void;
305
+ setScale(meshId: MeshId, x: number, y: number, z: number): void;
306
+ getPosition(meshId: MeshId): { x: number; y: number; z: number } | null;
307
+ getRotation(meshId: MeshId): { x: number; y: number; z: number } | null;
308
+ rotateMesh(meshId: MeshId, dX: number, dY: number, dZ: number): void;
309
+ moveMesh(meshId: MeshId, x: number, y: number, z: number): void;
310
+
311
+ // Mesh helpers
312
+ setFlatShading(meshId: MeshId, enabled?: boolean): void;
313
+ setMeshVisible(meshId: MeshId, visible: boolean): void;
314
+ setMeshOpacity(meshId: MeshId, opacity: number): void;
315
+ setCastShadow(meshId: MeshId, cast: boolean): void;
316
+ setReceiveShadow(meshId: MeshId, receive: boolean): void;
317
+
318
+ // Camera
319
+ setCameraPosition(x: number, y: number, z: number): void;
320
+ setCameraTarget(x: number, y: number, z: number): void;
321
+ setCameraLookAt(direction: [number, number, number]): void;
322
+ setCameraFOV(fov: number): void;
323
+
324
+ // Atmosphere
325
+ setFog(color: Color, near?: number, far?: number): void;
326
+ clearFog(): void;
327
+ setLightDirection(x: number, y: number, z: number): void;
328
+ setLightColor(color: Color): void;
329
+ setAmbientLight(color: Color, intensity?: number): void;
330
+ setDirectionalLight(direction: [number, number, number], color?: Color, intensity?: number): void;
331
+
332
+ // Scene
333
+ clearScene(): void;
334
+ setupScene(opts?: { fog?: boolean; grid?: boolean; axes?: boolean }): void;
335
+
336
+ // Effects
337
+ enablePixelation(factor?: number): void;
338
+ enableDithering(enabled?: boolean): void;
339
+
340
+ // Dynamic lights
341
+ createPointLight(
342
+ color?: Color,
343
+ intensity?: number,
344
+ distance?: number,
345
+ x?: number,
346
+ y?: number,
347
+ z?: number
348
+ ): LightId;
349
+ setPointLightPosition(lightId: LightId, x: number, y: number, z: number): void;
350
+ setPointLightColor(lightId: LightId, color: Color): void;
351
+ removeLight(lightId: LightId): void;
352
+
353
+ // GPU instancing
354
+ createInstancedMesh(
355
+ shape?: 'cube' | 'sphere' | 'plane' | 'cylinder',
356
+ count?: number,
357
+ color?: Color,
358
+ options?: MeshOptions
359
+ ): InstancedMeshId;
360
+ setInstanceTransform(
361
+ instancedId: InstancedMeshId,
362
+ index: number,
363
+ x?: number,
364
+ y?: number,
365
+ z?: number,
366
+ rx?: number,
367
+ ry?: number,
368
+ rz?: number,
369
+ sx?: number,
370
+ sy?: number,
371
+ sz?: number
372
+ ): boolean;
373
+ setInstanceColor(instancedId: InstancedMeshId, index: number, color: Color): boolean;
374
+ finalizeInstances(instancedId: InstancedMeshId): boolean;
375
+ removeInstancedMesh(instancedId: InstancedMeshId): boolean;
376
+
377
+ // GPU particle system
378
+ createParticleSystem(maxParticles?: number, options?: ParticleSystemOptions): ParticleSystemId;
379
+ setParticleEmitter(systemId: ParticleSystemId, emitter: Partial<ParticleEmitter>): void;
380
+ emitParticle(systemId: ParticleSystemId, overrides?: Partial<ParticleOverrides>): void;
381
+ burstParticles(
382
+ systemId: ParticleSystemId,
383
+ count?: number,
384
+ overrides?: Partial<ParticleOverrides>
385
+ ): void;
386
+ updateParticles(dt: number): void;
387
+ removeParticleSystem(systemId: ParticleSystemId): boolean;
388
+ getParticleStats(
389
+ systemId: ParticleSystemId
390
+ ): { active: number; max: number; free: number } | null;
391
+
392
+ // LOD system
393
+ createLODMesh(levels?: LODLevel[], position?: [number, number, number]): LODId;
394
+ setLODPosition(lodId: LODId, x: number, y: number, z: number): void;
395
+ removeLODMesh(lodId: LODId): boolean;
396
+ updateLODs(): void;
397
+
398
+ // Normal / PBR maps
399
+ loadNormalMap(url: string): Promise<THREE.Texture>;
400
+ setNormalMap(meshId: MeshId, texture: THREE.Texture): void;
401
+ setPBRMaps(meshId: MeshId, maps?: PBRMaps): void;
402
+
403
+ // Raycasting / stats
404
+ raycastFromCamera(x: number, y: number): THREE.Intersection | null;
405
+ get3DStats(): Stats3D;
406
+
407
+ // Direct Three.js access
408
+ getScene(): THREE.Scene;
409
+ getCamera(): THREE.PerspectiveCamera;
410
+ getRenderer(): THREE.WebGLRenderer;
411
+
412
+ exposeTo(target: object): void;
413
+ }
414
+
415
+ export declare function threeDApi(gpu: unknown): ThreeDApiInstance;
416
+
417
+ // ---------------------------------------------------------------------------
418
+ // UI API
419
+ // ---------------------------------------------------------------------------
420
+
421
+ export interface UIApiInstance {
422
+ // Font / text
423
+ setFont(fontName: string): void;
424
+ getFont(): string;
425
+ setTextAlign(align: CanvasTextAlign): void;
426
+ setTextBaseline(baseline: CanvasTextBaseline): void;
427
+ measureText(text: string, scale?: number): number;
428
+ drawText(text: string, x: number, y: number, color?: Color, scale?: number): void;
429
+ drawTextShadow(
430
+ text: string,
431
+ x: number,
432
+ y: number,
433
+ color?: Color,
434
+ shadowColor?: Color,
435
+ scale?: number
436
+ ): void;
437
+ drawTextOutline(
438
+ text: string,
439
+ x: number,
440
+ y: number,
441
+ color?: Color,
442
+ outlineColor?: Color,
443
+ scale?: number
444
+ ): void;
445
+
446
+ // Panels
447
+ createPanel(x: number, y: number, width: number, height: number, options?: PanelOptions): Panel;
448
+ drawPanel(panel: Panel): void;
449
+ drawAllPanels(): void;
450
+ removePanel(panel: Panel): void;
451
+ clearPanels(): void;
452
+
453
+ // Buttons
454
+ createButton(
455
+ x: number,
456
+ y: number,
457
+ width: number,
458
+ height: number,
459
+ text: string,
460
+ callback: () => void,
461
+ options?: ButtonOptions
462
+ ): Button;
463
+ updateButton(button: Button): void;
464
+ drawButton(button: Button): void;
465
+ updateAllButtons(): void;
466
+ drawAllButtons(): void;
467
+ removeButton(button: Button): void;
468
+ clearButtons(): void;
469
+
470
+ // Progress bar
471
+ drawProgressBar(
472
+ x: number,
473
+ y: number,
474
+ width: number,
475
+ height: number,
476
+ value: number,
477
+ maxValue: number,
478
+ options?: ProgressBarOptions
479
+ ): void;
480
+
481
+ // Shapes
482
+ drawRoundedRect(
483
+ x: number,
484
+ y: number,
485
+ width: number,
486
+ height: number,
487
+ radius: number,
488
+ color: Color,
489
+ filled?: boolean
490
+ ): void;
491
+ drawGradientRect(
492
+ x: number,
493
+ y: number,
494
+ width: number,
495
+ height: number,
496
+ color1: Color,
497
+ color2: Color,
498
+ vertical?: boolean
499
+ ): void;
500
+
501
+ // Layout
502
+ centerX(width: number, screenWidth?: number): number;
503
+ centerY(height: number, screenHeight?: number): number;
504
+ grid(
505
+ cols: number,
506
+ rows: number,
507
+ cellWidth: number,
508
+ cellHeight: number,
509
+ paddingX?: number,
510
+ paddingY?: number
511
+ ): Array<{ x: number; y: number; col: number; row: number }>;
512
+
513
+ // Mouse
514
+ setMousePosition(x: number, y: number): void;
515
+ setMouseButton(down: boolean): void;
516
+ getMousePosition(): MousePosition;
517
+ isMouseDown(): boolean;
518
+ isMousePressed(): boolean;
519
+
520
+ // Palettes
521
+ uiColors: Record<string, Color>;
522
+ uiFonts: Record<string, string>;
523
+
524
+ exposeTo(target: object): void;
525
+ }
526
+
527
+ export declare function uiApi(ctx2d: CanvasRenderingContext2D | null): UIApiInstance;
528
+
529
+ // ---------------------------------------------------------------------------
530
+ // Sub-module factory types (for tree-shaking imports)
531
+ // ---------------------------------------------------------------------------
532
+
533
+ export declare function materialsModule(ctx: object): object;
534
+ export declare function primitivesModule(ctx: object): object;
535
+ export declare function transformsModule(ctx: object): object;
536
+ export declare function cameraModule(ctx: object): object;
537
+ export declare function lightsModule(ctx: object): object;
538
+ export declare function modelsModule(ctx: object): object;
539
+ export declare function instancingModule(ctx: object): object;
540
+ export declare function pbrModule(ctx: object): object;
541
+ export declare function sceneModule(ctx: object): object;
542
+
543
+ export declare function uiTextModule(ctx: object): object;
544
+ export declare function uiPanelsModule(ctx: object): object;
545
+ export declare function uiButtonsModule(ctx: object): object;
546
+ export declare function uiWidgetsModule(ctx: object): object;
547
+
548
+ // ---------------------------------------------------------------------------
549
+ // Global cart API (injected into globalThis at runtime)
550
+ // Augment with: declare global { ... } in your cart's .d.ts if needed.
551
+ // ---------------------------------------------------------------------------
552
+
553
+ export interface Nova64CartGlobals {
554
+ // 3D
555
+ createCube: ThreeDApiInstance['createCube'];
556
+ createSphere: ThreeDApiInstance['createSphere'];
557
+ createCylinder: ThreeDApiInstance['createCylinder'];
558
+ createPlane: ThreeDApiInstance['createPlane'];
559
+ createTorus: ThreeDApiInstance['createTorus'];
560
+ createCone: ThreeDApiInstance['createCone'];
561
+ createCapsule: ThreeDApiInstance['createCapsule'];
562
+ createAdvancedCube: ThreeDApiInstance['createAdvancedCube'];
563
+ createAdvancedSphere: ThreeDApiInstance['createAdvancedSphere'];
564
+ destroyMesh: ThreeDApiInstance['destroyMesh'];
565
+ removeMesh: ThreeDApiInstance['removeMesh'];
566
+ getMesh: ThreeDApiInstance['getMesh'];
567
+ loadModel: ThreeDApiInstance['loadModel'];
568
+ playAnimation: ThreeDApiInstance['playAnimation'];
569
+ updateAnimations: ThreeDApiInstance['updateAnimations'];
570
+ loadTexture: ThreeDApiInstance['loadTexture'];
571
+ setPosition: ThreeDApiInstance['setPosition'];
572
+ setRotation: ThreeDApiInstance['setRotation'];
573
+ setScale: ThreeDApiInstance['setScale'];
574
+ getPosition: ThreeDApiInstance['getPosition'];
575
+ getRotation: ThreeDApiInstance['getRotation'];
576
+ rotateMesh: ThreeDApiInstance['rotateMesh'];
577
+ moveMesh: ThreeDApiInstance['moveMesh'];
578
+ setFlatShading: ThreeDApiInstance['setFlatShading'];
579
+ setMeshVisible: ThreeDApiInstance['setMeshVisible'];
580
+ setMeshOpacity: ThreeDApiInstance['setMeshOpacity'];
581
+ setCastShadow: ThreeDApiInstance['setCastShadow'];
582
+ setReceiveShadow: ThreeDApiInstance['setReceiveShadow'];
583
+ setCameraPosition: ThreeDApiInstance['setCameraPosition'];
584
+ setCameraTarget: ThreeDApiInstance['setCameraTarget'];
585
+ setCameraLookAt: ThreeDApiInstance['setCameraLookAt'];
586
+ setCameraFOV: ThreeDApiInstance['setCameraFOV'];
587
+ setFog: ThreeDApiInstance['setFog'];
588
+ clearFog: ThreeDApiInstance['clearFog'];
589
+ setLightDirection: ThreeDApiInstance['setLightDirection'];
590
+ setLightColor: ThreeDApiInstance['setLightColor'];
591
+ setAmbientLight: ThreeDApiInstance['setAmbientLight'];
592
+ setDirectionalLight: ThreeDApiInstance['setDirectionalLight'];
593
+ clearScene: ThreeDApiInstance['clearScene'];
594
+ enablePixelation: ThreeDApiInstance['enablePixelation'];
595
+ enableDithering: ThreeDApiInstance['enableDithering'];
596
+ createPointLight: ThreeDApiInstance['createPointLight'];
597
+ setPointLightPosition: ThreeDApiInstance['setPointLightPosition'];
598
+ setPointLightColor: ThreeDApiInstance['setPointLightColor'];
599
+ removeLight: ThreeDApiInstance['removeLight'];
600
+ createInstancedMesh: ThreeDApiInstance['createInstancedMesh'];
601
+ setInstanceTransform: ThreeDApiInstance['setInstanceTransform'];
602
+ setInstanceColor: ThreeDApiInstance['setInstanceColor'];
603
+ finalizeInstances: ThreeDApiInstance['finalizeInstances'];
604
+ removeInstancedMesh: ThreeDApiInstance['removeInstancedMesh'];
605
+ createParticleSystem: ThreeDApiInstance['createParticleSystem'];
606
+ setParticleEmitter: ThreeDApiInstance['setParticleEmitter'];
607
+ emitParticle: ThreeDApiInstance['emitParticle'];
608
+ burstParticles: ThreeDApiInstance['burstParticles'];
609
+ updateParticles: ThreeDApiInstance['updateParticles'];
610
+ removeParticleSystem: ThreeDApiInstance['removeParticleSystem'];
611
+ getParticleStats: ThreeDApiInstance['getParticleStats'];
612
+ createLODMesh: ThreeDApiInstance['createLODMesh'];
613
+ setLODPosition: ThreeDApiInstance['setLODPosition'];
614
+ removeLODMesh: ThreeDApiInstance['removeLODMesh'];
615
+ updateLODs: ThreeDApiInstance['updateLODs'];
616
+ loadNormalMap: ThreeDApiInstance['loadNormalMap'];
617
+ setNormalMap: ThreeDApiInstance['setNormalMap'];
618
+ setPBRMaps: ThreeDApiInstance['setPBRMaps'];
619
+ raycastFromCamera: ThreeDApiInstance['raycastFromCamera'];
620
+ get3DStats: ThreeDApiInstance['get3DStats'];
621
+ getScene: ThreeDApiInstance['getScene'];
622
+ getCamera: ThreeDApiInstance['getCamera'];
623
+ getRenderer: ThreeDApiInstance['getRenderer'];
624
+
625
+ // UI
626
+ setFont: UIApiInstance['setFont'];
627
+ getFont: UIApiInstance['getFont'];
628
+ setTextAlign: UIApiInstance['setTextAlign'];
629
+ setTextBaseline: UIApiInstance['setTextBaseline'];
630
+ measureText: UIApiInstance['measureText'];
631
+ drawText: UIApiInstance['drawText'];
632
+ drawTextShadow: UIApiInstance['drawTextShadow'];
633
+ drawTextOutline: UIApiInstance['drawTextOutline'];
634
+ createPanel: UIApiInstance['createPanel'];
635
+ drawPanel: UIApiInstance['drawPanel'];
636
+ drawAllPanels: UIApiInstance['drawAllPanels'];
637
+ removePanel: UIApiInstance['removePanel'];
638
+ clearPanels: UIApiInstance['clearPanels'];
639
+ createButton: UIApiInstance['createButton'];
640
+ updateButton: UIApiInstance['updateButton'];
641
+ drawButton: UIApiInstance['drawButton'];
642
+ updateAllButtons: UIApiInstance['updateAllButtons'];
643
+ drawAllButtons: UIApiInstance['drawAllButtons'];
644
+ removeButton: UIApiInstance['removeButton'];
645
+ clearButtons: UIApiInstance['clearButtons'];
646
+ drawProgressBar: UIApiInstance['drawProgressBar'];
647
+ drawRoundedRect: UIApiInstance['drawRoundedRect'];
648
+ drawGradientRect: UIApiInstance['drawGradientRect'];
649
+ centerX: UIApiInstance['centerX'];
650
+ centerY: UIApiInstance['centerY'];
651
+ grid: UIApiInstance['grid'];
652
+ setMousePosition: UIApiInstance['setMousePosition'];
653
+ setMouseButton: UIApiInstance['setMouseButton'];
654
+ getMousePosition: UIApiInstance['getMousePosition'];
655
+ isMouseDown: UIApiInstance['isMouseDown'];
656
+ isMousePressed: UIApiInstance['isMousePressed'];
657
+ uiColors: UIApiInstance['uiColors'];
658
+ uiFonts: UIApiInstance['uiFonts'];
659
+
660
+ // Input (runtime/input.js)
661
+ key(code: string): boolean;
662
+ keyp(code: string): boolean;
663
+ btn(index: number): boolean;
664
+ btnp(index: number): boolean;
665
+
666
+ // 2D drawing (runtime/framebuffer.js / api-2d.js)
667
+ cls(color?: Color): void;
668
+ print(text: string, x: number, y: number, color?: Color, scale?: number): void;
669
+ printCentered(text: string, y: number, color?: Color, scale?: number): void;
670
+ line(x1: number, y1: number, x2: number, y2: number, color?: Color): void;
671
+ circle(x: number, y: number, r: number, color?: Color, filled?: boolean): void;
672
+ drawRect(x: number, y: number, w: number, h: number, color?: Color): void;
673
+ rgba8(r: number, g: number, b: number, a: number): Color;
674
+
675
+ // Storage (runtime/storage.js)
676
+ saveData(key: string, value: unknown): void;
677
+ loadData(key: string, fallback?: unknown): unknown;
678
+ deleteData(key: string): void;
679
+
680
+ // Audio (runtime/audio.js)
681
+ sfx(preset: string | { wave?: string; freq?: number; dur?: number; vol?: number }): void;
682
+ }
@@ -0,0 +1,22 @@
1
+ // runtime/index.js
2
+ // Public entry point for the Nova64 runtime package
3
+
4
+ export { threeDApi } from './api-3d.js';
5
+ export { uiApi } from './ui.js';
6
+ export { logger } from './logger.js';
7
+
8
+ // Re-export sub-modules for tree-shaking
9
+ export * from './api-3d/materials.js';
10
+ export * from './api-3d/primitives.js';
11
+ export * from './api-3d/transforms.js';
12
+ export * from './api-3d/camera.js';
13
+ export * from './api-3d/lights.js';
14
+ export * from './api-3d/models.js';
15
+ export * from './api-3d/instancing.js';
16
+ export * from './api-3d/pbr.js';
17
+ export * from './api-3d/scene.js';
18
+
19
+ export * from './ui/text.js';
20
+ export * from './ui/panels.js';
21
+ export * from './ui/buttons.js';
22
+ export * from './ui/widgets.js';