# Serpentity
-Serpentity is a simple entity framework inspired by Ash.
+Serpentity is a simple entity framework inspired by [Ash][ash].
Usage:
- let Serpentity = require('serpentity');
-
-or:
-
- <script src="/node_modules/serpentity/dist/serpentity.js"></script>
+ import Serpentity from '@serpentity/serpentity';
## Instantiating an engine
- let engine = Serpentity();
+ const engine = new Serpentity();
Add entities or systems, systems are added with a priority (the smaller
the number, the earlier it will be called):
Entities are the basic object of Serpentity, and they do nothing.
- let entity = new Serpentity.Entity();
+ import { Entity } from '@serpentity/serpentity';
+ const entity = new Entity();
All the behavior is added through components
Components define data that we can add to an entity. This data will
eventually be consumed by "Systems"
- let PositionComponent = class PositionComponent extends Serpentity.Component {
- constructor (config) {
- super(config);
+ import { Component } from '@serpentity/serpentity';
+ const PositionComponent = class PositionComponent extends Component {
+ constructor(config) {
+
+ this.x = 0;
+ this.y = 0;
- this.x = this.x || 0;
- this.y = this.y || 0;
+ super(config);
}
};
Nodes are sets of components that you define, so your system can require
entities that always follow the API defined in the node.
- let MovementNode = class MovementNode extends Serpentity.Node;
+ import { Node } from '@serpentity/serpentity';
+ const MovementNode = class MovementNode extends Node;
MovementNode.position = PositionComponent;
MovementNode.motion = MotionComponent;
Systems are called on every update, and they use components through nodes.
- let TestSystem = class TestSystem extends Serpentity.System {
- added (engine){
+ import { System } from '@serpentity/serpentity';
+ const TestSystem = class TestSystem extends System {
+ added(engine){
+
this.nodeList = engine.getNodes(MovementNode);
- },
- removed (engine){
+ }
+
+ removed(engine){
+
this.nodeList = undefined;
}
- update (dt){
- let node;
- for (node of this.nodeList) {
+
+ update(dt){
+
+ for (const node of this.nodeList) {
console.log(`Current position is: ${node.position.x},${node.position.y}`);
}
}
Just run `engine.update(dt)` in your game loop :D
-## TO-DO
-
-* Minimize code (Uglify does not support ES6 yet)
-* Check Performance
-
[ash]: http://www.ashframework.org/