entityjs 0.4.0 → 0.4.1

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.
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.