entityjs 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/README.md +49 -0
- data/Rakefile +1 -0
- data/bin/entityjs +14 -0
- data/build/build_debug.bat +1 -0
- data/build/build_min.bat +1 -0
- data/build/config.php +64 -0
- data/build/debug.php +48 -0
- data/build/files.php +74 -0
- data/build/jsmin.php +376 -0
- data/build/min.php +50 -0
- data/changelog.txt +53 -0
- data/entityjs.gemspec +25 -0
- data/examples/keys/arrow.png +0 -0
- data/examples/keys/keys.html +59 -0
- data/examples/keys/keys.js +148 -0
- data/examples/mouse/mouse.html +58 -0
- data/examples/mouse/mouse.js +60 -0
- data/examples/scenes/home.png +0 -0
- data/examples/scenes/scenes.html +55 -0
- data/examples/scenes/scenes.js +134 -0
- data/examples/scenes/win.png +0 -0
- data/examples/sounds/sound1.mp3 +0 -0
- data/examples/sounds/sound1.ogg +0 -0
- data/examples/sounds/sounds.html +56 -0
- data/examples/sounds/sounds.js +44 -0
- data/examples/style/background.png +0 -0
- data/examples/style/sheet.css +762 -0
- data/examples/tiles/tiles.html +56 -0
- data/examples/tiles/tiles.js +85 -0
- data/examples/tiles/tiles.png +0 -0
- data/lib/blank/config.js +4 -0
- data/lib/blank/config.yml +21 -0
- data/lib/blank/home.js +11 -0
- data/lib/blank/init.js +7 -0
- data/lib/blank/load.js +21 -0
- data/lib/blank/play.html +29 -0
- data/lib/entity.debug.js +52 -0
- data/lib/entity.min.js +184 -0
- data/lib/entityjs/command.rb +37 -0
- data/lib/entityjs/comp.rb +11 -0
- data/lib/entityjs/game.rb +93 -0
- data/lib/entityjs/min.rb +11 -0
- data/lib/entityjs/refresh.rb +14 -0
- data/lib/entityjs/version.rb +3 -0
- data/lib/entityjs.rb +6 -0
- data/license.txt +1 -0
- data/spec/lib/entityjs/game_spec.rb +11 -0
- data/spec/spec_helper.rb +3 -0
- data/src/entityjs/core/component.js +306 -0
- data/src/entityjs/core/entity.js +516 -0
- data/src/entityjs/core/load.js +224 -0
- data/src/entityjs/core/query.js +410 -0
- data/src/entityjs/core/re.js +70 -0
- data/src/entityjs/core/system.js +125 -0
- data/src/entityjs/cycle/draw.js +185 -0
- data/src/entityjs/cycle/ticker.js +27 -0
- data/src/entityjs/cycle/tween.js +61 -0
- data/src/entityjs/cycle/update.js +86 -0
- data/src/entityjs/cycle/wait.js +22 -0
- data/src/entityjs/cycle/worker.js +9 -0
- data/src/entityjs/display/anchor.js +53 -0
- data/src/entityjs/display/bitfont.js +93 -0
- data/src/entityjs/display/bitmap.js +37 -0
- data/src/entityjs/display/circle.js +30 -0
- data/src/entityjs/display/font.js +41 -0
- data/src/entityjs/display/group.js +63 -0
- data/src/entityjs/display/rect.js +19 -0
- data/src/entityjs/display/screen.js +46 -0
- data/src/entityjs/display/sprite.js +37 -0
- data/src/entityjs/input/keyboard.js +150 -0
- data/src/entityjs/input/mouse.js +123 -0
- data/src/entityjs/input/pressed.js +81 -0
- data/src/entityjs/input/touch.js +28 -0
- data/src/entityjs/math/bind.js +76 -0
- data/src/entityjs/math/bisect.js +69 -0
- data/src/entityjs/math/body.js +39 -0
- data/src/entityjs/math/drag.js +39 -0
- data/src/entityjs/math/hitmap.js +165 -0
- data/src/entityjs/math/hittest.js +26 -0
- data/src/entityjs/math/physics.js +142 -0
- data/src/entityjs/math/point.js +57 -0
- data/src/entityjs/math/tile.js +91 -0
- data/src/entityjs/media/channel.js +93 -0
- data/src/entityjs/media/playlist.js +5 -0
- data/src/entityjs/media/sound.js +110 -0
- data/src/entityjs/net/socket.js +52 -0
- data/src/entityjs/pattern/arraymap.js +89 -0
- data/src/entityjs/pattern/flicker.js +214 -0
- data/src/entityjs/pattern/timestep.js +34 -0
- data/src/entityjs/save/database.js +7 -0
- data/src/entityjs/save/storage.js +57 -0
- data/src/entityjs/util/log.js +25 -0
- data/src/entityjs/util/polyfill.js +25 -0
- data/src/entityjs/util/random.js +38 -0
- data/src/entityjs/util/scene.js +101 -0
- data/src/entityjs/util/sheet.js +51 -0
- data/src/entityjs/util/support.js +132 -0
- metadata +156 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
/*
|
2
|
+
The socket component is an interface for the new HTML5 websockets.
|
3
|
+
|
4
|
+
Its safe to use this abstraction incase specs change in the future.
|
5
|
+
|
6
|
+
*/
|
7
|
+
re.c('socket')
|
8
|
+
.extend({
|
9
|
+
|
10
|
+
connect:function(address){
|
11
|
+
|
12
|
+
this.socket = new WebSocket(address);
|
13
|
+
|
14
|
+
},
|
15
|
+
|
16
|
+
close:function(){
|
17
|
+
if(!this.socket) return this;
|
18
|
+
|
19
|
+
this.socket.close();
|
20
|
+
|
21
|
+
return this;
|
22
|
+
},
|
23
|
+
|
24
|
+
open:function(callback){
|
25
|
+
if(!this.socket) return this;
|
26
|
+
|
27
|
+
this.socket.onopen = callback;
|
28
|
+
|
29
|
+
},
|
30
|
+
|
31
|
+
error:function(callback){
|
32
|
+
if(!this.socket) return this;
|
33
|
+
|
34
|
+
this.socket.onerror = callback;
|
35
|
+
|
36
|
+
},
|
37
|
+
|
38
|
+
message:function(callback){
|
39
|
+
if(!this.socket) return this;
|
40
|
+
|
41
|
+
this.socket.onmessage = callback;
|
42
|
+
|
43
|
+
},
|
44
|
+
|
45
|
+
send:function(){
|
46
|
+
if(!this.socket) return this;
|
47
|
+
|
48
|
+
this.socket.send.apply(this.socket, arguments);
|
49
|
+
|
50
|
+
}
|
51
|
+
|
52
|
+
});
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/*
|
2
|
+
The arraymap component creates an auto expandable two-dimensional array.
|
3
|
+
*/
|
4
|
+
re.c('arraymap')
|
5
|
+
.inherit({
|
6
|
+
lengthX:0,
|
7
|
+
lengthY:0
|
8
|
+
})
|
9
|
+
.extend({
|
10
|
+
/*map:null,
|
11
|
+
size:null,*/
|
12
|
+
value:0,
|
13
|
+
|
14
|
+
set:function(x, y, value){
|
15
|
+
|
16
|
+
//increate y length
|
17
|
+
while(y >= this.map.length){
|
18
|
+
var m = new Array(this.map[0]);
|
19
|
+
|
20
|
+
for(var l in m){
|
21
|
+
m[l] = this.value;
|
22
|
+
}
|
23
|
+
|
24
|
+
this.map.push(m);
|
25
|
+
|
26
|
+
}
|
27
|
+
|
28
|
+
//increase x length
|
29
|
+
while(x >= this.map[this.map.length-1].length){
|
30
|
+
|
31
|
+
for(var k=0; k<this.map.length; k++){
|
32
|
+
this.map[k].push(this.value);
|
33
|
+
}
|
34
|
+
|
35
|
+
}
|
36
|
+
|
37
|
+
this.lengthX = this.map[y].length;
|
38
|
+
this.lengthY = this.map.length;
|
39
|
+
|
40
|
+
this.map[y][x] = value;
|
41
|
+
|
42
|
+
return this;
|
43
|
+
},
|
44
|
+
|
45
|
+
within:function(x, y){
|
46
|
+
|
47
|
+
if(y < 0 || y >= this.lengthY || x < 0 || x >= this.lengthX){
|
48
|
+
return false;
|
49
|
+
}
|
50
|
+
return true;
|
51
|
+
},
|
52
|
+
|
53
|
+
get:function(x, y){
|
54
|
+
if(this.within(x,y)){
|
55
|
+
return this.map[y][x];
|
56
|
+
}
|
57
|
+
return null;
|
58
|
+
},
|
59
|
+
|
60
|
+
copy:function(a){
|
61
|
+
|
62
|
+
for(var y=0; y<a.length; y++){
|
63
|
+
for(var x=0; x<a[0].length; x++){
|
64
|
+
this.set(x, y, a[y][x]);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
return this;
|
69
|
+
},
|
70
|
+
|
71
|
+
copyByRef:function(m){
|
72
|
+
|
73
|
+
this.map = m;
|
74
|
+
|
75
|
+
if(m.length > 0){
|
76
|
+
this.lengthX = m[0].length;
|
77
|
+
} else {
|
78
|
+
this.lengthX = 0;
|
79
|
+
}
|
80
|
+
|
81
|
+
this.lengthY = m.length;
|
82
|
+
|
83
|
+
return this;
|
84
|
+
}
|
85
|
+
|
86
|
+
})
|
87
|
+
.init(function(){
|
88
|
+
this.map = [];
|
89
|
+
});
|
@@ -0,0 +1,214 @@
|
|
1
|
+
/*
|
2
|
+
The flicker component calls the implemented method and sends the given information over a period of time.
|
3
|
+
|
4
|
+
This is most popular for sprite animation.
|
5
|
+
|
6
|
+
It can also be used for graduatly writing text or flashing a drawing object.
|
7
|
+
*/
|
8
|
+
re.c('flicker')
|
9
|
+
.require('update timestep')
|
10
|
+
.implement('flick')
|
11
|
+
.init(function(){
|
12
|
+
|
13
|
+
this.flicker_reels = {};
|
14
|
+
this.flicker_old = {};
|
15
|
+
this.flicker_reel = {};
|
16
|
+
|
17
|
+
this.flicker_flickering = '';
|
18
|
+
|
19
|
+
})
|
20
|
+
.extend({
|
21
|
+
|
22
|
+
flicker_stop:function(){
|
23
|
+
if(this.flickering()){
|
24
|
+
|
25
|
+
this.signal('animated', this.flicker_flickering);
|
26
|
+
|
27
|
+
this.flicker_flickering = '';
|
28
|
+
|
29
|
+
this.stepProgress = 0;
|
30
|
+
this.frameX = this.flicker_oldX;
|
31
|
+
this.frameY = this.flicker_oldY;
|
32
|
+
|
33
|
+
this.removeSignal('update', this.flicker_update);
|
34
|
+
}
|
35
|
+
return this;
|
36
|
+
},
|
37
|
+
|
38
|
+
flicker_update:function(t){
|
39
|
+
|
40
|
+
this.timestep(t, function(){
|
41
|
+
var c = this.flicker_reel;
|
42
|
+
|
43
|
+
//check if over
|
44
|
+
if(this.flicker_frame == this.flicker_reel.frames.length){
|
45
|
+
|
46
|
+
if(c.loops == -1 || --this.flicker_loops >= 1){
|
47
|
+
//loop again
|
48
|
+
|
49
|
+
this.flicker_frame = 0;
|
50
|
+
|
51
|
+
} else {
|
52
|
+
//done flickering
|
53
|
+
|
54
|
+
this.flicker_stop();
|
55
|
+
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
//flick
|
61
|
+
this.flick(c.frames[this.flicker_frame]);
|
62
|
+
|
63
|
+
this.flicker_frame++;
|
64
|
+
|
65
|
+
});
|
66
|
+
|
67
|
+
},
|
68
|
+
|
69
|
+
addFlicker:function(id, loops, duration, frames){
|
70
|
+
|
71
|
+
if(typeof id == 'object'){
|
72
|
+
|
73
|
+
for(var i in id){
|
74
|
+
if(!id.hasOwnProperty(i)) continue;
|
75
|
+
|
76
|
+
//copy formed array and insert
|
77
|
+
var c = id[i].slice();
|
78
|
+
//add key into array
|
79
|
+
c.unshift(i);
|
80
|
+
|
81
|
+
this.addFlicker.apply(this, c);
|
82
|
+
|
83
|
+
}
|
84
|
+
|
85
|
+
return this;
|
86
|
+
}
|
87
|
+
|
88
|
+
if(typeof frames == 'string') frames = frames.split(' ');
|
89
|
+
|
90
|
+
//add
|
91
|
+
this.flicker_reels[id] =
|
92
|
+
{
|
93
|
+
frames:frames,
|
94
|
+
duration:duration,
|
95
|
+
loops:loops
|
96
|
+
};
|
97
|
+
|
98
|
+
return this;
|
99
|
+
},
|
100
|
+
|
101
|
+
removeFlicker:function(id){
|
102
|
+
|
103
|
+
if(typeof id == 'object'){
|
104
|
+
|
105
|
+
for(var i in id){
|
106
|
+
if(!id.hasOwnProperty(i)) continue;
|
107
|
+
|
108
|
+
this.removeFlicker.call(this, id[i]);
|
109
|
+
}
|
110
|
+
|
111
|
+
return this;
|
112
|
+
}
|
113
|
+
|
114
|
+
//assuming this flicker isn't running
|
115
|
+
delete this.flicker_reels[id];
|
116
|
+
|
117
|
+
return this;
|
118
|
+
},
|
119
|
+
|
120
|
+
/*
|
121
|
+
The animate method either creates or plays an animation.
|
122
|
+
Time is in milliseconds.
|
123
|
+
|
124
|
+
//create sequence animation
|
125
|
+
re('#player').flicker('die', 1, 200, [0, 1, 3, 3, 4, 3, 2, 1]);
|
126
|
+
|
127
|
+
//play animation
|
128
|
+
//can customize the animation for this call.
|
129
|
+
re('#player').flicker('die', 0, 200);
|
130
|
+
|
131
|
+
//stop flickering
|
132
|
+
re('#player').flicker();
|
133
|
+
|
134
|
+
//add multiple animations
|
135
|
+
flicker({
|
136
|
+
idle:[loops, duration, frames],
|
137
|
+
..
|
138
|
+
|
139
|
+
|
140
|
+
});
|
141
|
+
|
142
|
+
FUTURE:
|
143
|
+
-allow backward animations
|
144
|
+
-allow entry of an array of frames. So each counter will go to the next frame in the array
|
145
|
+
*/
|
146
|
+
flicker:function(id, loops, duration, frames){
|
147
|
+
|
148
|
+
if(arguments.length == 0){
|
149
|
+
//stop flickering
|
150
|
+
return this.flicker_stop();
|
151
|
+
}
|
152
|
+
|
153
|
+
if(id == this.flicker_flickering) return;
|
154
|
+
|
155
|
+
if(!this.flicker_reels[id]){
|
156
|
+
return this;
|
157
|
+
}
|
158
|
+
|
159
|
+
//defaults
|
160
|
+
|
161
|
+
//startX = loops, endX = duration in seconds
|
162
|
+
//if startX equals 0, animation loops forever
|
163
|
+
|
164
|
+
var r = this.flicker_reels[id];
|
165
|
+
|
166
|
+
//create new reel based on custom attributes
|
167
|
+
var c = this.flicker_reel;
|
168
|
+
//copy from saved animation or newly given
|
169
|
+
c.loops = (isNaN(loops))? r.loops : loops;
|
170
|
+
c.duration = (isNaN(duration))? r.duration : duration;
|
171
|
+
c.frames = (typeof frames == 'object')? frames : r.frames;
|
172
|
+
|
173
|
+
//setup counter for loops
|
174
|
+
this.flicker_loops = c.loops;
|
175
|
+
|
176
|
+
this.stepProgress = 0;
|
177
|
+
this.stepSize = c.duration / c.frames.length;
|
178
|
+
|
179
|
+
//save old frames for upon completion
|
180
|
+
|
181
|
+
this.flicker_oldX = this.frameX;
|
182
|
+
this.flicker_oldY = this.frameY;
|
183
|
+
|
184
|
+
this.flicker_frame = 0;
|
185
|
+
|
186
|
+
//update frame then run
|
187
|
+
this.flick(c.frames[this.flicker_frame++]);
|
188
|
+
|
189
|
+
if(!this.flickering()){
|
190
|
+
this.addSignal('update', this.flicker_update);
|
191
|
+
}
|
192
|
+
|
193
|
+
this.flicker_flickering = id;
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
return this;
|
198
|
+
},
|
199
|
+
|
200
|
+
/*
|
201
|
+
Check if flicker is running / compare current.
|
202
|
+
|
203
|
+
this.flickering(); // false
|
204
|
+
this.flickering('idle'); // false
|
205
|
+
*/
|
206
|
+
flickering:function(id){
|
207
|
+
if(id){
|
208
|
+
return this.flicker_flickering == id;
|
209
|
+
}
|
210
|
+
|
211
|
+
return this.flicker_flickering != '';
|
212
|
+
}
|
213
|
+
|
214
|
+
});
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
|
4
|
+
re.e('timestep')
|
5
|
+
.timestep(progress, function(){
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
});
|
10
|
+
*/
|
11
|
+
|
12
|
+
re.c('timestep')
|
13
|
+
.inherit({
|
14
|
+
|
15
|
+
stepProgress:0,
|
16
|
+
stepSize:0.3
|
17
|
+
|
18
|
+
})
|
19
|
+
.extend({
|
20
|
+
|
21
|
+
timestep:function(progress, callback, context){
|
22
|
+
|
23
|
+
this.stepProgress += progress;
|
24
|
+
|
25
|
+
while(this.stepProgress >= this.stepSize){
|
26
|
+
|
27
|
+
callback.call((context)?context:this);
|
28
|
+
|
29
|
+
this.stepProgress -= this.stepSize;
|
30
|
+
}
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
})
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/*
|
2
|
+
The storage component contains methods for storing locally or session values.
|
3
|
+
This utilizes the new HTML5 localstorage and sessionstorage.
|
4
|
+
|
5
|
+
//create new local storage
|
6
|
+
re.e('storage:local');
|
7
|
+
|
8
|
+
//create new session storage
|
9
|
+
re.e('storage:session');
|
10
|
+
|
11
|
+
*/
|
12
|
+
re.c('storage')
|
13
|
+
.init(function(c, type){
|
14
|
+
this.storage = (type == 'session')? sessionStorage : localStorage;
|
15
|
+
})
|
16
|
+
.extend({
|
17
|
+
|
18
|
+
length:function(){
|
19
|
+
return this.storage.length;
|
20
|
+
},
|
21
|
+
|
22
|
+
key:function(index){
|
23
|
+
return this.storage.key(index);
|
24
|
+
},
|
25
|
+
|
26
|
+
getItem:function(key){
|
27
|
+
return this.storage.getItem(key);
|
28
|
+
},
|
29
|
+
|
30
|
+
getJson:function(key){
|
31
|
+
return JSON.parse(this.getItem(key));
|
32
|
+
},
|
33
|
+
|
34
|
+
setItem:function(key, data){
|
35
|
+
|
36
|
+
if(typeof data != 'number' || typeof data != 'string'){
|
37
|
+
data = JSON.stringify(data);
|
38
|
+
}
|
39
|
+
|
40
|
+
this.storage.setItem(key, data);
|
41
|
+
|
42
|
+
return this;
|
43
|
+
},
|
44
|
+
|
45
|
+
removeItem:function(key){
|
46
|
+
this.storage.removeItem(key);
|
47
|
+
|
48
|
+
return this;
|
49
|
+
},
|
50
|
+
|
51
|
+
clear:function(){
|
52
|
+
this.storage.clear();
|
53
|
+
|
54
|
+
return this;
|
55
|
+
}
|
56
|
+
|
57
|
+
})
|
@@ -0,0 +1,25 @@
|
|
1
|
+
/*
|
2
|
+
The log component extends a cross browser console.log command.
|
3
|
+
|
4
|
+
//example usage
|
5
|
+
re.e('log')
|
6
|
+
.log('example log');
|
7
|
+
|
8
|
+
//global usage
|
9
|
+
re.log('example log');
|
10
|
+
|
11
|
+
*/
|
12
|
+
re.log = function(){
|
13
|
+
try{
|
14
|
+
console.log.apply(console, arguments);
|
15
|
+
} catch(e){
|
16
|
+
try {
|
17
|
+
opera.postError.apply(opera, arguments);
|
18
|
+
} catch(e){
|
19
|
+
alert(Array.prototype.join.call(arguments, " "));
|
20
|
+
}
|
21
|
+
}
|
22
|
+
};
|
23
|
+
|
24
|
+
re.c('log')
|
25
|
+
.extend('log', re.log);
|
@@ -0,0 +1,25 @@
|
|
1
|
+
/*
|
2
|
+
The polyfill component polyfills unsupported HTML5 functions when possible.
|
3
|
+
*/
|
4
|
+
re.c('polyfill')
|
5
|
+
.extend({
|
6
|
+
|
7
|
+
requestAnimationFrame:function(callback, canvas){
|
8
|
+
return requestAnimFrame(callback, canvas);
|
9
|
+
}
|
10
|
+
|
11
|
+
})
|
12
|
+
.run(function(){
|
13
|
+
|
14
|
+
//setup requestanimationframe on support
|
15
|
+
window.requestAnimFrame =
|
16
|
+
window.requestAnimationFrame ||
|
17
|
+
window.webkitRequestAnimationFrame ||
|
18
|
+
window.mozRequestAnimationFrame ||
|
19
|
+
window.oRequestAnimationFrame ||
|
20
|
+
window.msRequestAnimationFrame ||
|
21
|
+
function(callback){
|
22
|
+
window.setTimeout(callback, 1000 / 60);
|
23
|
+
};
|
24
|
+
|
25
|
+
});
|
@@ -0,0 +1,38 @@
|
|
1
|
+
/*
|
2
|
+
The random component implements two helper methods for calculating random numbers.
|
3
|
+
|
4
|
+
r = re.e('random');
|
5
|
+
|
6
|
+
r.random() // 0 - 1
|
7
|
+
r.random(10) // 0 - 9
|
8
|
+
r.random(10, 30) // 10 - 30
|
9
|
+
|
10
|
+
randomInt rounds numbers to whole
|
11
|
+
*/
|
12
|
+
re.c('random')
|
13
|
+
.extend({
|
14
|
+
|
15
|
+
random:function(max, min){
|
16
|
+
switch(arguments.length){
|
17
|
+
case 0:
|
18
|
+
return Math.random();
|
19
|
+
case 1:
|
20
|
+
return Math.random() * max;
|
21
|
+
case 2:
|
22
|
+
return Math.random() * (max - min + 1) + min;
|
23
|
+
}
|
24
|
+
},
|
25
|
+
|
26
|
+
randomInt:function(max, min){
|
27
|
+
return Math.floor(this.random.apply(this, arguments));
|
28
|
+
}
|
29
|
+
|
30
|
+
})
|
31
|
+
.run(function(){
|
32
|
+
var b = re.e('random');
|
33
|
+
|
34
|
+
re.random = b.random;
|
35
|
+
re.randomInt = b.randomInt;
|
36
|
+
|
37
|
+
b.dispose();
|
38
|
+
});
|
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
/*
|
3
|
+
Goes to an other scene in the game. This calls the scene method with a possible object argument.
|
4
|
+
|
5
|
+
Scenes are a helpful way to organize stages of a game.
|
6
|
+
|
7
|
+
//create scene
|
8
|
+
re.scene('game')
|
9
|
+
.enter(function(data){
|
10
|
+
|
11
|
+
//remove all 2d elements
|
12
|
+
re('2d').dispose();
|
13
|
+
|
14
|
+
loadLevel(data.level);
|
15
|
+
|
16
|
+
});
|
17
|
+
|
18
|
+
//go to scene
|
19
|
+
re.scene('game', {tiles:[]} );
|
20
|
+
|
21
|
+
//delete a scene
|
22
|
+
re.scene('-home');
|
23
|
+
|
24
|
+
//combine delete home goto title sceen
|
25
|
+
re.scene('-home title');
|
26
|
+
*/
|
27
|
+
re.scene = function(title){
|
28
|
+
var s = re.c('scene');
|
29
|
+
|
30
|
+
//delete scene
|
31
|
+
if(title.charAt(0) == '-'){
|
32
|
+
|
33
|
+
delete s._scenes[title.substr(1)];
|
34
|
+
|
35
|
+
return s;
|
36
|
+
|
37
|
+
} else if(s._scenes[title]){
|
38
|
+
//go to scene
|
39
|
+
|
40
|
+
var current = arguments.callee.current;
|
41
|
+
|
42
|
+
//call exit
|
43
|
+
var t = s._scenes[current];
|
44
|
+
if(t && typeof t.scene_exit == 'function'){
|
45
|
+
t.scene_exit.call(t, title);
|
46
|
+
}
|
47
|
+
|
48
|
+
arguments.callee.current = title;
|
49
|
+
s.curent = title;
|
50
|
+
|
51
|
+
t = s._scenes[title];
|
52
|
+
|
53
|
+
if(typeof t.scene_enter == 'function'){
|
54
|
+
t.scene_enter.apply(t, Array.prototype.slice.call(arguments, 1));
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
} else {
|
59
|
+
|
60
|
+
//add scene
|
61
|
+
re.e('scene:'+title);
|
62
|
+
}
|
63
|
+
|
64
|
+
return s._scenes[title];
|
65
|
+
};
|
66
|
+
|
67
|
+
re.c('scene')
|
68
|
+
.global({
|
69
|
+
|
70
|
+
_scenes:{}
|
71
|
+
|
72
|
+
})
|
73
|
+
.init(function(c, title){
|
74
|
+
|
75
|
+
c._scenes[title] = this;
|
76
|
+
this.sceneName = title;
|
77
|
+
|
78
|
+
})
|
79
|
+
.dispose(function(c){
|
80
|
+
|
81
|
+
delete c._scenes[this.sceneName];
|
82
|
+
|
83
|
+
})
|
84
|
+
.extend({
|
85
|
+
|
86
|
+
enter:function(m){
|
87
|
+
this.scene_enter = m;
|
88
|
+
|
89
|
+
return this;
|
90
|
+
},
|
91
|
+
|
92
|
+
exit:function(m){
|
93
|
+
this.scene_exit = m;
|
94
|
+
|
95
|
+
return this;
|
96
|
+
},
|
97
|
+
|
98
|
+
scene:function(){
|
99
|
+
return re.scene.apply(this, arguments);
|
100
|
+
}
|
101
|
+
});
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/*
|
2
|
+
The sheet component converts a each frame of a sprite sheet into their own components.
|
3
|
+
*/
|
4
|
+
re.c('sheet')
|
5
|
+
.global({
|
6
|
+
|
7
|
+
sheet:function(map, padX, padY, sizeX, sizeY){
|
8
|
+
|
9
|
+
var frameWidth = sizeX || re.tile.sizeX;
|
10
|
+
var frameHeight = sizeY || re.tile.sizeY;
|
11
|
+
|
12
|
+
if(padX){
|
13
|
+
frameWidth += padX;
|
14
|
+
}
|
15
|
+
|
16
|
+
if(padY){
|
17
|
+
frameHeight += padY;
|
18
|
+
}
|
19
|
+
|
20
|
+
//create new sprites for sheet
|
21
|
+
|
22
|
+
//save frame positions from map
|
23
|
+
var x;
|
24
|
+
var y;
|
25
|
+
|
26
|
+
for(var p in map){
|
27
|
+
x = map[p][0] || 0;
|
28
|
+
y = map[p][1] || 0;
|
29
|
+
|
30
|
+
re.c(p)
|
31
|
+
.require('sprite')
|
32
|
+
.extend({
|
33
|
+
frame:{x:x, y:y},
|
34
|
+
size:{x:frameWidth, y:frameHeight},
|
35
|
+
bitmap:this.bitmap
|
36
|
+
});
|
37
|
+
|
38
|
+
}
|
39
|
+
|
40
|
+
return this;
|
41
|
+
}
|
42
|
+
|
43
|
+
})
|
44
|
+
.require('tile')
|
45
|
+
.extend({
|
46
|
+
|
47
|
+
sheet:re.sheet
|
48
|
+
|
49
|
+
});
|
50
|
+
|
51
|
+
re.sheet = re.c('sheet').sheet;
|