@opentui/core 0.1.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.
Files changed (51) hide show
  1. package/3d/SpriteResourceManager.d.ts +74 -0
  2. package/3d/SpriteUtils.d.ts +13 -0
  3. package/3d/TextureUtils.d.ts +24 -0
  4. package/3d/WGPURenderer.d.ts +59 -0
  5. package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
  6. package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
  7. package/3d/animation/SpriteAnimator.d.ts +124 -0
  8. package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
  9. package/3d/canvas.d.ts +42 -0
  10. package/3d/index.d.ts +11 -0
  11. package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
  12. package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
  13. package/3d/physics/physics-interface.d.ts +27 -0
  14. package/3d.d.ts +2 -0
  15. package/3d.js +39338 -0
  16. package/LICENSE +21 -0
  17. package/README.md +41 -0
  18. package/Renderable.d.ts +158 -0
  19. package/animation/Timeline.d.ts +114 -0
  20. package/ansi.d.ts +26 -0
  21. package/buffer.d.ts +88 -0
  22. package/console.d.ts +86 -0
  23. package/index.d.ts +13 -0
  24. package/index.js +10081 -0
  25. package/lib/KeyHandler.d.ts +6 -0
  26. package/lib/TrackedNode.d.ts +36 -0
  27. package/lib/ascii.font.d.ts +300 -0
  28. package/lib/border.d.ts +47 -0
  29. package/lib/index.d.ts +4 -0
  30. package/lib/output.capture.d.ts +24 -0
  31. package/lib/parse.keypress.d.ts +14 -0
  32. package/lib/parse.mouse.d.ts +23 -0
  33. package/lib/selection.d.ts +70 -0
  34. package/lib/styled-text.d.ts +68 -0
  35. package/package.json +42 -0
  36. package/post/filters.d.ts +105 -0
  37. package/renderables/ASCIIFont.d.ts +40 -0
  38. package/renderables/Box.d.ts +45 -0
  39. package/renderables/FrameBuffer.d.ts +15 -0
  40. package/renderables/Group.d.ts +4 -0
  41. package/renderables/Input.d.ts +52 -0
  42. package/renderables/Select.d.ts +74 -0
  43. package/renderables/TabSelect.d.ts +74 -0
  44. package/renderables/Text.d.ts +46 -0
  45. package/renderables/index.d.ts +8 -0
  46. package/renderer.d.ts +208 -0
  47. package/supersampling-jw3fem06.wgsl +201 -0
  48. package/text-buffer.d.ts +45 -0
  49. package/types.d.ts +56 -0
  50. package/utils.d.ts +19 -0
  51. package/zig.d.ts +95 -0
