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 buildWe use rollup and babel to compile the code from es6 to es5, and uglify to minify the source code.
$ npm testTo have tests watch your files and re-run when they change:
$ npm run test-wTo run the tests in your browser:
$ npm run test-browser$ npm run build_doc