excalibur
Version:
Excalibur.js is a simple JavaScript game engine with TypeScript bindings for making 2D games in HTML5 Canvas. Our mission is to make web game development as simple as possible.
78 lines (77 loc) • 3.98 kB
TypeScript
import { Engine } from '../Engine';
import { ScheduledCallbackTiming } from './Clock';
export type CoroutineGenerator = () => Generator<any | number | Promise<any> | undefined, void, number>;
export interface CoroutineOptions {
/**
* Coroutines run preframe in the clock by default.
*/
timing?: ScheduledCallbackTiming;
/**
* Coroutines auto start by default, set to false to require play();
*/
autostart?: boolean;
}
type Thenable = PromiseLike<void>['then'];
export interface CoroutineInstance extends PromiseLike<void> {
isRunning(): boolean;
isComplete(): boolean;
done: Promise<void>;
generator: Generator<CoroutineInstance | number | Promise<any> | undefined, void, number>;
start: () => CoroutineInstance;
cancel: () => void;
then: Thenable;
[Symbol.iterator]: () => Generator<CoroutineInstance | number | Promise<any> | undefined, void, number>;
}
/**
* Excalibur coroutine helper, returns a [[CoroutineInstance]] which is promise-like when complete. Coroutines run before frame update by default.
*
* Each coroutine yield is 1 excalibur frame. Coroutines get passed the elapsed time our of yield. Coroutines
* run internally on the excalibur clock.
*
* If you yield a promise it will be awaited before resumed
* If you yield a number it will wait that many ms before resumed
* @param thisArg set the "this" context of the generator, by default is globalThis
* @param engine pass a specific engine to use for running the coroutine
* @param coroutineGenerator coroutine generator function
* @param {CoroutineOptions} options optionally schedule coroutine pre/post update
*/
export declare function coroutine(thisArg: any, engine: Engine, coroutineGenerator: CoroutineGenerator, options?: CoroutineOptions): CoroutineInstance;
/**
* Excalibur coroutine helper, returns a promise when complete. Coroutines run before frame update.
*
* Each coroutine yield is 1 excalibur frame. Coroutines get passed the elapsed time our of yield. Coroutines
* run internally on the excalibur clock.
*
* If you yield a promise it will be awaited before resumed
* If you yield a number it will wait that many ms before resumed
* @param engine pass a specific engine to use for running the coroutine
* @param coroutineGenerator coroutine generator function
* @param {CoroutineOptions} options optionally schedule coroutine pre/post update
*/
export declare function coroutine(engine: Engine, coroutineGenerator: CoroutineGenerator, options?: CoroutineOptions): CoroutineInstance;
/**
* Excalibur coroutine helper, returns a promise when complete. Coroutines run before frame update.
*
* Each coroutine yield is 1 excalibur frame. Coroutines get passed the elapsed time our of yield. Coroutines
* run internally on the excalibur clock.
*
* If you yield a promise it will be awaited before resumed
* If you yield a number it will wait that many ms before resumed
* @param coroutineGenerator coroutine generator function
* @param {CoroutineOptions} options optionally schedule coroutine pre/post update
*/
export declare function coroutine(coroutineGenerator: CoroutineGenerator, options?: CoroutineOptions): CoroutineInstance;
/**
* Excalibur coroutine helper, returns a promise when complete. Coroutines run before frame update.
*
* Each coroutine yield is 1 excalibur frame. Coroutines get passed the elapsed time our of yield. Coroutines
* run internally on the excalibur clock.
*
* If you yield a promise it will be awaited before resumed
* If you yield a number it will wait that many ms before resumed
* @param thisArg set the "this" context of the generator, by default is globalThis
* @param coroutineGenerator coroutine generator function
* @param {CoroutineOptions} options optionally schedule coroutine pre/post update
*/
export declare function coroutine(thisArg: any, coroutineGenerator: CoroutineGenerator, options?: CoroutineOptions): CoroutineInstance;
export {};