ensy: Entity System for JavaScript
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
Installation
This module is available on npm
as ensy
. It has no dependencies.
npm install --save ensy
Usage
; let manager = ; // 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; // Create a new entity.const playerId = manager; // Update the player's state:let playerData = manager;playerDatalife = 80; // Which is equivalent to:manager; // Which can also be done when creating the entity:const playerId = manager; console;// { life: 80, strength: 18, charisma: 3 }}
Documentation
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.
Examples
There are examples in the examples directory:
- Concentration
- Total Madness Arena (Jam game, made in 3 days)
- Made something with
ensy
? Add it here!
For developers
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
.
Building the code
$ npm run build
We use rollup and babel to compile the code from es6 to es5, and uglify to minify the source code.
Running tests
$ 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
Building the API documentation
$ npm run build_doc