UNPKG

lab13-sdk

Version:

JS13K tools and game infrastructure SDK.

250 lines (189 loc) 6.4 kB
declare global { /** Enable shader/program compilation logs (optional) */ var debug: number /** Main WebGL framework object */ var W: WebGLFramework var c: HTMLCanvasElement } interface WebGLFramework { /** Canvas element used for rendering */ canvas: HTMLCanvasElement /** Object counter for auto-generating names */ objs: number /** Current object states (for animation interpolation) */ current: Record<string, ObjectState> /** Next object states (target states for animation) */ next: Record<string, ObjectState> /** Cached WebGL textures by ID */ textures: Record<string, WebGLTexture> /** WebGL2 rendering context */ gl: WebGL2RenderingContext /** Compiled WebGL shader program */ program: WebGLProgram /** Projection matrix for 3D perspective */ projection: DOMMatrix /** Timestamp of last frame for delta time calculation */ lastFrame: number /** Ambient light intensity (0-1) */ ambientLight: number /** Available 3D models for rendering */ models: Record<string, Model> /** Custom renderers (optional) */ renderers?: Record<string, any> /** Initialize the WebGL framework with a canvas element */ reset(canvas: HTMLCanvasElement): void /** Set object state and create/update 3D objects */ setState( state: Partial<ObjectState>, type: string, texture?: WebGLTexture, i?: any, normal?: number[], A?: any, B?: any, C?: any, Ai?: any, Bi?: any, Ci?: any, AB?: any, BC?: any ): void /** Main render loop - called automatically by requestAnimationFrame */ draw(now?: number, dt?: number, v?: DOMMatrix, i?: any, transparent?: ObjectState[]): void /** Render a single object to the screen */ render(object: ObjectState, dt: number, just_compute?: boolean, buffer?: number): void /** Interpolate a property between current and next values for smooth animation */ lerp(item: string, property: string): number /** Create transformation matrix from object's current state */ animation(item: string, m?: DOMMatrix): DOMMatrix /** Calculate squared distance between two objects (for transparency sorting) */ dist(a: ObjectState, b?: ObjectState): number /** Set ambient light intensity (0-1) */ ambient(a: number): void /** Convert hex color string to RGBA array */ col(c: string): number[] /** Register a new 3D model type */ add(name: string, objects: Model): void /** Compute smooth normals for a model (optional plugin) */ smooth( state: ObjectState, dict?: Record<string, number[]>, vertices?: number[][], iterate?: any, iterateSwitch?: number, i?: number, j?: number, A?: number[], B?: number[], C?: number[], Ai?: number, Bi?: number, Ci?: number, normal?: number[] ): void /** Create a group object for organizing other objects */ group(t: Partial<ObjectState>): void /** Animate object to new state with optional delay */ move(t: Partial<ObjectState>, delay?: number): void /** Remove object from scene with optional delay */ delete(t: string, delay?: number): void /** Set camera properties with optional delay */ camera(t: Partial<ObjectState>, delay?: number): void /** Set light properties with optional delay */ light(t: Partial<ObjectState>, delay?: number): void /** Create a plane object (2D quad) */ plane(settings: Partial<ObjectState>): void /** Create a cube object */ cube(settings: Partial<ObjectState>): void /** Create a pyramid object */ pyramid(settings: Partial<ObjectState>): void /** Create a sphere object */ sphere(settings: Partial<ObjectState>): void /** Create a billboard object (always faces camera) */ billboard(settings: Partial<ObjectState>): void /** Set background clear color using hex string */ clearColor(c: string): void } interface ObjectState { /** Object name (auto-generated if not provided) */ n?: string /** Position coordinates */ x?: number y?: number z?: number /** Rotation angles in degrees */ rx?: number ry?: number rz?: number /** Scale dimensions */ w?: number h?: number d?: number /** Uniform scale (sets w, h, d to same value) */ size?: number /** Color as hex string (e.g., 'f00' for red, '00f' for blue) */ b?: string /** Texture data */ t?: TextureData /** Texture/color mix ratio (0 = full texture, 1 = full color) */ mix?: number /** WebGL draw mode (TRIANGLES, TRIANGLE_STRIP, etc.) */ mode?: number /** Enable smooth shading */ s?: boolean /** Disable shading/lighting */ ns?: boolean /** Animation duration in milliseconds */ a?: number /** Animation timer (internal use) */ f?: number /** Group name for hierarchical transformations */ g?: string /** Camera field of view in degrees */ fov?: number /** Object type (set by framework) */ type?: string /** Current transformation matrix (set by framework) */ m?: DOMMatrix /** Final transformation matrix (set by framework) */ M?: DOMMatrix } interface TextureData { /** Unique texture identifier */ id: string /** Texture width in pixels */ width: number /** Texture height in pixels */ height: number } interface Model { /** Vertex positions as [x,y,z, x,y,z, ...] array */ vertices: number[] /** Texture coordinates as [u,v, u,v, ...] array */ uv?: number[] /** Triangle indices for indexed rendering */ indices?: number[] /** Vertex normals as [nx,ny,nz, nx,ny,nz, ...] array */ normals?: number[] /** Flag indicating custom normals are provided */ customNormals?: boolean /** WebGL vertex buffer (created by framework) */ verticesBuffer?: WebGLBuffer /** WebGL UV buffer (created by framework) */ uvBuffer?: WebGLBuffer /** WebGL index buffer (created by framework) */ indicesBuffer?: WebGLBuffer /** WebGL normal buffer (created by framework) */ normalsBuffer?: WebGLBuffer } /** Built-in plane model (2D quad) */ interface PlaneModel extends Model {} /** Built-in cube model (6 faces) */ interface CubeModel extends Model {} /** Built-in pyramid model (4 triangular faces + base) */ interface PyramidModel extends Model {} /** Built-in sphere model (generated procedurally) */ interface SphereModel extends Model {} /** Built-in billboard model (always faces camera) */ interface BillboardModel extends Model {} export {}