entityjs 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/entityjs.gemspec +1 -1
  2. data/lib/entityjs/version.rb +1 -1
  3. data/public/qunit/qunit.entity.js +0 -16
  4. data/spec/javascripts/src/core/entity_spec.js +15 -5
  5. data/spec/javascripts/src/display/animate_spec.js +13 -0
  6. data/spec/javascripts/src/pattern/flicker_spec.js +6 -11
  7. data/spec/support/mygame.rb +5 -0
  8. data/src/core/entity.js +12 -5
  9. data/src/display/align.js +8 -6
  10. data/src/display/animate.js +50 -0
  11. data/src/display/draw.js +2 -2
  12. data/src/display/image.js +1 -1
  13. data/src/display/imgtext.js +1 -1
  14. data/src/display/sprite.js +0 -5
  15. data/src/display/text.js +1 -1
  16. data/src/pattern/flicker.js +38 -38
  17. data/templates/animation/assets/images/hero.png +0 -0
  18. data/templates/animation/scripts/init.js +7 -0
  19. data/templates/animation/scripts/scenes/home.js +41 -0
  20. data/templates/animation/scripts/scenes/load.js +11 -0
  21. data/templates/animation/tests/init_test.js +4 -0
  22. data/templates/animation/tests/scenes/home_test.js +15 -0
  23. data/templates/animation/tests/scenes/load_test.js +18 -0
  24. data/templates/circle/scripts/scenes/home.js +0 -28
  25. data/templates/isometric/scripts/displays/cursor.js +3 -2
  26. data/templates/isometric/scripts/levels/level.js +6 -4
  27. data/templates/platform/scripts/displays/hero.js +11 -11
  28. data/templates/platform/scripts/items/coin.js +8 -3
  29. data/templates/platform/scripts/items/item.js +7 -4
  30. data/templates/platform/scripts/items/spring.js +5 -3
  31. data/templates/platform/tests/displays/hero_test.js +7 -6
  32. data/templates/platform/tests/factories.js +6 -1
  33. data/templates/platform/tests/items/coin_test.js +1 -1
  34. data/templates/platform/tests/items/spring_test.js +0 -6
  35. data/templates/pong/scripts/controls/hitmap.js +5 -5
  36. data/templates/pong/tests/controls/player_test.js +6 -1
  37. data/templates/tiltmaze/scripts/displays/ball.js +1 -1
  38. data/templates/tiltmaze/scripts/structs/level.js +3 -3
  39. data/templates/tiltmaze/tests/displays/ball_test.js +1 -1
  40. data/templates/tiltmaze/tests/factories.js +6 -0
  41. metadata +62 -18
data/entityjs.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "rspec"
25
25
  s.add_development_dependency "jasmine"
26
26
 
27
- s.add_dependency "sinatra"
27
+ s.add_dependency "sinatra", ">= 1.3.0"
28
28
  s.add_dependency "coffee-script"
29
29
  s.add_dependency 'uglifier'
30
30
  s.add_dependency 'json'
@@ -1,3 +1,3 @@
1
1
  module Entityjs
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -101,22 +101,6 @@ function pixelEqual(x, y, r, g, b, a, message){
101
101
  QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
102
102
  }
103
103
 