@@ -0,0 +1,74 @@
1
+ import * as THREE from "three";
2
+ import type { Scene } from "three";
3
+ export interface ResourceConfig {
4
+ imagePath: string;
5
+ sheetNumFrames: number;
6
+ }
7
+ export interface SheetProperties {
8
+ imagePath: string;
9
+ sheetTilesetWidth: number;
10
+ sheetTilesetHeight: number;
11
+ sheetNumFrames: number;
12
+ }
13
+ export interface InstanceManagerOptions {
14
+ maxInstances: number;
15
+ renderOrder?: number;
16
+ depthWrite?: boolean;
17
+ name?: string;
18
+ frustumCulled?: boolean;
19
+ matrix?: THREE.Matrix4;
20
+ }
21
+ export interface MeshPoolOptions {
22
+ geometry: () => THREE.BufferGeometry;
23
+ material: THREE.Material;
24
+ maxInstances: number;
25
+ name?: string;
26
+ }
27
+ export declare class MeshPool {
28
+ private pools;
29
+ acquireMesh(poolId: string, options: MeshPoolOptions): THREE.InstancedMesh;
30
+ releaseMesh(poolId: string, mesh: THREE.InstancedMesh): void;
31
+ fill(poolId: string, options: MeshPoolOptions, count: number): void;
32
+ clearPool(poolId: string): void;
33
+ clearAllPools(): void;
34
+ }
35
+ export declare class InstanceManager {
36
+ private scene;
37
+ private instancedMesh;
38
+ private material;
39
+ private maxInstances;
40
+ private _freeIndices;
41
+ private instanceCount;
42
+ private _matrix;
43
+ constructor(scene: Scene, geometry: THREE.BufferGeometry, material: THREE.Material, options: InstanceManagerOptions);
44
+ acquireInstanceSlot(): number;
45
+ releaseInstanceSlot(instanceIndex: number): void;
46
+ getInstanceCount(): number;
47
+ getMaxInstances(): number;
48
+ get hasFreeIndices(): boolean;
49
+ get mesh(): THREE.InstancedMesh;
50
+ dispose(): void;
51
+ }
52
+ export declare class SpriteResource {
53
+ private _texture;
54
+ private _sheetProperties;
55
+ private scene;
56
+ private _meshPool;
57
+ constructor(texture: THREE.DataTexture, sheetProperties: SheetProperties, scene: Scene);
58
+ get texture(): THREE.DataTexture;
59
+ get sheetProperties(): SheetProperties;
60
+ get meshPool(): MeshPool;
61
+ createInstanceManager(geometry: THREE.BufferGeometry, material: THREE.Material, options: InstanceManagerOptions): InstanceManager;
62
+ get uvTileSize(): THREE.Vector2;
63
+ dispose(): void;
64
+ }
65
+ export declare class SpriteResourceManager {
66
+ private resources;
67
+ private textureCache;
68
+ private scene;
69
+ constructor(scene: Scene);
70
+ private getResourceKey;
71
+ getOrCreateResource(texture: THREE.DataTexture, sheetProps: SheetProperties): Promise<SpriteResource>;
72
+ createResource(config: ResourceConfig): Promise<SpriteResource>;
73
+ clearCache(): void;
74
+ }
@@ -0,0 +1,13 @@
1
+ import { Sprite, SpriteMaterial, type SpriteMaterialParameters } from "three";
2
+ export declare class SheetSprite extends Sprite {
3
+ private _frameIndex;
4
+ private _numFrames;
5
+ constructor(material: SpriteMaterial, numFrames: number);
6
+ setIndex: (index: number) => void;
7
+ }
8
+ export declare class SpriteUtils {
9
+ static fromFile(path: string, { materialParameters, }?: {
10
+ materialParameters?: Omit<SpriteMaterialParameters, "map">;
11
+ }): Promise<Sprite>;
12
+ static sheetFromFile(path: string, numFrames: number): Promise<SheetSprite>;
13
+ }
@@ -0,0 +1,24 @@
1
+ import { Color, Texture, DataTexture } from "three";
2
+ export declare class TextureUtils {
3
+ /**
4
+ * Loads a texture from a file path using sharp.
5
+ * Returns a THREE.Texture with ImageData attached to its .image property.
6
+ */
7
+ static loadTextureFromFile(path: string): Promise<DataTexture | null>;
8
+ /**
9
+ * Alias for loadTextureFromFile for convenience.
10
+ */
11
+ static fromFile(path: string): Promise<DataTexture | null>;
12
+ /**
13
+ * Creates a THREE.Texture with a checkerboard pattern.
14
+ */
15
+ static createCheckerboard(size?: number, color1?: Color, color2?: Color, checkSize?: number): Texture;
16
+ /**
17
+ * Creates a THREE.Texture with a gradient pattern.
18
+ */
19
+ static createGradient(size?: number, startColor?: Color, endColor?: Color, direction?: "horizontal" | "vertical" | "radial"): Texture;
20
+ /**
21
+ * Creates a THREE.Texture with a procedural noise pattern.
22
+ */
23
+ static createNoise(size?: number, scale?: number, octaves?: number, color1?: Color, color2?: Color): Texture;
24
+ }
@@ -0,0 +1,59 @@
1
+ import { PerspectiveCamera, OrthographicCamera, Scene } from "three";
2
+ import type { OptimizedBuffer } from "../buffer";
3
+ import { RGBA } from "../types";
4
+ import { SuperSampleAlgorithm } from "./canvas";
5
+ import { type CliRenderer } from "..";
6
+ export declare enum SuperSampleType {
7
+ NONE = "none",
8
+ GPU = "gpu",
9
+ CPU = "cpu"
10
+ }
11
+ export interface ThreeCliRendererOptions {
12
+ width: number;
13
+ height: number;
14
+ focalLength?: number;
15
+ backgroundColor?: RGBA;
16
+ superSample?: SuperSampleType;
17
+ alpha?: boolean;
18
+ autoResize?: boolean;
19
+ libPath?: string;
20
+ }
21
+ export declare class ThreeCliRenderer {
22
+ private readonly cliRenderer;
23
+ private outputWidth;
24
+ private outputHeight;
25
+ private renderWidth;
26
+ private renderHeight;
27
+ private superSample;
28
+ private backgroundColor;
29
+ private alpha;
30
+ private threeRenderer?;
31
+ private canvas?;
32
+ private device;
33
+ private activeCamera;
34
+ private _aspectRatio;
35
+ private doRenderStats;
36
+ private resizeHandler;
37
+ private debugToggleHandler;
38
+ private renderTimeMs;
39
+ private readbackTimeMs;
40
+ private totalDrawTimeMs;
41
+ private renderMethod;
42
+ get aspectRatio(): number;
43
+ constructor(cliRenderer: CliRenderer, options: ThreeCliRendererOptions);
44
+ toggleDebugStats(): void;
45
+ init(): Promise<void>;
46
+ getSuperSampleAlgorithm(): SuperSampleAlgorithm;
47
+ setSuperSampleAlgorithm(superSampleAlgorithm: SuperSampleAlgorithm): void;
48
+ saveToFile(filePath: string): Promise<void>;
49
+ setActiveCamera(camera: PerspectiveCamera | OrthographicCamera): void;
50
+ getActiveCamera(): PerspectiveCamera | OrthographicCamera;
51
+ setBackgroundColor(color: RGBA): void;
52
+ setSize(width: number, height: number, forceUpdate?: boolean): void;
53
+ drawScene(root: Scene, buffer: OptimizedBuffer, deltaTime: number): Promise<void>;
54
+ private rendering;
55
+ doDrawScene(root: Scene, camera: PerspectiveCamera | OrthographicCamera, buffer: OptimizedBuffer, deltaTime: number): Promise<void>;
56
+ toggleSuperSampling(): void;
57
+ renderStats(buffer: OptimizedBuffer): void;
58
+ destroy(): void;
59
+ }
@@ -0,0 +1,71 @@
1
+ import * as THREE from "three";
2
+ import { NodeMaterial } from "three/webgpu";
3
+ import type { TiledSprite, SpriteDefinition, SpriteAnimator } from "./SpriteAnimator";
4
+ import type { SpriteResource } from "../SpriteResourceManager";
5
+ export interface ExplosionEffectParameters {
6
+ numRows: number;
7
+ numCols: number;
8
+ durationMs: number;
9
+ strength: number;
10
+ strengthVariation: number;
11
+ gravity: number;
12
+ gravityScale: number;
13
+ fadeOut: boolean;
14
+ angularVelocityMin: THREE.Vector3;
15
+ angularVelocityMax: THREE.Vector3;
16
+ initialVelocityYBoost: number;
17
+ zVariationStrength: number;
18
+ materialFactory: () => NodeMaterial;
19
+ }
20
+ export declare const DEFAULT_EXPLOSION_PARAMETERS: ExplosionEffectParameters;
21
+ export interface ExplosionCreationData {
22
+ resource: SpriteResource;
23
+ frameUvOffset: THREE.Vector2;
24
+ frameUvSize: THREE.Vector2;
25
+ spriteWorldTransform: THREE.Matrix4;
26
+ }
27
+ export interface SpriteRecreationData {
28
+ definition: SpriteDefinition;
29
+ currentTransform: {
30
+ position: THREE.Vector3;
31
+ quaternion: THREE.Quaternion;
32
+ scale: THREE.Vector3;
33
+ };
34
+ }
35
+ export interface ExplosionHandle {
36
+ readonly effect: ExplodingSpriteEffect;
37
+ readonly recreationData: SpriteRecreationData;
38
+ hasBeenRestored: boolean;
39
+ restoreSprite: (spriteAnimator: SpriteAnimator) => Promise<TiledSprite | null>;
40
+ }
41
+ export declare class ExplodingSpriteEffect {
42
+ private static baseMaterialCache;
43
+ private scene;
44
+ private resource;
45
+ private frameUvOffset;
46
+ private frameUvSize;
47
+ private spriteWorldTransform;
48
+ private params;
49
+ private instancedMesh;
50
+ private material;
51
+ private numParticles;
52
+ private uniformRefs;
53
+ isActive: boolean;
54
+ private timeElapsedMs;
55
+ constructor(scene: THREE.Scene, resource: SpriteResource, frameUvOffset: THREE.Vector2, frameUvSize: THREE.Vector2, spriteWorldTransform: THREE.Matrix4, userParams?: Partial<ExplosionEffectParameters>);
56
+ private _createGPUParticles;
57
+ private _createGPUMaterial;
58
+ static _buildTemplateMaterial(texture: THREE.DataTexture, params: ExplosionEffectParameters, materialFactory: () => NodeMaterial): NodeMaterial;
59
+ update(deltaTimeMs: number): void;
60
+ dispose(): void;
61
+ }
62
+ export declare class ExplosionManager {
63
+ private scene;
64
+ private activeExplosions;
65
+ constructor(scene: THREE.Scene);
66
+ fillPool(resource: SpriteResource, count: number, params?: Partial<ExplosionEffectParameters>): void;
67
+ private _createEffectCreationData;
68
+ createExplosionForSprite(spriteToExplode: TiledSprite, userParams?: Partial<ExplosionEffectParameters>): ExplosionHandle | null;
69
+ update(deltaTimeMs: number): void;
70
+ disposeAll(): void;
71
+ }
@@ -0,0 +1,76 @@
1
+ import * as THREE from "three";
2
+ import { NodeMaterial } from "three/webgpu";
3
+ import type { TiledSprite, SpriteDefinition, SpriteAnimator } from "./SpriteAnimator";
4
+ import type { PhysicsWorld } from "../physics/physics-interface";
5
+ import type { SpriteResource } from "../SpriteResourceManager";
6
+ export interface PhysicsExplosionEffectParameters {
7
+ numRows: number;
8
+ numCols: number;
9
+ durationMs: number;
10
+ explosionForce: number;
11
+ forceVariation: number;
12
+ torqueStrength: number;
13
+ gravityScale: number;
14
+ fadeOut: boolean;
15
+ linearDamping: number;
16
+ angularDamping: number;
17
+ restitution: number;
18
+ friction: number;
19
+ density: number;
20
+ materialFactory: () => NodeMaterial;
21
+ }
22
+ export declare const DEFAULT_PHYSICS_EXPLOSION_PARAMETERS: PhysicsExplosionEffectParameters;
23
+ export interface PhysicsExplosionCreationData {
24
+ resource: SpriteResource;
25
+ frameUvOffset: THREE.Vector2;
26
+ frameUvSize: THREE.Vector2;
27
+ spriteWorldTransform: THREE.Matrix4;
28
+ }
29
+ export interface PhysicsSpriteRecreationData {
30
+ definition: SpriteDefinition;
31
+ currentTransform: {
32
+ position: THREE.Vector3;
33
+ quaternion: THREE.Quaternion;
34
+ scale: THREE.Vector3;
35
+ };
36
+ }
37
+ export interface PhysicsExplosionHandle {
38
+ readonly effect: PhysicsExplodingSpriteEffect;
39
+ readonly recreationData: PhysicsSpriteRecreationData;
40
+ hasBeenRestored: boolean;
41
+ restoreSprite: (spriteAnimator: SpriteAnimator) => Promise<TiledSprite | null>;
42
+ }
43
+ export declare class PhysicsExplodingSpriteEffect {
44
+ private static materialCache;
45
+ private scene;
46
+ private physicsWorld;
47
+ private resource;
48
+ private frameUvOffset;
49
+ private frameUvSize;
50
+ private spriteWorldTransform;
51
+ private params;
52
+ private particles;
53
+ private numParticles;
54
+ private instancedMesh;
55
+ private material;
56
+ private uvOffsetAttribute;
57
+ isActive: boolean;
58
+ private timeElapsedMs;
59
+ private particleIdCounter;
60
+ constructor(scene: THREE.Scene, physicsWorld: PhysicsWorld, resource: SpriteResource, frameUvOffset: THREE.Vector2, frameUvSize: THREE.Vector2, spriteWorldTransform: THREE.Matrix4, userParams?: Partial<PhysicsExplosionEffectParameters>);
61
+ private _createPhysicsParticles;
62
+ static getSharedMaterial(texture: THREE.DataTexture, materialFactory: () => NodeMaterial): NodeMaterial;
63
+ update(deltaTimeMs: number): void;
64
+ dispose(): void;
65
+ }
66
+ export declare class PhysicsExplosionManager {
67
+ private scene;
68
+ private physicsWorld;
69
+ private activeExplosions;
70
+ constructor(scene: THREE.Scene, physicsWorld: PhysicsWorld);
71
+ fillPool(resource: SpriteResource, count: number, params?: Partial<PhysicsExplosionEffectParameters>): void;
72
+ private _createEffectCreationData;
73
+ createExplosionForSprite(spriteToExplode: TiledSprite, userParams?: Partial<PhysicsExplosionEffectParameters>): Promise<PhysicsExplosionHandle | null>;
74
+ update(deltaTimeMs: number): void;
75
+ disposeAll(): void;
76
+ }
@@ -0,0 +1,124 @@
1
+ import * as THREE from "three";
2
+ import { NodeMaterial } from "three/webgpu";
3
+ import type { Scene } from "three";
4
+ import { type SpriteResource, InstanceManager } from "../SpriteResourceManager";
5
+ export interface AnimationStateConfig {
6
+ imagePath: string;
7
+ sheetNumFrames: number;
8
+ animNumFrames: number;
9
+ animFrameOffset: number;
10
+ frameDuration?: number;
11
+ loop?: boolean;
12
+ initialFrame?: number;
13
+ flipX?: boolean;
14
+ flipY?: boolean;
15
+ }
16
+ export type ResolvedAnimationState = Required<AnimationStateConfig> & {
17
+ sheetTilesetWidth: number;
18
+ sheetTilesetHeight: number;
19
+ texture: THREE.DataTexture;
20
+ };
21
+ export interface AnimationDefinition {
22
+ resource: SpriteResource;
23
+ animNumFrames?: number;
24
+ animFrameOffset?: number;
25
+ frameDuration?: number;
26
+ loop?: boolean;
27
+ initialFrame?: number;
28
+ flipX?: boolean;
29
+ flipY?: boolean;
30
+ }
31
+ export interface SpriteDefinition {
32
+ id?: string;
33
+ renderOrder?: number;
34
+ depthWrite?: boolean;
35
+ maxInstances?: number;
36
+ scale?: number;
37
+ initialAnimation: string;
38
+ animations: Record<string, AnimationDefinition>;
39
+ }
40
+ declare class Animation {
41
+ readonly name: string;
42
+ state: ResolvedAnimationState;
43
+ private resource;
44
+ instanceIndex: number;
45
+ private instanceManager;
46
+ private frameAttribute;
47
+ private flipAttribute;
48
+ currentLocalFrame: number;
49
+ timeAccumulator: number;
50
+ isPlaying: boolean;
51
+ private _isActive;
52
+ constructor(name: string, state: ResolvedAnimationState, resource: SpriteResource, instanceIndex: number, instanceManager: InstanceManager, frameAttribute: THREE.InstancedBufferAttribute, flipAttribute: THREE.InstancedBufferAttribute);
53
+ activate(worldTransform: THREE.Matrix4): void;
54
+ deactivate(): void;
55
+ updateVisuals(worldTransform: THREE.Matrix4): void;
56
+ updateTime(deltaTimeMs: number): boolean;
57
+ play(): void;
58
+ stop(): void;
59
+ goToFrame(localFrame: number): void;
60
+ setFrameDuration(newFrameDuration: number): void;
61
+ getResource(): SpriteResource;
62
+ releaseInstanceSlot(): void;
63
+ }
64
+ export declare class TiledSprite {
65
+ readonly id: string;
66
+ private animator;
67
+ private _animations;
68
+ private _currentAnimation;
69
+ private _transformObject;
70
+ private _reusableMatrix;
71
+ private _reusableAnimGeomScale;
72
+ private _isVisibleState;
73
+ private originalDefinition;
74
+ constructor(id: string, userSpriteDefinition: SpriteDefinition, animator: SpriteAnimator, animationInstanceParams: Array<{
75
+ name: string;
76
+ state: ResolvedAnimationState;
77
+ resource: SpriteResource;
78
+ index: number;
79
+ instanceManager: InstanceManager;
80
+ frameAttribute: THREE.InstancedBufferAttribute;
81
+ flipAttribute: THREE.InstancedBufferAttribute;
82
+ }>);
83
+ private _calculateAnimationWorldMatrix;
84
+ get currentAnimation(): Animation;
85
+ private updateCurrentAnimationVisuals;
86
+ setPosition(position: THREE.Vector3): void;
87
+ setRotation(rotation: THREE.Quaternion): void;
88
+ setScale(scale: THREE.Vector3): void;
89
+ getScale(): THREE.Vector3;
90
+ setTransform(position: THREE.Vector3, rotation: THREE.Quaternion, newScale: THREE.Vector3): void;
91
+ play(): void;
92
+ stop(): void;
93
+ goToFrame(frame: number): void;
94
+ setFrameDuration(newFrameDuration: number): void;
95
+ isPlaying(): boolean;
96
+ setAnimation(animationName: string): Promise<void>;
97
+ update(deltaTime: number): void;
98
+ destroy(): void;
99
+ getCurrentAnimationName(): string;
100
+ getWorldTransform(): THREE.Matrix4;
101
+ getWorldPlaneSize(): THREE.Vector2;
102
+ get visible(): boolean;
103
+ set visible(value: boolean);
104
+ get definition(): SpriteDefinition;
105
+ get currentTransform(): {
106
+ position: THREE.Vector3;
107
+ quaternion: THREE.Quaternion;
108
+ scale: THREE.Vector3;
109
+ };
110
+ }
111
+ export declare class SpriteAnimator {
112
+ private scene;
113
+ private instances;
114
+ private _idCounter;
115
+ private instanceManagers;
116
+ constructor(scene: Scene);
117
+ private createSpriteAnimationMaterial;
118
+ private getOrCreateInstanceManager;
119
+ createSprite(userSpriteDefinition: SpriteDefinition, materialFactory?: () => NodeMaterial): Promise<TiledSprite>;
120
+ update(deltaTime: number): void;
121
+ removeSprite(id: string): void;
122
+ removeAllSprites(): void;
123
+ }
124
+ export {};
@@ -0,0 +1,62 @@
1
+ import * as THREE from "three";
2
+ import { NodeMaterial } from "three/webgpu";
3
+ import type { SpriteResource } from "../SpriteResourceManager";
4
+ export interface ParticleEffectParameters {
5
+ resource: SpriteResource;
6
+ animNumFrames?: number;
7
+ animFrameOffset?: number;
8
+ frameDuration?: number;
9
+ loop?: boolean;
10
+ scale?: number;
11
+ renderOrder?: number;
12
+ depthWrite?: boolean;
13
+ maxParticles: number;
14
+ lifetimeMsMin: number;
15
+ lifetimeMsMax: number;
16
+ origins: THREE.Vector3[];
17
+ spawnRadius: number | THREE.Vector3;
18
+ initialVelocityMin: THREE.Vector3;
19
+ initialVelocityMax: THREE.Vector3;
20
+ angularVelocityMin: THREE.Vector3;
21
+ angularVelocityMax: THREE.Vector3;
22
+ gravity?: THREE.Vector3;
23
+ randomGravityFactorMinMax?: THREE.Vector2;
24
+ scaleOverLifeMinMax?: THREE.Vector2;
25
+ fadeOut?: boolean;
26
+ materialFactory?: () => NodeMaterial;
27
+ }
28
+ export declare class SpriteParticleGenerator {
29
+ private scene;
30
+ private baseConfig;
31
+ private autoSpawnConfig;
32
+ private _currentOriginIndex;
33
+ private instanceManager;
34
+ private material;
35
+ private texture;
36
+ private particleDataAttribute;
37
+ private velocityAttribute;
38
+ private angularVelAttribute;
39
+ private scaleDataAttribute;
40
+ private timeUniform;
41
+ private gravityUniform;
42
+ private animationUniform;
43
+ private sheetNumFramesUniform;
44
+ private particleSlots;
45
+ private currentTime;
46
+ private maxParticles;
47
+ private isInitialized;
48
+ constructor(scene: THREE.Scene, initialBaseConfig: ParticleEffectParameters);
49
+ private _ensureInitialized;
50
+ private _initializeGPUParticleSystem;
51
+ private _createGPUMaterial;
52
+ private _resolveCurrentOrigin;
53
+ getActiveParticleCount(): number;
54
+ private _resolveSpawnRadius;
55
+ private _spawnParticle;
56
+ spawnParticles(count: number, overrides?: Partial<ParticleEffectParameters>): Promise<void>;
57
+ setAutoSpawn(ratePerSecond: number, autoSpawnParamOverrides?: Partial<ParticleEffectParameters>): void;
58
+ hasAutoSpawn(): boolean;
59
+ stopAutoSpawn(): void;
60
+ update(deltaTimeMs: number): Promise<void>;
61
+ dispose(): void;
62
+ }
package/3d/canvas.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ import { GPUCanvasContextMock } from "bun-webgpu";
2
+ import { SuperSampleType } from "./WGPURenderer";
3
+ import type { OptimizedBuffer } from "../buffer";
4
+ export declare enum SuperSampleAlgorithm {
5
+ STANDARD = 0,
6
+ PRE_SQUEEZED = 1
7
+ }
8
+ export declare class CLICanvas {
9
+ private device;
10
+ private readbackBuffer;
11
+ private width;
12
+ private height;
13
+ private gpuCanvasContext;
14
+ superSampleDrawTimeMs: number;
15
+ mapAsyncTimeMs: number;
16
+ superSample: SuperSampleType;
17
+ private computePipeline;
18
+ private computeBindGroupLayout;
19
+ private computeOutputBuffer;
20
+ private computeParamsBuffer;
21
+ private computeReadbackBuffer;
22
+ private updateScheduled;
23
+ private screenshotGPUBuffer;
24
+ private superSampleAlgorithm;
25
+ constructor(device: GPUDevice, width: number, height: number, superSample: SuperSampleType, sampleAlgo?: SuperSampleAlgorithm);
26
+ setSuperSampleAlgorithm(superSampleAlgorithm: SuperSampleAlgorithm): void;
27
+ getSuperSampleAlgorithm(): SuperSampleAlgorithm;
28
+ getContext(type: string, attrs?: WebGLContextAttributes): GPUCanvasContextMock;
29
+ setSize(width: number, height: number): void;
30
+ addEventListener(event: string, listener: any, options?: any): void;
31
+ removeEventListener(event: string, listener: any, options?: any): void;
32
+ dispatchEvent(event: Event): void;
33
+ setSuperSample(superSample: SuperSampleType): void;
34
+ saveToFile(filePath: string): Promise<void>;
35
+ private initComputePipeline;
36
+ private updateComputeParams;
37
+ private scheduleUpdateComputeBuffers;
38
+ private updateComputeBuffers;
39
+ private runComputeShaderSuperSampling;
40
+ private updateReadbackBuffer;
41
+ readPixelsIntoBuffer(buffer: OptimizedBuffer): Promise<void>;
42
+ }
package/3d/index.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export * from "./WGPURenderer";
2
+ export * from "./TextureUtils";
3
+ export * from "./canvas";
4
+ export * from "./SpriteUtils";
5
+ export * from "./animation/SpriteAnimator";
6
+ export * from "./animation/ExplodingSpriteEffect";
7
+ export * from "./animation/SpriteParticleGenerator";
8
+ export * from "./animation/PhysicsExplodingSpriteEffect";
9
+ export * from "./physics/RapierPhysicsAdapter";
10
+ export * from "./physics/PlanckPhysicsAdapter";
11
+ export * from "./SpriteResourceManager";
@@ -0,0 +1,19 @@
1
+ import * as planck from "planck";
2
+ import type { PhysicsVector2, PhysicsRigidBodyDesc, PhysicsColliderDesc, PhysicsRigidBody, PhysicsWorld } from "./physics-interface";
3
+ export declare class PlanckRigidBody implements PhysicsRigidBody {
4
+ private planckBody;
5
+ constructor(planckBody: planck.Body);
6
+ applyImpulse(force: PhysicsVector2): void;
7
+ applyTorqueImpulse(torque: number): void;
8
+ getTranslation(): PhysicsVector2;
9
+ getRotation(): number;
10
+ get nativeBody(): planck.Body;
11
+ }
12
+ export declare class PlanckPhysicsWorld implements PhysicsWorld {
13
+ private planckWorld;
14
+ constructor(planckWorld: planck.World);
15
+ createRigidBody(desc: PhysicsRigidBodyDesc): PhysicsRigidBody;
16
+ createCollider(colliderDesc: PhysicsColliderDesc, rigidBody: PhysicsRigidBody): void;
17
+ removeRigidBody(rigidBody: PhysicsRigidBody): void;
18
+ static createFromPlanckWorld(planckWorld: planck.World): PlanckPhysicsWorld;
19
+ }
@@ -0,0 +1,19 @@
1
+ import RAPIER from "@dimforge/rapier2d-simd-compat";
2
+ import type { PhysicsVector2, PhysicsRigidBodyDesc, PhysicsColliderDesc, PhysicsRigidBody, PhysicsWorld } from "./physics-interface";
3
+ export declare class RapierRigidBody implements PhysicsRigidBody {
4
+ private rapierBody;
5
+ constructor(rapierBody: RAPIER.RigidBody);
6
+ applyImpulse(force: PhysicsVector2): void;
7
+ applyTorqueImpulse(torque: number): void;
8
+ getTranslation(): PhysicsVector2;
9
+ getRotation(): number;
10
+ get nativeBody(): RAPIER.RigidBody;
11
+ }
12
+ export declare class RapierPhysicsWorld implements PhysicsWorld {
13
+ private rapierWorld;
14
+ constructor(rapierWorld: RAPIER.World);
15
+ createRigidBody(desc: PhysicsRigidBodyDesc): PhysicsRigidBody;
16
+ createCollider(colliderDesc: PhysicsColliderDesc, rigidBody: PhysicsRigidBody): void;
17
+ removeRigidBody(rigidBody: PhysicsRigidBody): void;
18
+ static createFromRapierWorld(rapierWorld: RAPIER.World): RapierPhysicsWorld;
19
+ }
@@ -0,0 +1,27 @@
1
+ export interface PhysicsVector2 {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ export interface PhysicsRigidBodyDesc {
6
+ translation: PhysicsVector2;
7
+ linearDamping: number;
8
+ angularDamping: number;
9
+ }
10
+ export interface PhysicsColliderDesc {
11
+ width: number;
12
+ height: number;
13
+ restitution: number;
14
+ friction: number;
15
+ density: number;
16
+ }
17
+ export interface PhysicsRigidBody {
18
+ applyImpulse(force: PhysicsVector2): void;
19
+ applyTorqueImpulse(torque: number): void;
20
+ getTranslation(): PhysicsVector2;
21
+ getRotation(): number;
22
+ }
23
+ export interface PhysicsWorld {
24
+ createRigidBody(desc: PhysicsRigidBodyDesc): PhysicsRigidBody;
25
+ createCollider(colliderDesc: PhysicsColliderDesc, rigidBody: PhysicsRigidBody): void;
26
+ removeRigidBody(rigidBody: PhysicsRigidBody): void;
27
+ }
package/3d.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./3d/index";
2
+ export * as THREE from "three";