UNPKG

simulationjs

Version:

A simple graphics library for 2d and 3d graphics on html canvas

357 lines (356 loc) 14.6 kB
export type LerpFunc = (n: number) => number; type SimulationElementType = 'line' | 'circle' | 'polygon' | 'square' | 'arc' | 'collection'; type SimulationElement3dType = 'cube' | 'plane' | 'line'; export declare class LightSource { pos: Vector3; id: string; intensity: number; constructor(pos: Vector3, intensity?: number, id?: string); } export declare class Camera { pos: Vector3; rot: Vector3; constructor(pos: Vector3, rot: Vector3); } export declare class Vector3 { x: number; y: number; z: number; constructor(x: number, y: number, z: number); format(): string; clone(): Vector3; rotateX(val: number): void; rotateY(val: number): void; rotateZ(val: number): this; rotate(vec: Vector3): this; multiply(val: number): this; divide(val: number): this; add(vec: Vector3): this; sub(vec: Vector3): this; getMag(): number; getRotation(): Vector; dot(vec: Vector3): number; normalize(): this; cross(vec: Vector3): Vector3; } export declare class Vector { x: number; y: number; constructor(x: number, y: number); getRotation(): number; getMag(): number; rotate(deg: number): this; draw(c: CanvasRenderingContext2D, pos?: Vector, color?: Color, thickness?: number): void; normalize(): this; multiply(n: number): this; sub(v: Vector): this; add(v: Vector): this; divide(n: number): this; appendMag(value: number): this; dot(vec: Vector): number; clone(): Vector; format(): string; } export declare class SimulationElement { pos: Vector; color: Color; type: SimulationElementType | null; running: boolean; _3d: boolean; id: string; constructor(pos: Vector, color?: Color, type?: SimulationElementType | null, id?: string); onFrame(): void; end(): void; draw(_: CanvasRenderingContext2D): void; setId(id: string): void; fill(color: Color, t?: number, f?: LerpFunc): Promise<void>; moveTo(p: Vector, t?: number, f?: LerpFunc): Promise<void>; move(p: Vector, t?: number, f?: LerpFunc): Promise<void>; } export declare class Color { r: number; g: number; b: number; a: number; constructor(r: number, g: number, b: number, a?: number); clone(): Color; private compToHex; toHex(): string; } export declare class SceneCollection extends SimulationElement { name: string; scene: (SimulationElement | SimulationElement3d)[]; _isSceneCollection: boolean; camera: Camera; displaySurface: Vector3; lightSources: LightSource[]; ambientLighting: number; planesSortFunc: (planes: Plane[], cam: Camera) => Plane[]; constructor(name?: string); onFrame(): void; setSortFunc(func: (planes: Plane[], cam: Camera) => Plane[]): void; set3dObjects(cam: Camera, displaySurface: Vector3): void; setAmbientLighting(val: number): void; end(): void; add(element: SimulationElement | SimulationElement3d, id?: string | null): void; private updateSceneLightSources; setLightSources(sources: LightSource[]): void; addLightSource(source: LightSource): void; removeLightSourceWithId(id: string): void; getLightSourceWithId(id: string): LightSource | null; removeWithId(id: string): void; removeWithObject(element: SimulationElement): void; draw(c: CanvasRenderingContext2D): void; empty(): void; } export declare class SimulationElement3d { pos: Vector3; color: Color; type: SimulationElement3dType | null; running: boolean; _3d: boolean; id: string; lighting: boolean; constructor(pos: Vector3, color?: Color, lighting?: boolean, type?: SimulationElement3dType | null, id?: string); onFrame(): void; setLighting(val: boolean): void; setId(id: string): void; end(): void; draw(_ctx: CanvasRenderingContext2D, _camera: Camera, _displaySurface: Vector3, _lightSources: LightSource[], _ambientLighting: number): void; fill(color: Color, t?: number, f?: LerpFunc): Promise<void>; moveTo(p: Vector3, t?: number, f?: LerpFunc): Promise<void>; move(p: Vector3, t?: number, f?: LerpFunc): Promise<void>; } export declare class Line extends SimulationElement { startPoint: Vector; endPoint: Vector; thickness: number; constructor(p1: Vector, p2: Vector, color?: Color, thickness?: number); clone(): Line; setStart(p: Vector, t?: number, f?: LerpFunc): Promise<void>; setEnd(p: Vector, t?: number, f?: LerpFunc): Promise<void>; moveTo(p: Vector, t?: number): Promise<void>; move(v: Vector, t?: number): Promise<void>; draw(c: CanvasRenderingContext2D): void; } export declare class Circle extends SimulationElement { radius: number; startAngle: number; endAngle: number; counterClockwise: boolean; thickness: number; rotation: number; fillCircle: boolean; constructor(pos: Vector, radius: number, color?: Color, startAngle?: number, endAngle?: number, thickness?: number, rotation?: number, fill?: boolean, counterClockwise?: boolean); setCounterClockwise(val: boolean): void; setFillCircle(val: boolean): void; draw(c: CanvasRenderingContext2D): void; contains(p: Vector): boolean; scaleRadius(scale: number, t?: number, f?: LerpFunc): Promise<void>; setRadius(value: number, t?: number, f?: LerpFunc): Promise<void>; setThickness(val: number, t?: number, f?: LerpFunc): Promise<void>; setStartAngle(angle: number, t?: number, f?: LerpFunc): Promise<void>; setEndAngle(angle: number, t?: number, f?: LerpFunc): Promise<void>; rotate(amount: number, t?: number, f?: LerpFunc): Promise<void>; rotateTo(deg: number, t?: number, f?: LerpFunc): Promise<void>; clone(): Circle; } export declare class Polygon extends SimulationElement { offsetPoint: Vector; points: Vector[]; rotation: number; constructor(pos: Vector, points: Vector[], color?: Color, r?: number, offsetPoint?: Vector); setPoints(points: Vector[], t?: number, f?: LerpFunc): Promise<void>; clone(): Polygon; rotate(deg: number, t?: number, f?: LerpFunc): Promise<void>; rotateTo(deg: number, t?: number, f?: LerpFunc): Promise<void>; draw(c: CanvasRenderingContext2D): void; } export declare class Plane extends SimulationElement3d { points: Vector3[]; wireframe: boolean; fillPlane: boolean; constructor(pos: Vector3, points: Vector3[], color?: Color, fill?: boolean, wireframe?: boolean, lighting?: boolean); clone(): Plane; setPoints(points: Vector3[], t?: number, f?: LerpFunc): Promise<void>; draw(c: CanvasRenderingContext2D, camera: Camera, displaySurface: Vector3, lightSources: LightSource[], ambientLighting: number): void; getNormals(): Vector3[]; getCenter(): Vector3; } export declare class Cube extends SimulationElement3d { width: number; height: number; depth: number; planes: Plane[]; points: Vector3[]; rotation: Vector3; fillCube: boolean; wireframe: boolean; constructor(pos: Vector3, width: number, height: number, depth: number, color?: Color, rotation?: Vector3, fill?: boolean, wireframe?: boolean, lighting?: boolean); generatePoints(): void; private generatePlanes; private updatePoints; private updatePlanes; rotate(amount: Vector3, t?: number, f?: LerpFunc): Promise<void>; rotateTo(amount: Vector3, t?: number, f?: LerpFunc): Promise<void>; setHeight(amount: number, t?: number, f?: LerpFunc): Promise<void>; setDepth(amount: number, t?: number, f?: LerpFunc): Promise<void>; setWidth(amount: number, t?: number, f?: LerpFunc): Promise<void>; scaleHeight(amount: number, t?: number, f?: LerpFunc): Promise<void>; scaleWidth(amount: number, t?: number, f?: LerpFunc): Promise<void>; scaleDepth(amount: number, t?: number, f?: LerpFunc): Promise<void>; draw(c: CanvasRenderingContext2D, camera: Camera, displaySurface: Vector3, lightSources: LightSource[], ambientLighting: number): void; } export declare class Square extends SimulationElement { width: number; height: number; rotation: number; private showNodeVectors; hovering: boolean; offsetPoint: Vector; topLeft: Vector; topRight: Vector; bottomLeft: Vector; bottomRight: Vector; constructor(pos: Vector, width: number, height: number, color?: Color, offsetPoint?: Vector, rotation?: number); private generateVectors; updateOffsetPosition(p: Vector): void; setNodeVectors(show: boolean): void; rotate(deg: number, t?: number, f?: LerpFunc): Promise<void>; rotateTo(deg: number, t?: number, f?: LerpFunc): Promise<void>; draw(c: CanvasRenderingContext2D): void; scale(value: number, t?: number, f?: LerpFunc): Promise<void>; scaleWidth(value: number, t?: number, f?: LerpFunc): Promise<void>; scaleHeight(value: number, t?: number, f?: LerpFunc): Promise<void>; setWidth(value: number, t?: number, f?: LerpFunc): Promise<void>; setHeight(value: number, t?: number, f?: LerpFunc): Promise<void>; contains(p: Vector): boolean; clone(): Square; } declare class Event { event: string; callback: Function; constructor(event: string, callback: Function); } export declare class Line3d extends SimulationElement3d { p1: Vector3; p2: Vector3; thickness: number; constructor(p1: Vector3, p2: Vector3, color?: Color, thickness?: number, lighting?: boolean, id?: string); draw(ctx: CanvasRenderingContext2D, camera: Camera, displaySurface: Vector3): void; } export declare class Simulation { scene: (SimulationElement | SimulationElement3d)[]; fitting: boolean; bgColor: Color; canvas: HTMLCanvasElement | null; width: number; height: number; running: boolean; _prevReq: number; events: Event[]; ctx: CanvasRenderingContext2D | null; camera: Camera; center: Vector; displaySurface: Vector3; forward: Vector3; backward: Vector3; left: Vector3; right: Vector3; up: Vector3; down: Vector3; lightSources: LightSource[]; ambientLighting: number; planesSortFunc: (planes: Plane[], cam: Camera) => Plane[]; constructor(el: string | HTMLCanvasElement, cameraPos?: Vector3, cameraRot?: Vector3, displaySurfaceDepth?: number, center?: Vector, displaySurfaceSize?: Vector); start(): void; setSortFunc(func: (planes: Plane[], cam: Camera) => Plane[]): void; private updateSceneLightSources; setLightSources(sources: LightSource[]): void; addLightSource(source: LightSource): void; removeLightSourceWithId(id: string): void; getLightSourceWithId(id: string): LightSource | null; setAmbientLighting(val: number): void; setDirections(): void; render(c: CanvasRenderingContext2D): void; end(): void; add(element: SimulationElement | SimulationElement3d, id?: string | null): void; removeWithId(id: string): void; removeWithObject(element: SimulationElement): void; on<K extends keyof HTMLElementEventMap>(event: K, callback: Function): void; removeListener<K extends keyof HTMLElementEventMap>(event: K, callback: Function): void; fitElement(): void; setSize(x: number, y: number): void; setBgColor(color: Color): void; resizeCanvas(): void; empty(): void; moveCamera(v: Vector3, t?: number, f?: LerpFunc): Promise<void>; moveCameraTo(v: Vector3, t?: number, f?: LerpFunc): Promise<void>; rotateCamera(v: Vector3, t?: number, f?: LerpFunc): Promise<void>; rotateCameraTo(v: Vector3, t?: number, f?: LerpFunc): Promise<void>; } export declare function pythag(x: number, y: number): number; export declare function distance(p1: Vector, p2: Vector): number; export declare function distance3d(vec1: Vector3, vec2: Vector3): number; export declare function degToRad(deg: number): number; export declare function radToDeg(rad: number): number; export declare function lerp(a: number, b: number, t: number): number; export declare function smoothStep(t: number): number; export declare function linearStep(n: number): number; /** * @param callback1 - called when t is 0 * @param callback2 - called every frame until the animation is finished * @param callback3 - called after animation is finished * @param t - animation time (seconds) * @returns {Promise<void>} */ export declare function transitionValues(callback1: () => void, callback2: (deltaT: number, t: number) => boolean, callback3: () => void, transitionLength: number, func?: (n: number) => number): Promise<void>; export declare function compare(val1: any, val2: any): boolean; type Shift<T extends any[]> = ((...args: T) => any) extends (arg1: any, ...rest: infer R) => any ? R : never; export declare function frameLoop<T extends (...args: any[]) => any>(cb: T): (...params: Shift<Parameters<T>>) => void; type ProjectedPoint = { point: Vector; behindCamera: boolean; }; export declare function sortPlanes(planes: Plane[], camera: Camera): Plane[]; export declare function projectPoint(p: Vector3, cam: Camera, displaySurface: Vector3): ProjectedPoint; export declare function randInt(range: number, offset?: number): number; export declare function randomColor(): Color; export declare function vector3DegToRad(vec: Vector3): Vector3; export declare function vector3RadToDeg(vec: Vector3): Vector3; export declare function angleBetweenVector3(vec1: Vector3, vec2: Vector3): number; export declare function clamp(value: number, min: number, max: number): number; declare const _default: { Vector: typeof Vector; SimulationElement: typeof SimulationElement; SimulationElement3d: typeof SimulationElement3d; Color: typeof Color; SceneCollection: typeof SceneCollection; Line: typeof Line; Circle: typeof Circle; Polygon: typeof Polygon; Square: typeof Square; Simulation: typeof Simulation; pythag: typeof pythag; distance: typeof distance; degToRad: typeof degToRad; radToDeg: typeof radToDeg; transitionValues: typeof transitionValues; compare: typeof compare; Cube: typeof Cube; Camera: typeof Camera; Plane: typeof Plane; lerp: typeof lerp; smoothStep: typeof smoothStep; linearStep: typeof linearStep; frameLoop: typeof frameLoop; randInt: typeof randInt; randomColor: typeof randomColor; vector3DegToRad: typeof vector3DegToRad; vector3RadToDeg: typeof vector3RadToDeg; angleBetweenVector3: typeof angleBetweenVector3; clamp: typeof clamp; Line3d: typeof Line3d; sortPlanes: typeof sortPlanes; }; export default _default;