JavaScript HTML
Switch branches/tags
Latest commit 80dc842 May 30, 2017 @adngdb adngdb Made `getComponentsData` return an actual array (as documented) inste…
…ad of an object. [BREAKING]

README.md

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 and bower as ensy. It has no dependencies.

npm install --save ensy

Usage

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.
var playerId = manager.createEntity(['Player']);

// Update the player's state:
var playerData = manager.getComponentDataForEntity('Player', playerId);
playerData.life = 80;

// Which is equivalent to:
manager.updateComponentDataForEntity('Player', playerId, {
    life: 80,
});

console.log(playerData);
// { 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:

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