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.
70 lines (69 loc) • 2.28 kB
TypeScript
import { Scene } from '../Scene';
import { World } from './World';
/**
* Enum that determines whether to run the system in the update or draw phase
*/
export declare enum SystemType {
Update = "update",
Draw = "draw"
}
/**
* An Excalibur {@apilink System} that updates entities of certain types.
* Systems are scene specific
*
*
*
* Excalibur Systems currently require at least 1 Component type to operated
*
* Multiple types are declared as a type union
* For example:
*
* ```typescript
* class MySystem extends System {
* static priority = SystemPriority.Lowest;
* public readonly systemType = SystemType.Update;
* public query: Query<typeof TransformComponent>;
* constructor(public world: World) {
* super();
* this.query = this.world.query([TransformComponent]);
* }
* public update(elapsed: number) {
* ...
* }
* }
* ```
*/
export declare abstract class System {
/**
* Determine whether the system is called in the {@apilink SystemType.Update} or the {@apilink SystemType.Draw} phase. Update is first, then Draw.
*/
abstract readonly systemType: SystemType;
/**
* System can execute in priority order, by default all systems are priority 0. Lower values indicated higher priority.
* For a system to execute before all other a lower priority value (-1 for example) must be set.
* For a system to execute after all other a higher priority value (10 for example) must be set.
*/
static priority: number;
/**
* Optionally specify an initialize handler
* @param scene
*/
initialize?(world: World, scene: Scene): void;
/**
* Update all entities that match this system's types
* @param elapsed Time in milliseconds
*/
abstract update(elapsed: number): void;
/**
* Optionally run a preupdate before the system processes matching entities
* @param scene
* @param elapsed Time in milliseconds since the last frame
*/
preupdate?(scene: Scene, elapsed: number): void;
/**
* Optionally run a postupdate after the system processes matching entities
* @param scene
* @param elapsed Time in milliseconds since the last frame
*/
postupdate?(scene: Scene, elapsed: number): void;
}