Craters is a modular JavaScript framework reimplemented in TypeScript for rapid HTML5 game development
World, Entity, System, Query).KeyboardEvent.code.npm install craters
import { EntityComponentSystem as ECS, RenderLoop } from "craters";
// 1. Define Components
class Position extends ECS.Component {
constructor(public x: number, public y: number) { super(); }
}
class Velocity extends ECS.Component {
constructor(public dx: number, public dy: number) { super(); }
}
// 2. Define System
class MovementSystem extends ECS.System {
public execute(delta: number): void {
// Query entities with Position and Velocity
const query = this.world.createQuery([Position, Velocity]);
query.entities.forEach(entity => {
const pos = entity.getComponent(Position);
const vel = entity.getComponent(Velocity);
pos.x += vel.dx * delta;
pos.y += vel.dy * delta;
});
}
}
// 3. Setup World
const world = new ECS.World();
world.registerSystem(new MovementSystem());
// 4. Create Entity
const player = world.createEntity();
player.addComponent(new Position(0, 0));
player.addComponent(new Velocity(1, 0));
// 5. Run Loop
const loop = new RenderLoop((delta) => {
world.execute(delta);
});
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.
Also, please don't edit files in the "dist" subdirectory as they are generated via Grunt. You'll find source code in the "src" subdirectory!
See CHANGELOG.md for the full release history.
Copyright (c) 2021 John Swana Licensed under the MIT license.