stage-js
Version:
2D HTML5 Rendering and Layout
563 lines (559 loc) • 19.3 kB
TypeScript
// Generated by dts-bundle-generator v9.5.1
export declare const math: any;
export interface MatrixValue {
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
}
export interface Vec2Value {
x: number;
y: number;
}
export declare class Matrix {
/** x-scale */
a: number;
b: number;
c: number;
/** y-scale */
d: number;
/** x-translate */
e: number;
/** y-translate */
f: number;
constructor(a: number, b: number, c: number, d: number, e: number, f: number);
constructor(m: MatrixValue);
constructor();
toString(): string;
clone(): Matrix;
reset(a: number, b: number, c: number, d: number, e: number, f: number): this;
reset(m: MatrixValue): this;
identity(): this;
rotate(angle: number): this;
translate(x: number, y: number): this;
scale(x: number, y: number): this;
skew(x: number, y: number): this;
concat(m: MatrixValue): this;
inverse(): Matrix;
map(p: Vec2Value, q?: Vec2Value): Vec2Value;
mapX(x: number | Vec2Value, y?: number): number;
mapY(x: number | Vec2Value, y?: number): number;
}
/**
* Textures are used to clip and resize image objects.
*/
export declare abstract class Texture {
/** @hidden */ sx: number;
/** @hidden */ sy: number;
/** @hidden */ sw: number;
/** @hidden */ sh: number;
/** @hidden */ dx: number;
/** @hidden */ dy: number;
/** @hidden */ dw: number;
/** @hidden */ dh: number;
setSourceCoordinate(x: number, y: number): void;
setSourceDimension(w: number, h: number): void;
setDestinationCoordinate(x: number, y: number): void;
setDestinationDimension(w: number, h: number): void;
abstract getWidth(): number;
abstract getHeight(): number;
/**
* Defer draw spec to texture config. This is used when a sprite draws its textures.
*/
draw(context: CanvasRenderingContext2D): void;
/**
* This is probably unused.
* Note: dx, dy are added to this.dx, this.dy.
*/
draw(context: CanvasRenderingContext2D, dx: number, dy: number, dw: number, dh: number): void;
/**
* This is used when a piped texture passes drawing to it backend.
* Note: sx, sy, dx, dy are added to this.sx, this.sy, this.dx, this.dy.
*/
draw(context: CanvasRenderingContext2D, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;
}
export type TextureImageSource = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;
export declare class ImageTexture extends Texture {
constructor(source?: TextureImageSource, pixelRatio?: number);
setSourceImage(image: TextureImageSource, pixelRatio?: number): void;
/**
* Add padding to the image texture. Padding can be negative.
*/
setPadding(padding: number): void;
getWidth(): number;
getHeight(): number;
}
export interface AtlasTextureDefinition {
x: number;
y: number;
width: number;
height: number;
left?: number;
top?: number;
right?: number;
bottom?: number;
}
export type MonotypeAtlasTextureDefinition = Record<string, AtlasTextureDefinition | Texture | string>;
export type AnimAtlasTextureDefinition = (AtlasTextureDefinition | Texture | string)[];
export interface AtlasDefinition {
name?: string;
image?: {
src: string;
ratio?: number;
} | {
/** @deprecated Use src instead of url */
url: string;
ratio?: number;
};
ppu?: number;
textures?: Record<string, AtlasTextureDefinition | Texture | MonotypeAtlasTextureDefinition | AnimAtlasTextureDefinition>;
map?: (texture: AtlasTextureDefinition) => AtlasTextureDefinition;
/** @deprecated Use map */
filter?: (texture: AtlasTextureDefinition) => AtlasTextureDefinition;
/** @deprecated */
trim?: number;
/** @deprecated Use ppu */
ratio?: number;
/** @deprecated Use map */
imagePath?: string;
/** @deprecated Use map */
imageRatio?: number;
}
export declare class Atlas extends ImageTexture {
constructor(def?: AtlasDefinition);
load(): Promise<void>;
select: (query?: string) => TextureSelection;
}
export type TextureSelectionInputOne = Texture | AtlasTextureDefinition | string;
export type TextureSelectionInputMap = Record<string, TextureSelectionInputOne>;
export type TextureSelectionInputArray = TextureSelectionInputOne[];
export type TextureSelectionInputFactory = (subquery: string) => TextureSelectionInputOne;
/**
* Texture selection input could be one:
* - texture
* - sprite definition (and an atlas): atlas sprite texture
* - string (with an atlas): string used as key to find sprite in the atlas, re-resolve
* - hash object: use subquery as key, then re-resolve value
* - array: re-resolve first item
* - function: call function with subquery, then re-resolve
*/
export type TextureSelectionInput = TextureSelectionInputOne | TextureSelectionInputMap | TextureSelectionInputArray | TextureSelectionInputFactory;
/**
* TextureSelection holds reference to one or many textures or something that
* can be resolved to one or many textures. This is used to decouple resolving
* references to textures from rendering them in various ways.
*/
export declare class TextureSelection {
selection: TextureSelectionInput;
atlas: Atlas;
constructor(selection: TextureSelectionInput, atlas?: Atlas);
one(subquery?: string): Texture;
array(arr?: Texture[]): Texture[];
}
export declare function atlas(def: AtlasDefinition | Atlas): Promise<Atlas>;
/**
* When query argument is string, this function parses the query; looks up registered atlases; and returns a texture selection object.
*
* When query argument is an object, the object is used to create a new selection.
*/
export declare function texture(query: string | TextureSelectionInput): TextureSelection;
/**
* @hidden @deprecated
* - 'in-pad': same as 'contain'
* - 'in': similar to 'contain' without centering
* - 'out-crop': same as 'cover'
* - 'out': similar to 'cover' without centering
*/
export type LegacyFitMode = "in" | "out" | "out-crop" | "in-pad";
/**
* - 'contain': contain within the provided space, maintain aspect ratio
* - 'cover': cover the provided space, maintain aspect ratio
* - 'fill': fill provided space without maintaining aspect ratio
*/
export type FitMode = "contain" | "cover" | "fill" | LegacyFitMode;
/** @hidden */
export interface Pinned {
pin(pin: object): this;
pin(key: string, value: any): this;
pin(key: string): any;
size(w: number, h: number): this;
width(): number;
width(w: number): this;
height(): number;
height(h: number): this;
offset(a: Vec2Value): this;
offset(a: number, b: number): this;
rotate(a: number): this;
skew(a: Vec2Value): this;
skew(a: number, b: number): this;
scale(a: Vec2Value): this;
scale(a: number, b: number): this;
alpha(a: number, ta?: number): this;
}
export declare class Pin {
reset(): void;
toString(): string;
absoluteMatrix(): Matrix;
relativeMatrix(): Matrix;
}
/**
* Easing function formats are:
* - [name]
* - [name\]([params])
* - [name]-[mode]
* - [name]-[mode\]([params])
*
* Easing function names are 'linear', 'quad', 'cubic', 'quart', 'quint', 'sin' (or 'sine'), 'exp' (or 'expo'), 'circle' (or 'circ'), 'bounce', 'poly', 'elastic', 'back'.
*
* Easing modes are 'in', 'out', 'in-out', 'out-in'.
*
* For example, 'linear', 'cubic-in', and 'poly(2)'.
*/
export type EasingFunctionName = string;
export type EasingFunction = (p: number) => number;
export type TransitionOptions = {
duration?: number;
delay?: number;
append?: boolean;
};
export type TransitionEndListener = (this: Component) => void;
export declare class Transition implements Pinned {
constructor(owner: Component, options?: TransitionOptions);
tween(opts?: TransitionOptions): Transition;
tween(duration?: number, delay?: number): Transition;
duration(duration: number): this;
delay(delay: number): this;
ease(easing: EasingFunctionName | EasingFunction): this;
done(fn: TransitionEndListener): this;
hide(): this;
remove(): this;
pin(key: string, value: any): this;
pin(obj: object): this;
pin(key: string): any;
/**
* @hidden @deprecated Use .done(fn) instead.
*/
then(fn: TransitionEndListener): this;
/**
* @hidden @deprecated this doesn't do anything anymore, call transition on the component instead.
*/
clear(forward: boolean): this;
size(w: number, h: number): this;
width(w: number): this;
width(): number;
height(h: number): this;
height(): number;
offset(value: Vec2Value): this;
offset(x: number, y: number): this;
rotate(a: number): this;
skew(value: Vec2Value): this;
skew(x: number, y: number): this;
scale(value: Vec2Value): this;
scale(x: number, y: number): this;
scale(s: number): this;
alpha(a: number, ta?: number): this;
}
export interface ComponentVisitor<D> {
reverse?: boolean;
visible?: boolean;
start?: (component: Component, data?: D) => boolean | void;
end?: (component: Component, data?: D) => boolean | void;
}
export type ComponentTickListener<T> = (this: T, elapsed: number, now: number, last: number) => boolean | void;
export type ComponentEventListener<T> = (this: T, ...args: any[]) => void;
/** @hidden @deprecated Use component() */
export declare function create(): Component;
/** @hidden @deprecated Use maximize() */
export declare function layer(): Component;
/** @hidden @deprecated Use minimize() */
export declare function box(): Component;
/** @hidden @deprecated */
export declare function layout(): Component;
export declare function component(): Component;
export declare function row(align: number): Component;
export declare function column(align: number): Component;
export declare function minimize(): Component;
export declare function maximize(): Component;
export declare class Component implements Pinned {
MAX_ELAPSE: number;
constructor();
matrix(relative?: boolean): Matrix;
/** @hidden @deprecated */
getPixelRatio(): number;
/** @hidden This is not accurate before first tick */
getDevicePixelRatio(): number;
/** @hidden This is not accurate before first tick */
getLogicalPixelRatio(): number;
pin(key: string): any;
pin(key: string, value: any): this;
pin(obj: object): this;
pin(): Pin;
fit(width: number, height: number, mode?: FitMode): this;
fit(fit: object): this;
/** @hidden @deprecated Use fit */
scaleTo(a: any, b?: any, c?: any): this;
toString(): string;
/** @hidden @deprecated Use label() */
id(): string;
/** @hidden @deprecated Use label() */
id(label: string): this;
label(): string;
label(label: string): this;
attr(name: string, value: any): this;
attr(name: string): any;
visible(visible: boolean): this;
visible(): boolean;
hide(): this;
show(): this;
parent(): Component;
next(visible?: boolean): Component;
prev(visible?: boolean): Component;
first(visible?: boolean): Component;
last(visible?: boolean): Component;
visit<P>(visitor: ComponentVisitor<P>, payload?: P): boolean | void;
append(...child: Component[]): this;
append(child: Component[]): this;
prepend(...child: Component[]): this;
prepend(child: Component[]): this;
appendTo(parent: Component): this;
prependTo(parent: Component): this;
insertNext(sibling: Component, more?: Component): this;
insertPrev(sibling: Component, more?: Component): this;
insertAfter(prev: Component): this;
insertBefore(next: Component): this;
remove(child?: Component, more?: any): this;
empty(): this;
touch(): this;
/** @hidden */
prerender(): void;
/** @hidden */
prerenderTexture(): void;
/** @hidden */
private renderedBefore;
/** @hidden */
render(context: CanvasRenderingContext2D): void;
/** @hidden */
renderTexture(context: CanvasRenderingContext2D): void;
tick(callback: ComponentTickListener<this>, before?: boolean): void;
untick(callback: ComponentTickListener<this>): void;
timeout(callback: () => any, time: number): void;
setTimeout(callback: () => any, time: number): (t: number) => boolean;
clearTimeout(timer: ComponentTickListener<this>): void;
on(types: string, listener: ComponentEventListener<this>): this;
off(types: string, listener: ComponentEventListener<this>): this;
listeners(type: string): ComponentEventListener<Component>[];
publish(name: string, args?: any): number;
size(w: number, h: number): this;
width(w: number): this;
width(): number;
height(h: number): this;
height(): number;
offset(value: Vec2Value): this;
offset(x: number, y: number): this;
rotate(a: number): this;
skew(value: Vec2Value): this;
skew(x: number, y: number): this;
scale(value: Vec2Value): this;
scale(x: number, y: number): this;
scale(s: number): this;
alpha(a: number, ta?: number): this;
tween(opts?: TransitionOptions): Transition;
tween(duration?: number, delay?: number, append?: boolean): Transition;
row(align: number): this;
column(align: number): this;
align(type: "row" | "column", align: number): this;
/** @hidden @deprecated Use minimize() */
box(): this;
/** @hidden @deprecated Use minimize() */
layer(): this;
/**
* Set size to match largest child size.
*/
minimize(): this;
/**
* Set size to match parent size.
*/
maximize(): this;
/**
* Set cell spacing for layout.
*/
padding(pad: number): this;
/**
* Set cell spacing for row and column layout.
*/
spacing(space: number): this;
}
export declare function sprite(frame?: TextureSelectionInput): Sprite;
export declare class Sprite extends Component {
constructor();
texture(frame: TextureSelectionInput): this;
/** @deprecated */
image(frame: TextureSelectionInput): this;
tile(inner?: boolean): this;
stretch(inner?: boolean): this;
/** @hidden */
prerenderTexture(): void;
/** @hidden */
renderTexture(context: CanvasRenderingContext2D): void;
}
export type CanvasTextureDrawer = (this: CanvasTexture) => void;
export type CanvasTextureMemoizer = (this: CanvasTexture) => any;
/** @hidden @deprecated */
export type LegacyCanvasTextureDrawer = (this: CanvasTexture, context: CanvasRenderingContext2D) => void;
/** @hidden @deprecated */
export type LegacyCanvasSpriteMemoizer = () => any;
/** @hidden @deprecated */
export type LegacyCanvasSpriteDrawer = (ratio: number, texture: CanvasTexture, sprite: Sprite) => void;
/**
* A texture with off-screen canvas.
*/
export declare class CanvasTexture extends ImageTexture {
constructor();
/**
* Set texture size to given width and height, and set canvas size to texture size multiply by pixelRatio.
*/
setSize(destWidth: number, destHeight: number, pixelRatio?: number): void;
getContext(type?: string, attributes?: any): CanvasRenderingContext2D;
/**
* @hidden @experimental
*
* This is the ratio of screen pixel to this canvas pixel.
*/
getDevicePixelRatio(): number;
/** @hidden @deprecated */
getOptimalPixelRatio(): number;
setMemoizer(memoizer: CanvasTextureMemoizer): void;
setDrawer(drawer: CanvasTextureDrawer): void;
/** @hidden @deprecated */
size(width: number, height: number, pixelRatio: number): this;
/** @hidden @deprecated */
context(type?: string, attributes?: any): CanvasRenderingContext2D;
/** @hidden @deprecated */
canvas(legacyTextureDrawer: LegacyCanvasTextureDrawer): this;
}
/**
* Create CanvasTexture (a texture with off-screen canvas).
*/
export declare function canvas(): CanvasTexture;
/** @hidden @deprecated */
export declare function memoizeDraw(legacySpriteDrawer: LegacyCanvasSpriteDrawer, legacySpriteMemoizer?: LegacyCanvasSpriteMemoizer): Sprite;
export declare class PipeTexture extends Texture {
constructor(source: Texture);
setSourceTexture(texture: Texture): void;
getWidth(): number;
getHeight(): number;
}
export type ResizableTextureMode = "stretch" | "tile";
export declare class ResizableTexture extends Texture {
constructor(source: Texture, mode: ResizableTextureMode);
getWidth(): number;
getHeight(): number;
drawWithNormalizedArgs(context: CanvasRenderingContext2D, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;
}
export declare const POINTER_CLICK = "click";
export declare const POINTER_DOWN = "touchstart mousedown";
export declare const POINTER_MOVE = "touchmove mousemove";
export declare const POINTER_UP = "touchend mouseup";
export declare const POINTER_CANCEL = "touchcancel mousecancel";
/** @hidden @deprecated */
export declare const POINTER_START = "touchstart mousedown";
/** @hidden @deprecated */
export declare const POINTER_END = "touchend mouseup";
export declare function pause(): void;
export declare function resume(): void;
export declare function mount(configs?: RootConfig): Root;
export type RootConfig = {
canvas?: string | HTMLCanvasElement;
};
/**
* Geometry of the rectangular that the application takes on the screen.
*/
export type Viewport = {
width: number;
height: number;
ratio: number;
};
/**
* Geometry of a rectangular portion of the game that is projected on the screen.
*/
export type Viewbox = {
x?: number;
y?: number;
width: number;
height: number;
mode?: FitMode;
};
export declare class Root extends Component {
canvas: HTMLCanvasElement | null;
dom: HTMLCanvasElement | null;
context: CanvasRenderingContext2D | null;
mounted: boolean;
paused: boolean;
sleep: boolean;
constructor();
mount: (configs?: RootConfig) => void;
/** @hidden */
debugDrawAxis: number;
private renderDebug;
resume(): this;
pause(): this;
unmount(): this;
background(color: string): this;
/**
* Set/Get viewport.
* This is used along with viewbox to determine the scale and position of the viewbox within the viewport.
* Viewport is the size of the container, for example size of the canvas element.
* Viewbox is provided by the user, and is the ideal size of the content.
*/
viewport(): Viewport;
viewport(width: number, height: number, ratio?: number): this;
viewport(viewbox: Viewport): this;
/**
* Set viewbox.
*/
viewbox(viewbox: Viewbox): this;
viewbox(width?: number, height?: number, mode?: FitMode): this;
camera(matrix: Matrix): this;
/** @hidden */
flipX(x: boolean): this;
/** @hidden */
flipY(y: boolean): this;
}
export declare function anim(frames: string | TextureSelectionInputArray, fps?: number): Anim;
export declare class Anim extends Component {
constructor();
/** @hidden */
renderTexture(context: CanvasRenderingContext2D): void;
fps(fps?: number): number | this;
/** @deprecated Use frames */
setFrames(frames: string | TextureSelectionInputArray): this;
frames(frames: string | TextureSelectionInputArray): this;
length(): number;
gotoFrame(frame: number, resize?: boolean): this;
moveFrame(move: number): this;
repeat(repeat: number, callback?: () => void): this;
play(frame?: number): this;
stop(frame?: number): this;
}
export declare function monotype(chars: string | Record<string, Texture> | ((char: string) => Texture)): Monotype;
export declare class Monotype extends Component {
constructor();
/** @hidden */
renderTexture(context: CanvasRenderingContext2D): void;
/** @deprecated Use frames */
setFont(frames: string | Record<string, Texture> | ((char: string) => Texture)): this;
frames(frames: string | Record<string, Texture> | ((char: string) => Texture)): this;
/** @deprecated Use value */
setValue(value: string | number | string[] | number[]): this;
value(value: string | number | string[] | number[]): this;
}
export {
Component as Node,
Monotype as Str,
Sprite as Image,
monotype as string,
sprite as image,
};
export {};