Usage:
- require('serpentity');
+ import Serpentity from '@serpentity/serpentity';
## Instantiating an engine
- var 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.
- var 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"
- Class("PositionComponent").inherits(Serpentity.Component)({
- prototype : {
- x : 0,
- y : 0
- }
- });
+ import { Component } from '@serpentity/serpentity';
+ const PositionComponent = class PositionComponent extends Component {
+ constructor(config) {
+
+ this.x = 0;
+ this.y = 0;
+
+ super(config);
+ }
+ };
-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
- }
- });
+ import { Node } from '@serpentity/serpentity';
+ const MovementNode = class MovementNode extends 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);
- });
- }
- }
- });
+ import { System } from '@serpentity/serpentity';
+ const TestSystem = class TestSystem extends System {
+ added(engine){
-## That's it
+ this.nodeList = engine.getNodes(MovementNode);
+ }
-Just run `engine.update(dt)` in your game loop :D
+ removed(engine){
-## Checking it in the frontend (dev).
+ this.nodeList = undefined;
+ }
-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/`
+ update(dt){
+ for (const node of this.nodeList) {
+ console.log(`Current position is: ${node.position.x},${node.position.y}`);
+ }
+ }
+ };
-## TO-DO
+## That's it
-* Removing components
-* Implement the ashteroids demo (Serpentoids)
-* Actually check performance
+Just run `engine.update(dt)` in your game loop :D
[ash]: http://www.ashframework.org/