UNPKG

rul2d

Version:

Rul2d is a powerful and flexible TypeScript library for creating games using HTML5 Canvas.

1,510 lines (1,414 loc) 51.2 kB
interface IAngle { radians: number; } interface IAngleable { setAngle(angle: Angle): void; addAngle(angle: Angle): void; } declare abstract class CustomObject { private static createdObjectsCount; private _id; constructor(); loadJSONFromFile(src: string): Promise<void>; protected _loadJSONFromFile(result: Record<string, any>): Promise<void>; get id(): number; log(): void; simplify(): {}; toString(): string; toJSONString(): string; valueOf(): number; } declare class Angle extends CustomObject implements IAngleable { static Pi: number; static Pi2: number; static Rad_1: number; private _radians; static degToRad(deg: number): number; static radToDeg(rad: number): number; static from(rad: number): Angle; static fromRadians(rad: number): Angle; static fromDegrees(deg: number): Angle; constructor(); set radians(rad: number); get radians(): number; set degrees(deg: number); get degrees(): number; simplify(): IAngle; setAngle(angle: Angle): void; addAngle(angle: Angle): void; valueOf(): number; toString(): string; } interface ISimplePoint { x: number; y: number; } interface IPointable { set point(value: ISimplePoint); get point(): PointType; set x(value: number); get x(): number; set y(value: number); get y(): number; setPosition(x?: number, y?: number): void; addPosition(x: number, y: number): void; move(point: ISimplePoint, delta: number): void; } interface IRoot { get inheritOpacity(): number; get zIndex(): number; } interface ISimpleSize { width: number; height: number; } interface ISizeable { set center(value: ISimplePoint); get center(): PointType; set size(value: ISimpleSize); get size(): ISizeable; setSize(width?: number, height?: number): void; } interface IRectangle extends ISizeable, IPointable { get bottom(): number; get right(): number; } interface ISimpleRect extends ISimplePoint, ISimpleSize { } interface IMinMax { min: number; max: number; } interface ISimpleCamera extends ISimplePoint { zoom: number; zoomLimit: IMinMax; } declare class Bounds extends CustomObject implements IMinMax { min: number; max: number; constructor(min: number, max: number); set(min: number, max: number): void; get(value: number): number; simplify(): IMinMax; } interface ISimpleDrawableObject { color: { r: number; g: number; b: number; a: number; }; lineWidth: number; opacity: number; zIndex: number; } interface ISimpleShape extends ISimplePoint { size: ISimpleSize; angle: IAngle; } declare class CachedValue<T, V = undefined> extends CustomObject { private _cachedValue; private _isNeedUpdate; private _updateCallback; constructor(defaultValue: T); needUpdate(value?: boolean | null): void; setUpdateCallback(callback?: (value?: V) => T): void; get(value?: V): T; update(value?: V): T; simplify(): { value: T; isNeedUpdate: boolean; }; } declare class Size extends CustomObject implements ISizeable { width: number; height: number; constructor(width?: number, height?: number); setSize(width?: number, height?: number): void; set center({ x, y }: ISimplePoint); get center(): PointType; set size({ width, height }: ISimpleSize); get size(): ISizeable; simplify(): ISimpleSize; } declare class Shape extends Point implements IRectangle, IAngleable { static rotatePoints(corners: Point[], angle: Angle, center: Point): Point[]; static cosBounds: Bounds; protected _isCachedValueExist: boolean; protected _size: Size; protected _cachedPath: CachedValue<Path2D>; protected _cachedBoundingBox: CachedValue<ISimpleRect>; protected _cachedCorners: CachedValue<Point[]>; protected _angle: Angle; protected _flipDirection: Point; constructor(x?: number, y?: number, width?: number, height?: number); get bottom(): number; get right(): number; flip(x: boolean, y: boolean): void; flipHorisontally(value: boolean): void; flipVertically(value: boolean): void; protected _updateCorners(): Point[]; getCorners(): Point[]; protected _updateBox(): ISimpleRect; getBox(): ISimpleRect; protected _updatePath(): Path2D; getPath(): Path2D; set size(value: ISimpleSize); get size(): Size; set center({ x, y }: ISimplePoint); get center(): Point; needUpdate(value?: boolean | null): void; isObjectInViewport(camera: Camera): boolean; setPosition(x?: number, y?: number): void; setSize(width?: number, height?: number): void; setAngle(angle: Angle): void; addAngle(angle: Angle): void; set angle(value: Angle); get angle(): Angle; get factRect(): ISimpleRect; simplify(): ISimpleDrawableObject & ISimpleShape; protected _stroke(ctx: Context): void; protected _fill(ctx: Context): void; clip(ctx: Context, callback: (path: Path2D) => void): void; isShapesIntersects(shape: Shape): boolean; isPointInBoundingBox(point: Point): boolean; isBoxesIntersects(other: ISimpleRect): boolean; isPointInShape(point: Point): boolean; drawTransformed(ctx: Context, cb: (x: number, y: number, width: number, height: number) => void): void; } declare class Rectangle extends Shape implements IRectangle { constructor(x?: number, y?: number, width?: number, height?: number); get bottom(): number; get right(): number; set rect({ x, y, width, height }: ISimpleRect); get rect(): Rectangle; set rotatedRectangle(rect: ISimpleRect & IAngle); get rotatedRectangle(): Rectangle; protected _updateCorners(): Point[]; static from(position: ISimplePoint, size: ISimpleSize): Rectangle; static fromSimpleRectangle(rect: ISimpleRect): Rectangle; static fromPoints(first: Point, second: Point): Rectangle; } declare class StorageEvent<T> extends Event { key?: keyof T; value?: T[keyof T]; } interface IEventOptions { isOnce?: boolean; } declare class EventEmitter<Type = any, Key extends string = string> extends CustomObject { protected _events: Dict<Set<EventCallback<Type>>>; constructor(); on(key: Key, callback: EventCallback<Type>, { isOnce }?: IEventOptions): void; once(key: Key, callback: EventCallback<Type>): void; off(key: Key, callback: EventCallback<Type>): boolean; emit(key: Key, value?: Type): void; } declare class LocalStorageManager<T extends Record<string, any>> extends EventEmitter<StorageEvent<T>, LocalStorageEmitKeys> { private _name; private _value; private _isLoaded; constructor(name: string); private _load; set<K extends keyof T>(key: K, value: T[K]): void; setAll<K extends keyof T>(obj: Partial<T>): void; get<K extends keyof T>(key: K, defaultValue?: T[K]): T[K] | undefined; getAll(): Partial<T>; } declare class Camera extends CustomObject implements IPointable, IAngleable { static addStandardWheelListener(camera: Camera): boolean; static loadCameraFromStorage(storage: LocalStorageManager<ISimpleCamera>, camera: Camera): void; static addStandardCameraSaver(storageName: string, camera: Camera): void; protected _ctx: Context | null; protected _zoom: number; protected _zoomLimit: Bounds; protected _position: Point; protected _targetPosition: Point; protected _angle: Angle; protected _smoothingEnabled: boolean; protected _smoothingQuality: SmoothingQuality; protected _lerpFactor: number; protected _cachedViewport: CachedValue<Rectangle>; constructor(ctx?: Context); setSmoothFactor(factor: number): void; setSmoothing(enabled: boolean, quality: SmoothingQuality): void; updateSmoothing(): void; setAngle(angle: Angle): void; addAngle(angle: Angle): void; get canvas(): Canvas | null; setZoomLimit(min: number, max: number): void; protected _updateViewport(): Rectangle; get viewport(): Rectangle; set x(value: number); get x(): number; set y(value: number); get y(): number; set zoom(value: number); get zoom(): number; set point(value: PointType); get point(): PointType; updatePosition(): boolean; get position(): Point; get target(): Point; setPositionInstant(x?: number, y?: number): void; setPosition(x?: number, y?: number): void; addPosition(x: number, y: number): void; move(point: ISimplePoint, delta: number): void; doIfContextExist(cb: (ctx: Context) => void): void; setContext(ctx: Context): void; begin(): void; translate(): void; scale(): void; rotate(): void; end(): void; update(callback: (ctx: Context) => void): void; simplify(): ISimpleCamera; } /** * Enum that defines the way an object will be rendered */ declare enum DrawMode { /** * Only the filled part is rendered */ Fill = 0, /** Only the outline is rendered. */ Stroke = 1, /** * The outline and the filled part are rendered */ All = 2 } interface IManager { updateZIndex(): void; } declare class Color extends CustomObject { static componentBounds: Bounds; private _r; private _g; private _b; private _a; constructor(); setRGBA(r: number, g: number, b: number, a?: number): this; toString(): string; simplify(): { r: number; g: number; b: number; a: number; }; static interpolate(first: Color, second: Color, factor: number): Color; static from(r: number, g: number, b: number, a?: number): Color; static fromSimple({ r, g, b, a }: { r: number; g: number; b: number; a: number; }): Color; static random(a?: number): Color; static get Transparent(): Color; static get Black(): Color; static get White(): Color; static get Red(): Color; static get Blue(): Color; static get Green(): Color; } interface INetClient<T = any> { open(ip: string): void; on(key: string, callback: EventCallback<T>, options?: IEventOptions): void; once(key: string, callback: EventCallback<T>, options?: IEventOptions): void; off(key: string, callback: EventCallback<T>, options?: IEventOptions): boolean; send(type: string, value: CustomObject): void; close(code?: number, reason?: string): void; } interface IGameWorldOptions { root?: HTMLElement; camera?: Camera; size?: ISimpleSize | null; useCulling?: boolean; netClient?: INetClient; } interface ITempCanvasOptions { size: ISimpleSize; callback: (ctx: Context) => void; quality?: number; mimeImageType?: string; } declare class CanvasManager extends CustomObject { static tempCanvasManager: CanvasManager | null; static createImageURLFromTempCanvas({ size, quality, mimeImageType: imageType, callback }: ITempCanvasOptions): string; static createTempCanvasManager(root: HTMLElement, size: ISimpleSize): CanvasManager; private _canvas; private _ctx; private _isContextNeedUpdate; constructor(); get canvas(): Canvas | null; get ctx(): Context | null; get isCanvasExist(): boolean; setCanvas(canvas: Canvas): void; getContext(): Context | null; resize({ width, height }: ISimpleSize): void; resizeToClientRect(): void; create({ root, size }?: { root?: HTMLElement; size?: ISimpleSize | null; }): Canvas; clear({ x, y }?: ISimplePoint): void; addStandardResizeHandler(): void; simplify(): { isContextNeedUpdate: boolean; }; } declare abstract class UIObject extends GameEntity { abstract setSize(width?: number, height?: number): void; } interface IShapeConfig { setShape(shape: Shape): void; set shape(shape: Shape); get shape(): Shape; } declare class ShapeableObject extends DrawableObject implements IShapeConfig, IRectangle, IAngleable { protected _shape: Shape; constructor(x?: number, y?: number, width?: number, height?: number); get bottom(): number; get right(): number; set point(value: ISimplePoint); get point(): PointType; set x(value: number); get x(): number; set y(value: number); get y(): number; updatePositionByOffset(point: ISimplePoint): void; addPosition(x: number, y: number): void; move(point: ISimplePoint, delta: number): void; setPosition(x?: number, y?: number): void; set center(value: PointType); get center(): PointType; set size(value: ISimpleSize); get size(): Size; setSize(width?: number, height?: number): void; isPointInShape(point: Point): boolean; setShape(shape: Shape): void; setAngle(angle: Angle): void; addAngle(angle: Angle): void; set shape(shape: Shape); get shape(): Shape; get factRect(): ISimpleRect; setOffset(x: number, y: number): void; set offset({ x, y }: ISimplePoint); get offset(): ISimplePoint; protected _fill(ctx: Context): void; protected _stroke(ctx: Context): void; protected _draw(ctx: Context): void; update(delta: number): void; isObjectInViewport(camera: Camera): boolean; } declare class PointerableObject extends ShapeableObject implements IShapeConfig, IRectangle { protected _nonDownCallbackFactory(cb: PointCallback): PointCallback; protected _hoverCallback: PointCallback; protected _pressedCallback: PointCallback; protected _downCallback: PointCallback; protected _upCallback: PointCallback; protected _nonInteractiveCallback: PointCallback; protected _isPressed: boolean; isPressedInFrame: boolean; constructor(x?: number, y?: number, width?: number, height?: number); get isPressed(): boolean; get hoverCallback(): PointCallback; get pressedCallback(): PointCallback; get nonInteractiveCallback(): PointCallback; doWhenDown(cb: PointCallback): void; doWhenUp(cb: PointCallback): void; doWhenPressed(cb: PointCallback): void; doWhenHover(cb: PointCallback): void; doWhenNotInteracted(cb: PointCallback): void; } declare class PointerInputManager extends CustomObject implements IManager { private static _pointerableSortCallback; private _pointersLocation; private _cursorPosition; private _pointerables; private _camera; private _isPressed; constructor(); private _setCursorPoint; private _getPointerIndex; private _createPoint; private _editPoint; private _downEventCallback; private _moveEventCallback; private _upEventCallback; private _allControlsEventCallback; setCamera(camera: Camera): void; getCursorPosition(): Point; private _updatePointWithCamera; addPointerable(obj: PointerableObject): void; removePointerable(obj: PointerableObject): void; addControls(canvas: Canvas): void; updateZIndex(): void; get isPressed(): boolean; update(): void; } declare abstract class GameObject extends DrawableObject implements IManager { protected _objects: DrawableObject[]; constructor(); protected _addObjectToArray<T extends DrawableObject>(object: T, arr: T[]): boolean; protected _removeObjectFromArray<T extends DrawableObject>(object: T, arr: T[]): boolean; setPointerManager(manager: PointerInputManager): void; forUI(callback: (obj: UIObject, index: number) => void): void; forAll(callback: (obj: DrawableObject, index: number) => void): void; addObjects(...objects: DrawableObject[]): void; addObject(object: DrawableObject): boolean; removeObject(object: DrawableObject): boolean; forEach(callback?: (obj: DrawableObject, index: number) => void): void; protected _preload(world: GameWorld): Promise<void>; preload(world: GameWorld): Promise<void>; protected _create(world: GameWorld): DrawableObject[]; init(world: GameWorld): void; protected _draw(ctx: Context): void; updateObjects(delta: number): void; updatePositionByOffset(point: ISimplePoint): void; protected _update(delta: number): void; update(delta: number): void; updateZIndex(): void; isObjectInViewport(camera: Camera): boolean; get factRect(): ISimpleRect; } declare abstract class GameEntity extends GameObject implements IPointable { protected _position: Point; protected _factRect: CachedValue<ISimpleRect>; constructor(x?: number, y?: number); addObject(object: DrawablePointerable): boolean; removeObject(object: DrawablePointerable): boolean; get factRect(): ISimpleRect; set x(value: number); get x(): number; set y(value: number); get y(): number; set point(point: ISimplePoint); get point(): PointType; setPosition(x?: number, y?: number): void; addPosition(x: number, y: number): void; move(point: ISimplePoint, delta: number): void; updateObjectsPosition(): void; protected _updateFactRect(): ISimpleRect; isObjectInViewport(camera: Camera): boolean; updatePositionByOffset(point: ISimplePoint): void; update(delta: number): void; } declare abstract class GameScene extends GameObject { protected _uiObjects: UIObject[]; constructor(); protected get _allObjects(): GameEntity[]; get canBeSubObject(): boolean; private _addUI; addObject(object: GameEntity): boolean; private _removeUI; removeObject(object: DrawableObject): boolean; forUI(callback: (obj: UIObject, index: number) => void): void; protected _init(world: GameWorld): void; init(world: GameWorld): void; protected _preload(world: GameWorld): Promise<void>; updateObjects(delta: number): void; updateZIndex(): void; drawUI(ctx: Context): void; } declare enum KeyCodes { Any = "Any", All = "All", A = "KeyA", B = "KeyB", C = "KeyC", D = "KeyD", E = "KeyE", F = "KeyF", G = "KeyG", H = "KeyH", I = "KeyI", J = "KeyJ", K = "KeyK", L = "KeyL", M = "KeyM", N = "KeyN", O = "KeyO", P = "KeyP", Q = "KeyQ", R = "KeyR", S = "KeyS", T = "KeyT", U = "KeyU", V = "KeyV", W = "KeyW", X = "KeyX", Y = "KeyY", Z = "KeyZ", D0 = "Digit0", D1 = "Digit1", D2 = "Digit2", D3 = "Digit3", D4 = "Digit4", D5 = "Digit5", D6 = "Digit6", D7 = "Digit7", D8 = "Digit8", D9 = "Digit9", Num0 = "Numpad0", Num1 = "Numpad1", Num2 = "Numpad2", Num3 = "Numpad3", Num4 = "Numpad4", Num5 = "Numpad5", Num6 = "Numpad6", Num7 = "Numpad7", Num8 = "Numpad8", Num9 = "Numpad9", F1 = "F1", F2 = "F2", F3 = "F3", F4 = "F4", F5 = "F5", F6 = "F6", F7 = "F7", F8 = "F8", F9 = "F9", F10 = "F10", F11 = "F11", F12 = "F12", ArrowUp = "ArrowUp", ArrowDown = "ArrowDown", ArrowLeft = "ArrowLeft", ArrowRight = "ArrowRight", Enter = "Enter", Space = "Space", Esc = "Escape", Tab = "Tab", BackSpace = "Backspace", Delete = "Delete", ShiftLeft = "ShiftLeft", ShiftRight = "ShiftRight", CtrlLeft = "ControlLeft", CtrlRight = "ControlRight", AltLeft = "AltLeft", AltRight = "AltRight", MetaLeft = "MetaLeft", MetaRight = "MetaRight", CapsLock = "CapsLock", NumLock = "NumLock", Comma = "Comma", Period = "Period", Slash = "Slash", BackSlash = "Backslash", Semicolon = "Semicolon", Quote = "Quote", BracketLeft = "BracketLeft", BracketRight = "BracketRight", Minus = "Minus", Equal = "Equal" } interface IKeyOptions { altKey?: boolean; shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean; ignoreModifiers?: boolean; } declare class HotKey extends CustomObject { key: KeyCodes; options: IKeyOptions; constructor(key: KeyCodes, options?: IKeyOptions); simplify(): { key: KeyCodes; options: IKeyOptions; }; } declare class KeyboardManager extends EventEmitter<KeyboardEvent> { static stringify(key: string, options?: IKeyOptions): string; static from(event: KeyboardEvent): string; constructor(); hasStringifiedKey(key: string, options: IKeyOptions): [string, boolean]; addKey({ key, options }: HotKey, callback: KeyboardEventCallback): void; addKeys(keys: KeyCodes[], callback: KeyboardEventCallback, options?: IKeyOptions): void; removeKey({ key, options }: HotKey, callback: KeyboardEventCallback): boolean; onceKey(key: HotKey, callback: EventCallback<KeyboardEvent>): void; protected _handleIgnoreModifiersKey(e: KeyboardEvent): void; protected _handleAnyKey(e: KeyboardEvent): void; protected _handleAllKey(e: KeyboardEvent): void; anyKey(callback: KeyboardEventCallback, options?: IKeyOptions): void; allKey(callback: KeyboardEventCallback): void; addControls(key: 'keydown' | 'keyup'): void; } interface IKeyAxisOptions { negative: HotKey; positive: HotKey; callback: (value: number) => void; } interface IKeyVectorOptions { negativeX: HotKey; positiveX: HotKey; negativeY: HotKey; positiveY: HotKey; callback: PointCallback; } declare class KeyStateManager extends CustomObject { downKeyboardManager: KeyboardManager | null; upKeyboardManager: KeyboardManager | null; private _hotKey; private _upCallback; private _downCallback; constructor(); trackKeyState({ options, key }: HotKey, callback: (isPressed: boolean) => void): void; trackAxis({ negative, positive, callback }: IKeyAxisOptions): void; trackVector({ negativeX, negativeY, positiveX, positiveY, callback }: IKeyVectorOptions): void; setKey(key: KeyCodes, options?: IKeyOptions): void; setKeyboardManagers(down: KeyboardManager, up: KeyboardManager): void; bindKeyHandlers(downCallback: KeyboardEventCallback, upCallback: KeyboardEventCallback): void; unbindKeyHandlers(downCallback?: KeyboardEventCallback, upCallback?: KeyboardEventCallback): void; private _registerCallbacks; } interface ICustomWorldFunctionality { doWhenAddNewScene(obj: GameScene): void; doWhenDeleteScene(obj: GameScene): void; doWhenAddInWorld(world: GameWorld): void; doWhenRemoveFromWorld(world: GameWorld): void; doWhenChangeScene(oldScene: GameScene | null, newScene: GameScene | null): void; update(delta: number, world: GameWorld): void; } declare class GameWorld extends CustomObject implements IManager, IRoot { static createGameLoop(callback: (delta: number, lastDelta: number, prevTime: number) => void): number; private _canvasManager; private _canvas; private _ctx; private _camera; private _gameScenes; private _currentScene; private _customFunctionality; eventEmitter: EventEmitter<Event>; downKeyboardManager: KeyboardManager; upKeyboardManager: KeyboardManager; keyStateManager: KeyStateManager; pointerManager: PointerInputManager; uiPointerManager: PointerInputManager; netClient?: INetClient; isUseCulling: boolean; constructor({ netClient, root, camera, size, useCulling }?: IGameWorldOptions); get zIndex(): number; get inheritOpacity(): number; get canvasManager(): CanvasManager; get camera(): Camera; set camera(camera: Camera); updateZIndex(): void; addCustomFunctionality(func: ICustomWorldFunctionality): void; removeCustomFunctionality(func: ICustomWorldFunctionality): boolean; forFunctionalities(callback: (func: ICustomWorldFunctionality) => void): void; addScene(key: string, scene: GameScene): void; removeScene(key: string): void; forEach(callback: (scene: GameScene) => void): void; setScene(key: string): void; getScene(): GameScene | null; protected _addControls(): void; private _updateCurrentScene; private _culling; private _update; private _preload; start(ip?: string): Promise<void>; simplify(): { isUseCulling: boolean; camera: ISimpleCamera; }; } declare abstract class DrawableObject extends CustomObject implements IRoot { static positiveNumberBounds: Bounds; static normalizedBounds: Bounds; protected _lineWidth: number; protected _opacity: number; protected _zIndex: number; protected _currentRootId: number; protected _offset: ISimplePoint; protected _color: Color; protected _isInitialized: boolean; protected _drawMode: DrawMode; outlineColor: Color; isVisible: boolean; isInViewport: boolean; managers: Set<IManager>; root: CurrentRoot; eventEmitter: EventEmitter; constructor(); setDrawMode(mode: DrawMode): void; abstract get factRect(): ISimpleRect; get canBeSubObject(): boolean; get zIndex(): number; set zIndex(z: number); get inheritOpacity(): number; setVisibility(value: boolean): void; toggleVisibility(): boolean; setColor(color: Color): void; setOffset(x: number, y: number): void; abstract updatePositionByOffset(point: ISimplePoint): void; set offset({ x, y }: ISimplePoint); get offset(): ISimplePoint; set color(color: Color); get color(): Color; set opacity(value: number); get opacity(): number; set lineWidth(value: number); get lineWidth(): number; simplify(): ISimpleDrawableObject; updateColor(ctx: Context): void; updateContextParameters(ctx: Context): void; protected _init(world: GameWorld): void; init(world: GameWorld): void; isNeedDraw(): boolean; update(delta: number): void; protected _fill(ctx: Context): void; protected _stroke(ctx: Context): void; protected _drawDefault(ctx: Context): void; protected _draw(ctx: Context): void; abstract isObjectInViewport(camera: Camera): boolean; executeCallbackByDrawMode(fillCallback: Callback, strokeCallback: Callback): void; draw(ctx: Context): void; } declare class Point extends DrawableObject implements IPointable { static get NaN(): Point; static fromSimplePoint({ x, y }: ISimplePoint): Point; static drawRadius: number; protected _x: number; protected _y: number; constructor(x?: number, y?: number); get factRect(): ISimpleRect; set x(value: number); get x(): number; set y(value: number); get y(): number; set point({ x, y }: ISimplePoint); get point(): PointType; updatePositionByOffset({ x, y }: ISimplePoint): void; setPosition(x?: number, y?: number): void; addPosition(x: number, y: number): void; move({ x, y }: ISimplePoint, delta: number): void; simplify(): { x: number; y: number; color: { r: number; g: number; b: number; a: number; }; lineWidth: number; opacity: number; zIndex: number; }; drawPoint(ctx: Context): void; drawOutline(ctx: Context): void; private _drawArc; protected _fill(ctx: Context): void; protected _stroke(ctx: Context): void; isObjectInViewport(camera: Camera): boolean; } declare class SimpleRect extends CustomObject implements ISimpleRect { x: number; y: number; width: number; height: number; constructor(x?: number, y?: number, width?: number, height?: number); simplify(): { x: number; y: number; width: number; height: number; }; } type Callback = () => void; type SearchCallback<T> = (obj: T) => number | string; type EventCallback<T = any> = (value?: T) => void; type PointCallback = (point: Point) => void; type Constructor<T = {}> = new (...args: any[]) => T; type KeyboardEventCallback = EventCallback<KeyboardEvent>; type FormattedTextCallback = (ctx: Context, text: string, rect: SimpleRect, renderType: RenderType) => void; type CurrentRoot = null | IRoot; type FollowedCameraObject = DrawablePointerable | Shape | ShapeableObject | null; type SmoothingQuality = 'low' | 'medium' | 'high'; type LocalStorageEmitKeys = 'init' | 'load' | 'set'; type CacheDictTypes = 'image' | 'text' | 'json'; type TextHorisontalAlign = 'left' | 'center' | 'right'; type TextVerticalAlign = 'top' | 'middle' | 'bottom'; type RenderType = 'stroke' | 'fill'; type Context = CanvasRenderingContext2D; type Canvas = HTMLCanvasElement; type Dict<T> = Map<string, T>; type ColorStop = [number, Color]; type PointType = IPointable & ISimplePoint; type RectType = IRectangle & ISimpleRect; type DrawablePointerable = DrawableObject & PointType; type PositionableObject = ISimplePoint & { doWhenUpdatePosition: Function; }; type TypeAndValue<T, V> = { type: T; value: V; }; declare class AssetsManager { static instance: AssetsManager; private _cachedImages; private _cachedTexts; private _cachedJSON; private _cachedAudios; private _cachedBinaries; constructor(); clear(type: CacheDictTypes, src: string): boolean; clearDict(type: CacheDictTypes): void; clearAll(): void; private _loadFile; loadTextFile(src: string): Promise<string>; loadBinarytFile(src: string): Promise<ArrayBuffer>; loadJSONFile(src: string): Promise<Record<string, any>>; loadImageFile(src: string): Promise<HTMLImageElement>; loadAudioFile(src: string, audioContext: AudioContext): Promise<AudioBuffer>; } declare class PointerPoint extends Point { pointerId: number; constructor(x?: number, y?: number, id?: number); } declare abstract class Timer extends CustomObject { paused: boolean; constructor(); abstract reset(): void; abstract start(): void; abstract stop(): void; simplify(): { paused: boolean; }; } declare class ElapsedClock extends Timer { protected _startTime: number; protected _accumulated_time: number; constructor(); reset(): void; start(): void; stop(): void; getElapsedTime(): number; simplify(): { start: number; accumulated: number; elapsed: number; paused: boolean; }; } declare class PeriodicTimer extends Timer { protected _currentTime: number; protected _callback: Callback; targetTime: number; constructor(time?: number, callback?: Callback); start(): void; reset(): void; stop(): void; setCallback(cb: Callback): void; get currentTime(): number; update(delta: number): void; simplify(): { targetTime: number; currentTime: number; paused: boolean; }; } /** * Enum that defines which messages will be displayed in the console * * Each level includes messages from the previous levels * * Пример: * ```js * Logging.debugLevel = LoggingLevel.None * Logging.info("Info") // doesn't displayed * Logging.error("Error") // doesn't displayed * Logging.Warn("Warning") // doesn't displayed * * Logging.debugLevel = LoggingLevel.Info * Logging.info("Info") // displayed * Logging.error("Error") // doesn't displayed * Logging.Warn("Warning") // doesn't displayed * * Logging.debugLevel = LoggingLevel.Error * Logging.info("Info") // displayed * Logging.error("Error") // displayed * Logging.Warn("Warning") // doesn't displayed * * Logging.debugLevel = LoggingLevel.Warn * Logging.info("Info") // displayed * Logging.error("Error") // displayed * Logging.Warn("Warning") // displayed * ``` */ declare enum LoggingLevel { /** * No messages from Logging will be displayed in the console */ None = 0, /** * Only informational messages will be displayed */ Info = 1, /** * Errors will also be displayed */ Error = 2, /** * Warnings will also be displayed */ Warn = 3, /** * Debug messages will also be displayed */ Debug = 4, /** * Engine errors will also be displayed */ EngineError = 5, /** * Engine warnings will also be displayed */ EngineWarn = 6, /** * Engine messages will also be displayed */ EngineLog = 7, /** * Very frequent engine messages will also be displayed */ EngineSpam = 8, /** * All types of messages are displayed in the console */ Full = 9 } declare class Logging { static debugLevel: LoggingLevel; static isShowTrace: boolean; static message(cb: (...values: any[]) => void, needLevel: LoggingLevel, ...values: any[]): void; static error(...values: any[]): void; static warn(...values: any[]): void; static debug(...values: any[]): void; static info(...values: any[]): void; static engineError(...values: any[]): void; static engineWarn(...values: any[]): void; static engineLog(...values: any[]): void; static engineSpam(...values: any[]): void; } declare class MathUtils { static lerp(value: number, target: number, factor: number): number; static floor(x: number, afterDot?: number): number; static ceil(x: number, afterDot?: number): number; static round(x: number, afterDot?: number): number; static updateWithAfterDotNumber(x: number, afterDot: number, callback: (power: number) => number): number; static percents(value: number, { min, max }?: IMinMax): number; static getArrayValueByCondition<T>(array: T[], conditionCallback: (value: number, last: number) => boolean, valueCallback?: (value: T) => number): T | null; static min<T>(values: T[], valueCallback?: (value: T) => number): T | null; static max<T>(values: T[], valueCallback?: (value: T) => number): T | null; } declare class Random { static number(max: number, afterDot?: number): number; static range(min: number, max: number, afterDot?: number): number; static chance(value: number, max: number): boolean; static array(count: number, { min, max }?: IMinMax, afterDot?: number): number[]; } declare class SAT { static projectPolygon(axis: ISimplePoint, polygon: Shape): IMinMax; static projectionsOverlap(first: IMinMax, second: IMinMax): boolean; static checkIntersections(first: Shape, second: Shape): boolean; } declare class Search { static binary<T>(arr: T[], target: T, callback?: SearchCallback<T>): number; static findInsertPosition<T>(arr: T[], value: T, callback?: SearchCallback<T>): number; static linear<T>(arr: T[], target: number, callback?: SearchCallback<T>): number; } declare class Sorting { static addToArray<T>(arr: T[], value: T, callback?: SearchCallback<T>): number; static merge<T>(arr: T[], callback?: SearchCallback<T>): T[]; static quick<T>(arr: T[], callback?: (value: T) => number): T[]; } declare class VectorUtils { static getAngle({ x, y }: ISimplePoint, { x: x1, y: y1 }: ISimplePoint): Angle; static getPerpendicular({ x, y }: ISimplePoint): ISimplePoint; static getDoubleDistance({ x, y }: ISimplePoint, { x: x1, y: y1 }: ISimplePoint): number; static getDistance(first: ISimplePoint, second: ISimplePoint): number; static isInDistance(first: ISimplePoint, second: ISimplePoint, maxDistance: number): boolean; static magnitude(vector: ISimplePoint): number; static cross(first: ISimplePoint, second: ISimplePoint): number; static dot(first: ISimplePoint, second: ISimplePoint): number; static normalize(point: ISimplePoint): ISimplePoint; static createPointByCallback(first: ISimplePoint, second: ISimplePoint, callback: (first: number, second: number) => number): ISimplePoint; static plus(first: ISimplePoint, second: ISimplePoint): ISimplePoint; static minus(first: ISimplePoint, second: ISimplePoint): ISimplePoint; static multiply(first: ISimplePoint, second: ISimplePoint): ISimplePoint; static div(first: ISimplePoint, second: ISimplePoint): ISimplePoint; static negative({ x, y }: ISimplePoint): ISimplePoint; static multiplyOnNumber({ x, y }: ISimplePoint, num: number): ISimplePoint; } declare class RangeWrapper extends Bounds { constructor(min: number, max: number); get(value: number): number; } declare class SpriteKeyFrame extends CustomObject implements ISimplePoint { x: number; y: number; duration: number; currentTime: number; constructor(x: number, y: number, duration: number); static createFrames(start: ISimplePoint, end: ISimplePoint, columns: number, duration: number): SpriteKeyFrame[]; static createGenerator(duration: number): (x: number, y: number) => SpriteKeyFrame; simplify(): { x: number; y: number; duration: number; }; } declare class SpriteAnimation extends CustomObject { protected _keyframes: SpriteKeyFrame[]; protected _totalDuration: number; constructor(); get totalDuration(): number; deleteKeyFrames(): void; add(...frames: SpriteKeyFrame[]): void; remove(...frames: SpriteKeyFrame[]): void; updateFramesCurrentTime(): void; getFrameByTime(time: number): SpriteKeyFrame | null; simplify(): { keyframes: { x: number; y: number; duration: number; }[]; totalDuration: number; }; } interface IFont { family: string; size: number; kerning: CanvasFontKerning; variant: CanvasFontVariantCaps; stretch: CanvasFontStretch; color: Color; outlineColor: Color; letterSpacing: number; tabSize: number; horisontalAlign: TextHorisontalAlign; verticalAlign: TextVerticalAlign; } interface JsonDrawableText { text?: TypeAndValue<'src' | 'text', string>; font?: Partial<IFont>; } interface ITextRendering { updateText(ctx: Context, point: ISimplePoint, preUpdatedText: string[]): string[]; strokeDrawText(ctx: Context, args: [string, number, number]): void; fillDrawText(ctx: Context, args: [string, number, number]): void; } declare class DynamicText extends ShapeableObject { private static _transformColorFromSimpleColor; static getTextHeight(ctx: Context, text: string): number; protected _text: string; protected _fittedText: CachedValue<string[], Context>; protected _font: IFont; protected _maxSymbols: number; protected _ctx?: Context; protected _customRenderingText: ITextRendering; replaceableSymbols: Dict<string>; constructor(x?: number, y?: number, width?: number, height?: number); protected _loadJSONFromFile({ text, font }: JsonDrawableText): Promise<void>; setAlign(horisontal: TextHorisontalAlign, vertical: TextVerticalAlign): void; protected _updateTabSize(): void; protected _drawText(ctx: Context, point?: ISimplePoint): void; setCustomTextRendering(rendering: ITextRendering): void; protected _updateFittedText(ctx?: Context): string[]; protected _needUpdateText(value?: boolean | null): void; setSize(width?: number, height?: number): void; set font(value: Partial<IFont>); set text(text: string); get text(): string; protected _updateFont(ctx: Context): void; protected _getTextOffsetByAlign(totalHeight: number): Size; protected _fill(ctx: Context): void; } declare class StaticText extends DynamicText { protected _cachedTextImageUrl: CachedValue<string>; protected _image: HTMLImageElement; constructor(x?: number, y?: number, width?: number, height?: number); protected _updateTextImageUrl(): string; protected _needUpdateText(value?: boolean | null): void; set font(value: Partial<IFont>); protected _draw(ctx: Context): void; } declare class DefaultTextRendering implements ITextRendering { strokeDrawText(ctx: Context, args: [string, number, number]): void; fillDrawText(ctx: Context, args: [string, number, number]): void; updateText(ctx: Context, point: ISimplePoint, preUpdatedText: string[]): string[]; } declare class FormattedTextRendering implements ITextRendering { private static _parsedSymbols; private _drawText; protected static _drawFormattedText(ctx: Context, line: string, x: number, y: number, renderType: RenderType): void; protected static _parseText(text: string): TypeAndValue<string, string>[]; strokeDrawText(ctx: Context, [line, x, y]: [string, number, number]): void; fillDrawText(ctx: Context, [line, x, y]: [string, number, number]): void; updateText(ctx: Context, point: ISimplePoint, preUpdatedText: string[]): string[]; } declare class Circle extends Shape { private _radius; constructor(x?: number, y?: number, radius?: number); protected _updateCorners(): Point[]; protected _updateBox(): ISimpleRect; protected _updatePath(): Path2D; isPointInShape(point: Point): boolean; setRadius(radius?: number): void; set radius(radius: number); get radius(): number; setSize(width?: number, height?: number): void; simplify(): ISimpleDrawableObject & ISimpleShape & { radius: number; }; } type JsonRelativeShape = ISimplePoint[]; declare class DrawablePath extends Shape { protected _relativePoints: Point[]; constructor(x?: number, y?: number); get relativePoints(): Point[]; clearPoints(): void; addPoints(...points: Point[]): void; removePoints(...points: Point[]): void; protected _loadJSONFromFile(result: JsonRelativeShape): Promise<void>; protected _updateCorners(): Point[]; protected _draw(ctx: Context): void; } declare class RelativeShape extends DrawablePath { constructor(x?: number, y?: number, width?: number, height?: number); get absolutePoints(): Point[]; fitPoints(): void; protected _updateCorners(): Point[]; } interface ICornerRadii { leftTop: number; leftBottom: number; rightTop: number; rightBottom: number; } declare class RoundedRectangle extends Shape { static createArc(center: Point, radius: number, startAngle: Angle, endAngle: Angle, segments?: number): Point[]; protected _rawRadii: ICornerRadii; protected _radii: CachedValue<ICornerRadii>; protected _arcSegmentsCount: number; protected _boxRectangle: Rectangle; constructor(x?: number, y?: number, width?: number, height?: number); set arcSegmentsCount(value: number); get arcSegmentsCount(): number; setRadii(leftTop: number, leftBottom: number, rightTop: number, rightBottom: number): void; setSize(width?: number, height?: number): void; get maxRadius(): number; protected _normalizeRadii(): ICornerRadii; protected _updateBox(): ISimpleRect; protected _updateCorners(): Point[]; } declare class Triangle extends Shape { constructor(x?: number, y?: number, width?: number, height?: number); protected _updateCorners(): Point[]; } declare class LinearGradient extends ShapeableObject { protected _colorStops: ColorStop[]; protected _image: HTMLImageElement; protected _cachedImageUrl: CachedValue<void>; protected _gradientAngle: Angle; protected _step: number; isStatic: boolean; constructor(x?: number, y?: number, width?: number, height?: number); set step(value: number); get step(): number; protected _drawGradient(ctx: Context, x?: number, y?: number): void; protected _updateCachedImageUrl(): void; setPosition(x?: number, y?: number): void; setSize(width?: number, height?: number): void; setGradientAngle(angle: Angle): void; addGradientAngle(angle: Angle): void; addColorStop(offset: number, color: Color): void; removeColorStop(offset: number): boolean; protected _fill(ctx: Context): void; } interface JsonCanvasImage extends Record<string, any> { src: string; } interface JsonSpriteSheet extends JsonCanvasImage { size: ISimpleSize & { type: 'grid' | 'dimensions'; }; } interface JsonAnimatedSprite extends JsonSpriteSheet { animations: Record<string, (ISimplePoint & { duration: number; })[]>; } declare class CanvasImage extends ShapeableObject { protected _cuttedImageBox: Rectangle | null; protected _image: HTMLImageElement; protected _isLoaded: boolean; constructor(x?: number, y?: number, width?: number, height?: number); protected _loadJSONFromFile(result: JsonCanvasImage): Promise<void>; doWhenLoaded(cb: Callback): void; setShape(shape: Shape): void; setAngle(angle: Angle): void; cutImage({ x, y, width, height }: SimpleRect): void; setImage(image: HTMLImageElement): void; setSizeByImage(): void; loadImage(src: string): Promise<void>; isLoaded(): boolean; protected _fill(ctx: Context): void; } declare class SpriteSheet extends CanvasImage { protected _currentFrame: SimpleRect; protected _rows: number; protected _columns: number; constructor(x?: number, y?: number, width?: number, height?: number); loadImage(src: string): Promise<void>; protected _loadJSONFromFile(result: JsonSpriteSheet): Promise<void>; setGrid(columns?: number, rows?: number): void; setGridBySize(width: number, height: number): void; getGridSize(): Point; setCurrentFrameByIndex(index: number): void; setCurrentFrame({ x, y }: ISimplePoint): void; getCurrentFrame(): SimpleRect; } declare class AnimatedSprite extends SpriteSheet { protected _currentAnimation?: SpriteAnimation; protected _currentAnimationFrame: SpriteKeyFrame; protected _currentAnimationKey: string; protected _animations: Dict<SpriteAnimation>; protected _timer: PeriodicTimer; isPlaying: boolean; constructor(x?: number, y?: number, width?: number, height?: number); protected _loadJSONFromFile(result: JsonAnimatedSprite): Promise<void>; play(key: string): void; pause(): void; setAnimation(key: string, animation: SpriteAnimation): void; selectAnimation(key: string): void; updateTimer(): void; removeAnimation(key: string): void; hasCurrentAnimation(): boolean; protected _updateTime(delta: number): void; protected _updateAnimation(): void; update(delta: number): void; protected _draw(ctx: Context): void; } declare class FollowedCamera extends Camera { private _followedObject; constructor(ctx?: Context); setFollowedObject(obj: FollowedCameraObject): void; updatePosition(): boolean; update(callback: (ctx: Context) => void): void; } declare class BaseAudio extends DrawableObject { static volumeBounds: Bounds; protected _context: AudioContext; protected _audioSource: AudioBufferSourceNode; protected _gain: GainNode; protected _audioNodes: AudioNode[]; protected _src: string; protected _isInitialStarted: boolean; protected _paused: boolean; protected _loop: boolean; constructor(); set loop(value: boolean); get loop(): boolean; set volume(value: number); get volume(): number; get audioContext(): AudioContext; get allNodes(): AudioNode[]; protected _disconnectAllNodes(): void; protected _connectAllNodes(): void; protected _updateAllNodes(cb?: Callback): void; addAudioNode(node: AudioNode): void; removeAudioNode(node: AudioNode): void; insertAudioNode(index: number, node: AudioNode): void; setAudioBuffer(buffer: AudioBuffer): void; loadFromFile(src: string): Promise<void>; protected _recreateSource(): void; start(secs?: number): void; stop(): void; get factRect(): ISimpleRect; updatePositionByOffset(point: ISimplePoint): void; protected _draw(ctx: Context): void; isObjectInViewport(camera: Camera): boolean; simplify(): { volume: number; loop: boolean; src: string; color: { r: number; g: number; b: number; a: number; }; lineWidth: number; opacity: number; zIndex: number; }; } declare class PositionedAudio extends BaseAudio implements IPointable { circle: Circle; protected _listenedObject?: IPointable; protected _maxVolume: number; constructor(x?: number, y?: number, radius?: number); set point(value: ISimplePoint); get point(): PointType; set x(value: number); get x(): number; set y(value: number); get y(): number; setPosition(x?: number, y?: number): void; set radius(radius: number); get radius(): number; setListenedObject(obj: IPointable): void; addPosition(x: number, y: number): void; move(point: ISimplePoint, delta: number): void; protected _draw(ctx: Context): void; protected set factVolume(value: number); get factVolume(): number; set volume(value: number); get volume(): number; get factRect(): ISimpleRect; update(delta: number): void; updatePositionByOffset(point: ISimplePoint): void; simplify(): { radius: number; volume: number; loop: boolean; src: string; color: { r: number; g: number; b: number; a: number; }; lineWidth: number; opacity: number; zIndex: number; }; } declare class StereoPositionedAudio extends PositionedAudio { static panBounds: Bounds; protected _panner: StereoPannerNode; constructor(x?: number, y?: number, radius?: number); get allNodes(): AudioNode[]; set pan(pan: number); get pan(): number; update(delta: number): void; } interface IControlsManager extends IManager { addControls(key: string): void; } interface ISimpleColor { r: number; g: number; b: number; a: number; } export { Angle, AnimatedSprite, AssetsManager, BaseAudio, Bounds, CachedValue, Camera, CanvasImage, CanvasManager, Circle, Color, CustomObject, DefaultTextRendering, DrawMode, DrawableObject, DrawablePath, DynamicText, ElapsedClock, EventEmitter, FollowedCamera, FormattedTextRendering, GameEntity, GameObject, GameScene, GameWorld, HotKey, KeyCodes, KeyStateManager, KeyboardManager, LinearGradient, LocalStorageManager, Logging, LoggingLevel, MathUtils, PeriodicTimer, Point, PointerInpu