]> git.r.bdr.sh - rbdr/serpentity/blame_incremental - README.md
Jump version for priority version
[rbdr/serpentity] / README.md
... / ...
CommitLineData
1# Serpentity
2
3Serpentity is a simple entity framework inspired by [Ash][ash].
4
5Usage:
6
7 require('serpentity');
8
9## Instantiating an engine
10
11 var engine = Serpentity();
12
13Add entities or systems, systems are added with a priority (the smaller
14the number, the earlier it will be called):
15
16 engine.addEntity(entityFactory());
17 engine.addSystem(new GameSystem(), priority);
18
19Update all systems:
20
21 engine.update(dt);
22
23Remove entities or systems:
24
25 engine.removeEntity(entityReference);
26 engine.removeSystem(systemReference);
27
28## Creating Entities
29
30Entities are the basic object of Serpentity, and they do nothing.
31
32 var entity = new Serpentity.Entity();
33
34All the behavior is added through components
35
36## Creating Components
37
38Components define data that we can add to an entity. This data will
39eventually be consumed by "Systems"
40
41 Class("PositionComponent").inherits(Serpentity.Component)({
42 prototype : {
43 x : 0,
44 y : 0
45 }
46 });
47
48You can add components to entities by using the add method:
49
50 entity.add(new PositionComponent());
51
52
53Systems can refer to entities by requesting nodes.
54
55## Working with Nodes
56
57Nodes are sets of components that you define, so your system can require
58entities that always follow the API defined in the node.
59
60 Class("MovementNode").inherits(Serpentity.Node)({
61 types : {
62 position : PositionComponent,
63 motion : MotionComponent
64 }
65 });
66
67You can then request an array of all the nodes representing entities
68that comply with that API
69
70 engine.getNodes(MovementNode);
71
72## Creating Systems
73
74Systems are called on every update, and they use components through nodes.
75
76 Class("TestSystem").inherits(Serpentity.System)({
77 prototype : {
78 added : function added(engine){
79 this.nodeList = engine.getNodes(MovementNode);
80 },
81 removed : function removed(engine){
82 this.nodeList = undefined;
83 }
84 update : function update(dt){
85 this.nodeList.forEach(function (node) {
86 console.log("Current position is: " + node.position.x + "," + node.position.y);
87 });
88 }
89 }
90 });
91
92## That's it
93
94Just run `engine.update(dt)` in your game loop :D
95
96## TO-DO
97
98* Removing components
99* Implement the ashteroids demo (Serpentoids)
100* Actually check performance
101
102[ash]: http://www.ashframework.org/