ensy
is a JavaScript implementation of the Entity System model as described by Adam Martin
in his blog post series Entity Systems are the future of MMOs.
Component/Entity Systems are an architectural pattern used mostly in game development. A CES follows the Composition over Inheritance principle to allow for greater flexibility when defining entities (anything that's part of a game's scene: enemies, doors, bullets) by building out of individual parts that can be mixed-and-matched. This eliminates the ambiguity problems of long inheritance chains and promotes clean design. However, CES systems do incur a small cost to performance.
— From the Entity Systems Wiki
This module is available on npm
as ensy
. It has no dependencies.
npm install --save ensy
import EntityManager from 'ensy';
let manager = new EntityManager();
// Create a component and add it to the manager.
const PlayerComponent = {
name: 'Player',
description: "The player's state",
state: {
life: 100,
strength: 18,
charisma: 3,
}
};
manager.addComponent(PlayerComponent.name, PlayerComponent);
// Create a new entity.
const playerId = manager.createEntity(['Player']);
// Update the player's state:
let playerData = manager.getComponentDataForEntity('Player', playerId);
playerData.life = 80;
// Which is equivalent to:
manager.updateComponentDataForEntity('Player', playerId, {
life: 80,
});
// Which can also be done when creating the entity:
const playerId = manager.createEntity(['Player'], null, {
Player: {
life: 80,
},
});
console.log(playerData);
// { life: 80, strength: 18, charisma: 3 }
}
The documentation is available on Read the docs. All methods are well documented and parameters are described.
For an overall explanation of ensy
, you can read my blog post ensy - Entity System Reloaded.
There are examples in the examples directory:
- Concentration
- Total Madness Arena (Jam game, made in 3 days)
- Made something with
ensy
? Add it here!
Install the dependencies with npm install
. The source files are in src/
.
The code uses es6 features, and is compiled to es5 using babel
and rollup
.
$ npm run build
We use rollup and babel to compile the code from es6 to es5, and uglify to minify the source code.
$ npm test
To have tests watch your files and re-run when they change:
$ npm run test-w
To run the tests in your browser:
$ npm run test-browser
$ npm run build_doc