104
- /*
105
- Expects the given entity to have the given flicker present
106
-
107
- var e = re.e();
108
-
109
- expectFlicker(e, 'run'); //false
110
-
111
- e.comps('flicker').addFlicker('run', 123, 21, [2]);
112
-
113
- expectFlicker(e, 'run') //true
114
-
115
- */
116
- function expectFlicker(ent, flick){
117
- ok(ent.flicker_reels[flick] != null, "Expected entity to have flicker "+flick);
118
- }
119
-
120
104
  /*
121
105
  Expects an entity or component to have a current event attached.
122
106
 
@@ -20,6 +20,16 @@ describe('entity', function(){
20
20
  eq(re('dfggggg').length, 1)
21
21
  })
22
22
 
23
+ it('should get', function(){
24
+ e.blah = 10;
25
+ e.bla = function(){
26
+ return 10;
27
+ };
28
+
29
+ eq(e.get('blah'), 10);
30
+ eq(e.get('bla'), 10);
31
+ });
32
+
23
33
  it('comp', function(){
24
34
  e.comp('qwdqwd wer')
25
35
 
@@ -175,14 +185,14 @@ describe('entity', function(){
175
185
  is(re.e().clone())
176
186
  })
177
187
 
178
- it('parent', function(){
188
+ it('super', function(){
179
189
  c.defines('d', function(v){return v; })
180
190
  .defaults('y', function(v){return v;})
181
191
 
182
- eq(e.parent(c.name, 'd', 100), 100)
183
- eq(e.parent(c.name, 'y', 'bob'), 'bob')
192
+ eq(e._super(c.name, 'd', 100), 100)
193
+ eq(e._super(c.name, 'y', 'bob'), 'bob')
184
194
  e.comp(c.name)
185
- ok(e.parent('','has', c.name))
195
+ ok(e._super('','has', c.name))
186
196
  })
187
197
 
188
198
  it('attr overwrite method', function(){
@@ -226,7 +236,7 @@ describe('entity', function(){
226
236
  it('should throw error on undefined parent method', function(){
227
237
  var called = false;
228
238
  try {
229
- e.parent('image', 'asdfsdf')
239
+ e._super('image', 'asdfsdf')
230
240
  } catch(e){
231
241
  called = true;
232
242
  }
@@ -0,0 +1,13 @@
1
+ describe('display/animate', function(){
2
+
3
+ var e;
4
+
5
+ beforeEach(function(){
6
+ e = re.e('animate');
7
+ });
8
+
9
+ it('should animate', function(){
10
+ is(e.animate());
11
+ });
12
+
13
+ });
@@ -49,11 +49,6 @@ describe('flicker', function(){
49
49
  //manually call update
50
50
 
51
51
  for(var i=0; i<60 * time; i++){
52
- if(i == 37){
53
- eq(e.health, 5);
54
- } else if(i==37+37){
55
- eq(e.health, 10);
56
- }
57
52
  e.flicker_update(re.sys.stepSize);
58
53
  }
59
54
 
@@ -67,13 +62,13 @@ describe('flicker', function(){
67
62
 
68
63
  e.flicker(1, [5]);
69
64
 
70
- eq(e.health, 5)
71
-
72
- for(var i=60;i--;){
73
- e.flicker_update(re.sys.stepSize);
74
- eq(e.health, 5);
65
+
66
+ for(var i=0; i<3; i++){
67
+ e.flicker_update(e.stepSize * 0.5);
68
+
75
69
  }
76
-
70
+ eq(e.health, 5);
71
+
77
72
  })
78
73
 
79
74
  });
@@ -1,6 +1,11 @@
1
1
 
2
2
  def setup_mygame
3
3
  root = File.dirname(__FILE__)+'/../..'
4
+
5
+ if !File.directory? root+'/mygame'
6
+ Dir.mkdir(root+'/mygame')
7
+ end
8
+
4
9
  Dir.chdir(root+'/mygame')
5
10
 
6
11
  Entityjs::Dirc.game?
data/src/core/entity.js CHANGED
@@ -97,7 +97,7 @@
97
97
  com = pieces[0];
98
98
  }
99
99
 
100
- if(this.has(com)){
100
+ if(com && this.has(com)){
101
101
 
102
102
  var c = re._c[com];
103
103
  //only remove if it exists
@@ -233,10 +233,10 @@
233
233
  Use '' to call super of entity
234
234
 
235
235
  re.e('draw')
236
- .parent('draw', 'screenX')()
236
+ ._super('draw', 'screenX')()
237
237
 
238
238
  */
