# Serpentity
-Serpentity is a simple entity framework inspired by [Ash][ash].
+Serpentity is a simple entity framework inspired by Ash.
Usage:
- require('serpentity');
+ let Serpentity = require('serpentity');
+
+or:
+
+ <script src="/node_modules/serpentity/dist/serpentity.js"></script>
## Instantiating an engine
- var engine = Serpentity();
+ let engine = 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.
- var entity = new Serpentity.Entity();
+ let entity = new Serpentity.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"
- Class("PositionComponent").inherits(Serpentity.Component)({
- prototype : {
- x : 0,
- y : 0
- }
- });
+ let PositionComponent = class PositionComponent extends Serpentity.Component {
+ constructor (config) {
+ super(config);
+
+ this.x = this.x || 0;
+ this.y = this.y || 0;
+ }
+ };
-You can add components to entities by using the addComponent method:
+You can add components to entities by using the add method:
entity.addComponent(new PositionComponent());
Nodes are sets of components that you define, so your system can require
entities that always follow the API defined in the node.
- Class("MovementNode").inherits(Serpentity.Node)({
- types : {
- position : PositionComponent,
- motion : MotionComponent
- }
- });
+ let MovementNode = class MovementNode extends Serpentity.Node;
+ MovementNode.position = PositionComponent;
+ MovementNode.motion = MotionComponent;
You can then request an array of all the nodes representing entities
that comply with that API
Systems are called on every update, and they use components through nodes.
- Class("TestSystem").inherits(Serpentity.System)({
- prototype : {
- added : function added(engine){
- this.nodeList = engine.getNodes(MovementNode);
- },
- removed : function removed(engine){
- this.nodeList = undefined;
- }
- update : function update(dt){
- this.nodeList.forEach(function (node) {
- console.log("Current position is: " + node.position.x + "," + node.position.y);
- });
- }
+ let TestSystem = class TestSystem extends Serpentity.System {
+ added (engine){
+ this.nodeList = engine.getNodes(MovementNode);
+ },
+ removed (engine){
+ this.nodeList = undefined;
+ }
+ update (dt){
+ let node;
+ for (node of this.nodeList) {
+ console.log(`Current position is: ${node.position.x},${node.position.y}`);
}
- });
+ }
+ };
## That's it
Just run `engine.update(dt)` in your game loop :D
-## Checking it in the frontend (dev).
-
-You can link the bower package to test it out locally.
-Spawn a python server (`python -m SimpleHTTPServer`) to see
-the test page in `http://localhost:8000/browser_test/`
-
-
## TO-DO
-* Removing components
-* Implement the ashteroids demo (Serpentoids)
-* Actually check performance
+* Minimize code (Uglify does not support ES6 yet)
+* Check Performance
[ash]: http://www.ashframework.org/