Skip to content

adngdb/entity-system-js

Repository files navigation

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

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 }
}

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