239
- p.parent = function(comp, method){
239
+ p._super = function(comp, method){
240
240
 
241
241
  var a = Array.prototype.slice.call(arguments, 2);
242
242
 
@@ -437,7 +437,9 @@
437
437
  return this;
438
438
  };
439
439
 
440
- p.attr = function(obj, value){
440
+ //setters / getters
441
+
442
+ p.attr = p.set = function(obj, value){
441
443
 
442
444
  if(re.is(obj, 'object')){
443
445
 
@@ -461,7 +463,12 @@
461
463
 
462
464
  return this;
463
465
  };
464
-
466
+
467
+ p.get = function(v){
468
+ var l = this[v];
469
+ return (re.is(l,'function'))? l() : l;
470
+ };
471
+
465
472
  p.def = function(obj, value){
466
473
 
467
474
  if(re.is(obj , 'object')){
data/src/display/align.js CHANGED
@@ -15,38 +15,40 @@ re.c('align')
15
15
 
16
16
  alignHor:function(o){
17
17
  o = o || 0;
18
- this.posX = re.sys.sizeX * 0.5 - (this.sizeX - this.regX)*0.5 + o | 0;
18
+ this.set('posX', re.sys.sizeX * 0.5 - (this.get('sizeX') - this.get('regX'))*0.5 + o | 0);
19
19
 
20
20
  return this;
21
21
  },
22
22
 
23
23
  alignVer:function(o){
24
24
  o = o || 0;
25
- this.posY = re.sys.sizeY * 0.5 - (this.sizeY - this.regY)*0.5 + o | 0;
25
+ this.set('posY', re.sys.sizeY * 0.5 - (this.get('sizeY') - this.get('regY'))*0.5 + o | 0);
26
26
  return this;
27
27
  },
28
28
 
29
29
  alignRight:function(x){
30
30
  x = x || 0;
31
- this.posX = re.sys.sizeX - (this.sizeX - this.regX) + x | 0;
31
+ this.set('posX', re.sys.sizeX - (this.get('sizeX') - this.get('regX')) + x | 0);
32
32
  return this;
33
33
  },
34
34
 
35
35
  alignLeft:function(x){
36
36
  x = x || 0;
37
- this.posX = x + this.sizeX - (this.sizeX - this.regX) | 0;
37
+ var s = this.get('sizeX');
38
+ this.set('posX', x + s - (s - this.get('regX')) | 0);
38
39
  return this;
39
40
  },
40
41
 
41
42
  alignTop:function(y){
42
43
  y = y || 0;
43
- this.posY = y + this.sizeY - (this.sizeY - this.regY) | 0;
44
+ var s = this.get('sizeY');
45
+ this.set('posY', y + s - (s - this.get('regY')) | 0);
44
46
  return this;
45
47
  },
46
48
 
47
49
  alignBottom:function(y){
48
50
  y = y || 0;
49
- this.posY = re.sys.sizeY - (this.sizeY - this.regY) + y | 0;
51
+ this.set('posY', re.sys.sizeY - (this.get('sizeY') - this.get('regY')) + y | 0);
50
52
  return this;
51
53
  }
52
54
 
@@ -0,0 +1,50 @@
1
+ /*
2
+ The animate comp defines a simple interface for animating sprites.
3
+
4
+ //create entity with sprite sheet and animate comp
5
+ var apple = re.e('apple.png animate sprite');
6
+
7
+ //setup animations to play
8
+ apple.anis = {
9
+ //time, frames, loops
10
+ explode:[1000, [0, 1, 2], 1]
11
+ //seconds, frames, loops defaults to once
12
+ trans:[0.5, [3, 4, 5]]
13
+ };
14
+
15
+ //play animation
16
+ apple.animate('explode');
17
+
18
+ //stop animation
19
+ apple.animate();
20
+
21
+ //check animation playing
22
+ apple.flickering(); //this comes from flicker comp
23
+
24
+ */
25
+ re.c('animate')
26
+ .requires('flicker')
27
+ .defines({
28
+
29
+ animate:function(name){
30
+ //ignore if calling the same frame
31
+ if(this.flickering() != name){
32
+
33
+ var a = this.anis[name] || [];
34
+ //flicker interface
35
+ //(duration:int, frames:array, loops:int, id:string)
36
+ this.flicker(a[0], a[1], a[2], name);
37
+
38
+ //only run if a is defined
39
+ if(a.length)
40
+ this.flicker_run(); //run first frame
41
+ }
42
+ return this;
43
+ },
44
+
45
+ //implement for flicker
46
+ flick:function(c){
47
+ this.frame(c);
48
+ }
49
+
50
+ });
data/src/display/draw.js CHANGED
@@ -144,8 +144,8 @@ re.c('draw')
144
144
 
145
145
  c.save();
146
146
 
147
- if(this.alpha != 1)
148
- c.staticsAlpha = this.alpha;
147
+ if(this.alpha-1)
148
+ c.globalAlpha = this.alpha;
149
149
 
150
150
  if(this.screenable)
151
151
  c.translate(this.screenX(), this.screenY());
data/src/display/image.js CHANGED
@@ -17,7 +17,7 @@ re.c('image')
17
17
  },
18
18
 
19
19
  visible:function(){
20
- return this._image && this.parent('draw', 'visible');
20
+ return this._image && this._super('draw', 'visible');
21
21
  },
22
22
 
23
23
  draw:function(c){
@@ -35,7 +35,7 @@ re.c('imgtext')
35
35
  .defines({
36
36
 
37
37
  visible:function(){
38
- return this._text && this._image && this.parent('draw', 'visible');
38
+ return this._text && this._image && this._super('draw', 'visible');
39
39
  },
40
40
 
41
41
  draw:function(c){
@@ -44,11 +44,6 @@ re.c('sprite')
44
44
  c.drawImage(this._image, this.frameX * this.sizeX, this.frameY * this.sizeY, this.sizeX, this.sizeY, -this.regX, -this.regY, this.sizeX, this.sizeY);
45
45
 
46
46
  return this;
47
- },
48
-
49
- //implement for flicker
50
- flick:function(c){
51
- this.frame(c);
52
47
  }
53
48
 
54
49
  });
data/src/display/text.js CHANGED
@@ -23,7 +23,7 @@ re.c('text')
23
23
  .defines({
24
24
 
25
25
  visible:function(){
26
- return this._text && this.parent('draw', 'visible');
26
+ return this._text && this._super('draw', 'visible');
27
27
  },
28
28
 
29
29
  text:function(t){
@@ -50,43 +50,43 @@ re.c('flicker')
50
50
 
51
51
  change:function(){
52
52
 
53
- //check if over
54
- if(this.flicker_frame == this.flicker_frames.length){
55
-
56
- if(this.flicker_loops == -1 || --this.flicker_loops >= 1){
57
- //loop again
58
-
59
- this.flicker_frame = 0;
60
-
61
- } else {
62
- //done flickering
63
-
64
- this.flicker_stop();
65
- return;
66
- }
67
- }
53
+ //check if over
54
+ if(this.flicker_frame == this.flicker_frames.length){
55
+
56
+ if(this.flicker_loops == -1 || --this.flicker_loops >= 1){
57
+ //loop again
58
+
59
+ this.flicker_frame = 0;
60
+
61
+ } else {
62
+ //done flickering
68
63
 
69
- this.flicker_run();
64
+ this.flicker_stop();
65
+ return;
66
+ }
67
+ }
68
+
69
+ this.flicker_run();
70
70
  },
71
71
 
72
72
  run:function(){
73
73
 
74
- var f = this.flicker_frame,
75
- fs = this.flicker_frames,
76
- l = this.flicker_loops,
77
- val = fs[f];
74
+ var f = this.flicker_frame, //frame number
75
+ fs = this.flicker_frames, //array of frames
76
+ l = this.flicker_loops, //loops left
77
+ val = fs[f]; //flick value
78
78
 
79
79
  var quit = this.flick(val, f, fs, l);
80
80
 
81
81
  this.trigger('flicker:update', val, f, fs, l);
82
82
 
83
- //flick
84
- if(quit === false){
85
- //stop
86
- this.flicker();
87
- }
83
+ //flick
84
+ if(quit === false){
85
+ //stop
86
+ this.flicker();
87
+ }
88
88
 
89
- this.flicker_frame++;
89
+ this.flicker_frame++;
90
90
  },
91
91
 
92
92
  update:function(t){
@@ -107,20 +107,20 @@ re.c('flicker')
107
107
  */
108
108
  flicker:function(duration, frames, loops, id){
109
109
 
110
- //stop
111
- if(!re.is(loops) && this.flickering()){
110
+ //stop
111
+ if(!re.is(duration) && this.flickering()){
112
112
  //stop flickering
113
113
  return this.flicker_stop();
114
114
  }
115
115
 
116
- //convert to seconds
117
- if(duration >= 100){
118
- duration /= 1000;
119
- }
120
-
116
+ //convert to seconds
117
+ if(duration >= 100){
118
+ duration /= 1000;
119
+ }
120
+
121
121
  this.flicker_duration = duration || 1;
122
122
 
123
- frames = (re.is(frames,'array')) ? frames : [frames];
123
+ frames = (re.is(frames,'array')) ? frames : [frames];
124
124
 
125
125
  //setup counter for loops
126
126
  this.flicker_loops = loops || 1;
@@ -128,20 +128,20 @@ re.c('flicker')
128
128
  this.stepProgress = 0;
129
129
  this.stepSize = (duration / frames.length) / re.sys.second;
130
130
 
131
- this.flicker_frames = frames;
131
+ this.flicker_frames = frames;
132
132
  this.flicker_frame = 0;
133
133
 
134
134
  if(!this.flickering()){
135
135
  this.on('update', this.flicker_update);
136
136
  }
137
137
 
138
- //sets flicker status
138
+ //sets flicker status
139
139
  this.flicker_id = id || true;
140
140
 
141
141
  this.trigger('flicker:start');
142
-
142
+
143
143
  //update frame then run
144
- this.flicker_run();
144
+ //this.flicker_run();
145
145
 
146
146
  return this;
147
147
  },
@@ -0,0 +1,7 @@
1
+ re.ready(function(){
2
+
3
+ re.sys.init(re.canvas).start();
4
+
5
+ re.scene('load').enter();
6
+
7
+ });
@@ -0,0 +1,41 @@
1
+ re.scene('home')
2
+ .enter(function(){
3
+
4
+ re.e('sprite animate hero.png align keyboard')
5
+ .attr({
6
+
7
+ //sets frame size
8
+ sizeX:25,
9
+ sizeY:25,
10
+
11
+ //animation object for animate comp
12
+ anis:{
13
+ //first arg is time in milliseconds, array contains the frame numbers to flick through.
14
+ //time per frame = time / frames.length
15
+ random:[300, [0,1,2,3,4,0]]
16
+ },
17
+
18
+ //centers image on screen
19
+ alignHor:0,
20
+ alignVer:0
21
+
22
+ })
23
+ //listens for keyup event
24
+ .on('keyup:enter', function(){
25
+ //play random animation
26
+ this.animate('random');
27
+
28
+ console.log('Currently animating:',this.flickering());
29
+ })
30
+ .on('keyup:q', function(){
31
+ //ends animation
32
+ this.animate();
33
+ });
34
+
35
+ //add help text
36
+ re.e('text align')
37
+ .text('Press enter to animate')
38
+ .alignTop(5)
39
+ .alignLeft(5);
40
+
41
+ });
@@ -0,0 +1,11 @@
1
+ re.scene('load')
2
+ .enter(function(){
3
+
4
+ re.load(re.assets)
5
+ .complete(function(){
6
+
7
+ re.scene('home').enter();
8
+
9
+ });
10
+
11
+ });
@@ -0,0 +1,4 @@
1
+ module('init');
2
+
3
+ //in tests re.ready is NOT called.
4
+ //make sure re.sys.init() is called or else input will not function!
@@ -0,0 +1,15 @@
1
+ module('home');
2
+
3
+ test('enter home', function(){
4
+
5
+ re.scene('home').enter();
6
+
7
+ var ref;
8
+
9
+ //check if entity exists
10
+ is(ref = re('animate').first());
11
+
12
+ //expects entity to have event listeners
13
+ expectEvent(ref, 'keyup:enter');
14
+ expectEvent(ref, 'keyup:q');
15
+ });
@@ -0,0 +1,18 @@
1
+ module('load');
2
+
3
+ test('load assets', function(){
4
+
5
+ //replace re.scene('home').enter with start()
6
+ stub(re.scene('home'), 'enter', function(){ start(); });
7
+
8
+ //go into the load scene
9
+ re.scene('load').enter();
10
+
11
+ //it should be loading the assets
12
+ //stop until it finishes and enters the new home scene
13
+ //the home scene should then call start()
14
+ stop();
15
+
16
+ expect(0);
17
+
18
+ });
@@ -31,32 +31,4 @@ re.scene('home')
31
31
  .alignTop(5)
32
32
  .alignLeft(5);
33
33
 
34
- //stop the browser from moving around
35
- re.preventDefault('left right up down');
36
-
37
- //create new circle on canvas
38
- re.e('circle align update')
39
- .attr({
40
- radius:10,
41
- speed:15,
42
- color:'#ff0000'
43
- })
44
- //from align component
45
- .align()
46
- .on('update', function(){
47
-
48
- //move on keypressed
49
- if(re.pressed('a', 'left')) this.posX -= this.speed;
50
- if(re.pressed('d', 'right')) this.posX += this.speed;
51
-
52
- if(re.pressed('w', 'up')) this.posY -= this.speed;
53
- if(re.pressed('s', 'down')) this.posY += this.speed;
54
-
55
- });
56
-
57
- //add help text
58
- re.e('text align')
59
- .text('Use WASD or arrow keys to move the circle')
60
- .alignTop(5)
61
- .alignLeft(5);
62
34
  });
@@ -14,7 +14,8 @@ re.c('cursor')
14
14
 
15
15
  box.place(iso.isoX, iso.isoY);
16
16
 
17
- re.draw.sort();
17
+ //get default drawlist
18
+ re.drawlist().sort();
18
19
  },
19
20
 
20
21
  move:function(x, y){
@@ -22,7 +23,7 @@ re.c('cursor')
22
23
 
23
24
  this.place(iso.isoX, iso.isoY);
24
25
 
25
- re.draw.sort();
26
+ re.drawlist().sort();
26
27
  }
27
28
 
28
29
  })
@@ -9,8 +9,10 @@ re.c('level')
9
9
  re.iso.sizeZ = 25;
10
10
 
11
11
  //setups layers for objects on the same tile
12
- re.draw.cursor = 1;
13
- re.draw.box = 2;
12
+ re.layer = {
13
+ cursor:1,
14
+ box:2
15
+ };
14
16
 
15
17
  for(var y=0; y<this.map.length; y++){
16
18
  for(var x=0; x<this.map[0].length; x++){
@@ -32,13 +34,13 @@ re.c('level')
32
34
  }
33
35
 
34
36
  this.cursor = re.e('cursor')
35
- .attr('layer', re.draw.cursor);
37
+ .attr('layer', re.layer.cursor);
36
38
 
37
39
  this.box = re.e('isoimage')
38
40
  .attr({
39
41
  id:'box',
40
42
  frameX:3,
41
- layer:re.draw.box,
43
+ layer:re.layer.box,
42
44
  place:[0,0]
43
45
  });
44
46
 
@@ -1,5 +1,5 @@
1
1
  re.c('hero')
2
- .requires('hero.png tsprite update force flicker body')
2
+ .requires('hero.png tsprite update force animate body')
3
3
  .defines({
4
4
 
5
5
  speed:40 * re.sys.stepSize,
@@ -28,18 +28,18 @@ re.c('hero')
28
28
  this.velX -= this.speed;
29
29
  this.scaleX = -1;
30
30
 
31
- if(!this.jump) this.flicker('run');
31
+ if(!this.jump) this.animate('run');
32
32
  }
33
33
 
34
34
  if(re.pressed('d')){
35
35
  this.velX += this.speed;
36
36
  this.scaleX = 1;
37
37
 
38
- if(!this.jump) this.flicker('run');
38
+ if(!this.jump) this.animate('run');
39
39
  }
40
40
 
41
41
  //switch back to idle animation if stopped moving
42
- if(this.isIdle(0.3)) this.flicker('idle');
42
+ if(this.isIdle(0.3)) this.animate('idle');
43
43
 
44
44
  },
45
45
 
@@ -47,7 +47,7 @@ re.c('hero')
47
47
  this.jump = true;
48
48
  this.velY -= this.jumpSpeed;
49
49
 
50
- this.flicker('jump');
50
+ this.animate('jump');
51
51
  },
52
52
 
53
53
  jumpReset:function(x, y, tx, ty){
@@ -62,12 +62,12 @@ re.c('hero')
62
62
  .init(function(){
63
63
 
64
64
  //add animations
65
- this.addFlicker({
66
- idle:[-1, 600, [0, 1]],
67
- run:[-1, 800, [2, 3]],
68
- jump:[1, 500, [4, 5, 4]],
69
- ladder:[-1, 500, [6, 7]]
70
- });
65
+ this.anis = {
66
+ idle:[800, [0, 1], -1],
67
+ run:[800, [2, 3], 1],
68
+ jump:[500, [4, 5, 4], 1],
69
+ ladder:[500, [6, 7], -1]
70
+ };
71
71
 
72
72
  this.on({
73
73
  update:this.update,
@@ -1,5 +1,5 @@
1
1
  re.c('coin')
2
- .requires('item flicker')
2
+ .requires('item animate')
3
3
  .defines({
4
4
 
5
5
  touch:function(){
@@ -17,10 +17,15 @@ re.c('coin')
17
17
  //add comp for searchability
18
18
  this.comp('coin');
19
19
 
20
+ //create new sound effect
20
21
  this.sfx = re.e('sound coin.sfx');
21
22
 
22
- this.addFlicker('glow', -1, 1800, '14 15 15');
23
- this.flicker('glow');
23
+ //setup animations to play
24
+ this.anis = {
25
+ glow:[1800, [14, 15, 15], -1]
26
+ };
27
+
28
+ this.animate('glow');
24
29
  })
25
30
  //accepted tile frames in items.png which will become coins
26
31
  .alias('t14')
@@ -1,11 +1,14 @@
1
1
  re.c('item')
2
- .requires('tsprite update hit items.png')
2
+ //order matters!
3
+ //items.png defines sizeX, sizeY
4
+ //tsprite overwrites the sizes
5
+ .requires('items.png tsprite update hit')
3
6
  .namespaces({
4
7
 
5
8
  update:function(t){
6
-
7
- if(this.hero.hitBody(this.posX, this.posY, this.sizeX, this.sizeY, 10, 0)){
8
- this.touching = true;
9
+
10
+ if(this.hero.hitBody(this.posX, this.posY, this.sizeX, this.sizeY, 10, 0)){
11
+ this.touching = true;
9
12
  this.touch(t);
10
13
 
11
14
  } else if(this.touching){
@@ -1,5 +1,5 @@
1
1
  re.c('spring')
2
- .requires('item flicker')
2
+ .requires('item animate')
3
3
  .defines({
4
4
 
5
5
  touch:function(){
@@ -7,14 +7,16 @@ re.c('spring')
7
7
 
8
8
  if(re.pressed('w')){
9
9
  this.hero.velY = -25;
10
- this.flicker('bounce');
10
+ this.animate('bounce');
11
11
  }
12
12
  }
13
13
 
14
14
  })
15
15
  .init(function(){
16
16
  //add animation, can also send a string instead of an array
17
- this.addFlicker('bounce', 1, 300, '13 12');
17
+ this.anis = {
18
+ bounce:[300, [13, 12], 1]
19
+ };
18
20
 
19
21
  this.frame(12);
20
22
 
@@ -1,11 +1,12 @@
1
1
  module('hero', lazy('hero'));
2
2
 
3
- test('has flicks', function(){
3
+ test('has animations', function(){
4
4
 
5
- expectFlicker(hero, 'idle');
6
- expectFlicker(hero, 'run');
7
- expectFlicker(hero, 'jump');
8
- expectFlicker(hero, 'ladder');
5
+ //these where manually put in
6
+ is(hero.anis.idle);
7
+ is(hero.anis.run);
8
+ is(hero.anis.jump);
9
+ is(hero.anis.ladder);
9
10
 
10
11
  });
11
12
 
@@ -15,7 +16,7 @@ test('has components', function(){
15
16
 
16
17
  test('flickers idle when not moving', function(){
17
18
 
18
- hero.flicker('run');
19
+ hero.animate('run');
19
20
 
20
21
  stub(hero, 'isIdle', true);
21
22
 
@@ -27,4 +27,9 @@ Create an entity from a factory..
27
27
 
28
28
  var hero = f('hero') //new entity
29
29
  hero.health = 100;
30
- */
30
+ */
31
+
32
+ //re.ready() is DISABLED during testing
33
+ addEventListener('load', function(){
34
+ re.sys.init(re.canvas).start();
35
+ });
@@ -4,7 +4,7 @@ test('valid', function(){
4
4
 
5
5
  expectEvent(coin, 'update');
6
6
 
7
- expectFlicker(coin, 'glow');
7
+ is(coin.anis.glow);
8
8
 
9
9
  });
10
10
 
@@ -1,11 +1,5 @@
1
1
  module('spring', lazy('spring'));
2
2
 
3
- test('flicker animation', function(){
4
-
5
- expectFlicker(spring, 'bounce');
6
-
7
- });
8
-
9
3
  test('bounce on touch and key press', function(){
10
4
  stub(re, 'pressed', function(key){
11
5
  //make sure w key is checked
@@ -28,17 +28,17 @@ re.c('hitmap')
28
28
  }
29
29
 
30
30
  //check hits on paddles
31
- re('paddle').each(function(){
31
+ re('paddle').each(function(i){
32
32
 
33
- if(this.hit(obj)){
33
+ if(i.hit(obj)){
34
34
  res.hitX = 1;
35
35
 
36
- var push = obj.hsizeX + this.hsizeX + 1;
36
+ var push = obj.hsizeX + i.hsizeX + 1;
37
37
 
38
- if(this.posX > obj.posX){
38
+ if(i.posX > obj.posX){
39
39
  push *= -1;
40
40
  }
41
- res.posX = this.posX + push;
41
+ res.posX = i.posX + push;
42
42
 
43
43
  }
44
44
 
@@ -4,6 +4,8 @@ test('paddle moves down on w press', function(){
4
4
 
5
5
  player.posY = 30;
6
6
 
7
+ stub(player, 'checkBounds');
8
+
7
9
  expectValueDown(player, 'posY');
8
10
 
9
11
  keypress('w', function(){
@@ -15,9 +17,12 @@ test('paddle moves down on w press', function(){
15
17
  test('paddle moves up on s press', function(){
16
18
 
17
19
  player.posY = 10;
18
-
20
+ console.log(player.posY)
19
21
  expectValueUp(player, 'posY');
20
22
 
23
+ //remove this
24
+ stub(player, 'checkBounds');
25
+
21
26
  keypress('s', function(){
22
27
  player.update();
23
28
  });
@@ -28,7 +28,7 @@ re.c('ball')
28
28
  var tileAfter = this.level.automap(tx+x, ty+y);
29
29
 
30
30
  if(tileAfter && !tile.checkWallInside(x, y) && !tileAfter.checkWall(x, y)){
31
-
31
+
32
32
  if(y){
33
33
  this.posY += this.speed * y;
34
34
  }
@@ -53,10 +53,10 @@ re.level = re.c('level')
53
53
 
54
54
  var ball = this;
55
55
 
56
- re('target').each(function(){
56
+ re('target').each(function(i){
57
57
 
58
- if(ball.tileX() == this.tileX() && this.tileY() == ball.tileY()){
59
- this.dispose();
58
+ if(ball.tileX() == i.tileX() && i.tileY() == ball.tileY()){
59
+ i.dispose();
60
60
  }
61
61
 
62
62
  });
@@ -10,7 +10,7 @@ test('move up correctly', function(){
10
10
  start();
11
11
  });
12
12
 
13
- ball.tileY(2);
13
+ ball.tileY(1);
14
14
 
15
15
  keypress('w', function(){
16
16
  ball.update();
@@ -35,4 +35,10 @@ factory('ball', function(){
35
35
  }
36
36
  };
37
37
 
38
+ });
39
+
40
+ //starts system from running
41
+ //re.ready is disabled in testing
42
+ addEventListener('load', function(){
43
+ re.sys.init(re.canvas).start();
38
44
  });
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entityjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-27 00:00:00.000000000 Z
12
+ date: 2012-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &17728680 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *17728680
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: jasmine
27
- requirement: &17727980 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,21 +37,31 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *17727980
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: sinatra
38
- requirement: &17727440 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
42
52
  - !ruby/object:Gem::Version
43
- version: '0'
53
+ version: 1.3.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *17727440
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: coffee-script
49
- requirement: &17726720 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *17726720
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: uglifier
60
- requirement: &17725900 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *17725900
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: json
71
- requirement: &17725400 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *17725400
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: cobravsmongoose
82
- requirement: &17724880 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :runtime
89
119
  prerelease: false
90
- version_requirements: *17724880
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: HTML5 Javascript game engine, quickly create robust, flexible and reusable
92
127
  games.
93
128
  email:
@@ -156,6 +191,7 @@ files:
156
191
  - spec/javascripts/src/cycle/update_spec.js
157
192
  - spec/javascripts/src/cycle/wait_spec.js
158
193
  - spec/javascripts/src/display/align_spec.js
194
+ - spec/javascripts/src/display/animate_spec.js
159
195
  - spec/javascripts/src/display/circle_spec.js
160
196
  - spec/javascripts/src/display/draw_spec.js
161
197
  - spec/javascripts/src/display/group_spec.js
@@ -227,6 +263,7 @@ files:
227
263
  - src/cycle/wait.js
228
264
  - src/cycle/worker.js
229
265
  - src/display/align.js
266
+ - src/display/animate.js
230
267
  - src/display/circle.js
231
268
  - src/display/draw.js
232
269
  - src/display/group.js
@@ -268,6 +305,13 @@ files:
268
305
  - src/util/scene.js
269
306
  - src/util/sheet.js
270
307
  - src/util/support.js
308
+ - templates/animation/assets/images/hero.png
309
+ - templates/animation/scripts/init.js
310
+ - templates/animation/scripts/scenes/home.js
311
+ - templates/animation/scripts/scenes/load.js
312
+ - templates/animation/tests/init_test.js
313
+ - templates/animation/tests/scenes/home_test.js
314
+ - templates/animation/tests/scenes/load_test.js
271
315
  - templates/arrow_keys/assets/images/arrow.png
272
316
  - templates/arrow_keys/config.yml
273
317
  - templates/arrow_keys/readme.txt
@@ -402,7 +446,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
402
446
  version: '0'
403
447
  requirements: []
404
448
  rubyforge_project: entityjs
405
- rubygems_version: 1.8.15
449
+ rubygems_version: 1.8.24
406
450
  signing_key:
407
451
  specification_version: 3
408
452
  summary: Create HTML5 javascript games in EntityJS.