entityjs 0.3.2 → 0.4.0

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 (66) hide show
  1. data/.gitignore +1 -1
  2. data/lib/entityjs/config.rb +4 -4
  3. data/lib/entityjs/dirc.rb +2 -2
  4. data/lib/entityjs/page.rb +7 -1
  5. data/lib/entityjs/version.rb +1 -1
  6. data/public/qunit/qunit.entity.js +27 -12
  7. data/spec/javascripts/src/core/comp_spec.js +11 -0
  8. data/spec/javascripts/src/core/entity_spec.js +88 -5
  9. data/spec/javascripts/src/core/query_spec.js +196 -15
  10. data/spec/javascripts/src/cycle/drawlist_spec.js +36 -0
  11. data/spec/javascripts/src/cycle/tween_spec.js +1 -1
  12. data/spec/javascripts/src/cycle/wait_spec.js +31 -0
  13. data/spec/javascripts/src/{cycle → display}/draw_spec.js +25 -9
  14. data/spec/javascripts/src/display/sprite_spec.js +18 -0
  15. data/spec/javascripts/src/display/text_spec.js +8 -0
  16. data/spec/javascripts/src/input/mouse_spec.js +24 -36
  17. data/spec/javascripts/src/math/bisect_spec.js +4 -4
  18. data/spec/javascripts/src/math/distance_spec.js +11 -0
  19. data/spec/javascripts/src/math/iso_spec.js +131 -0
  20. data/spec/javascripts/src/math/point_spec.js +3 -3
  21. data/spec/javascripts/src/{util → math}/random_spec.js +0 -0
  22. data/spec/javascripts/src/math/range_spec.js +9 -0
  23. data/spec/javascripts/src/math/tile_spec.js +22 -7
  24. data/spec/javascripts/src/pattern/automap_spec.js +2 -2
  25. data/spec/javascripts/src/pattern/flicker_spec.js +34 -22
  26. data/spec/javascripts/src/pattern/pathfind_spec.js +55 -0
  27. data/src/core/comp.js +16 -16
  28. data/src/core/entity.js +52 -51
  29. data/src/core/load.js +5 -5
  30. data/src/core/query.js +214 -74
  31. data/src/core/system.js +16 -6
  32. data/src/cycle/drawlist.js +79 -0
  33. data/src/cycle/tween.js +7 -20
  34. data/src/cycle/wait.js +10 -19
  35. data/src/{cycle → display}/draw.js +24 -34
  36. data/src/display/image.js +1 -1
  37. data/src/display/screen.js +3 -3
  38. data/src/display/sprite.js +3 -3
  39. data/src/display/text.js +3 -1
  40. data/src/input/mouse.js +35 -12
  41. data/src/math/bisect.js +11 -10
  42. data/src/math/distance.js +7 -0
  43. data/src/math/iso.js +147 -0
  44. data/src/math/point.js +1 -5
  45. data/src/math/random.js +21 -0
  46. data/src/math/range.js +14 -0
  47. data/src/math/tile.js +40 -27
  48. data/src/pattern/automap.js +12 -11
  49. data/src/pattern/flicker.js +87 -135
  50. data/src/pattern/pathfind.js +168 -0
  51. data/src/pattern/timestep.js +4 -1
  52. data/src/util/polyfill.js +1 -1
  53. data/templates/isometric/assets/images/isotiles.png +0 -0
  54. data/templates/isometric/config.yml +22 -0
  55. data/templates/isometric/readme.txt +79 -0
  56. data/templates/isometric/scripts/displays/cursor.js +34 -0
  57. data/templates/isometric/scripts/displays/isoimage.js +32 -0
  58. data/templates/isometric/scripts/init.js +7 -0
  59. data/templates/isometric/scripts/levels/level.js +55 -0
  60. data/templates/isometric/scripts/levels/level1.js +11 -0
  61. data/templates/isometric/scripts/scenes/home.js +10 -0
  62. data/templates/isometric/scripts/scenes/load.js +11 -0
  63. data/templates/isometric/tests/scenes/load_test.js +15 -0
  64. metadata +42 -21
  65. data/src/net/socket.js +0 -52
  66. data/src/util/random.js +0 -24
data/.gitignore CHANGED
@@ -6,4 +6,4 @@ pkg/*
6
6
  .redcar
7
7
  ._redcar
8
8
  mygame
9
- *.min.js
9
+ *.min.js
@@ -54,7 +54,7 @@ module Entityjs
54
54
  if @yml.nil?
55
55
  return 500
56
56
  end
57
- @yml['width']
57
+ @yml['width'] || 500
58
58
  end
59
59
 
60
60
  def canvas_border
@@ -62,14 +62,14 @@ module Entityjs
62
62
  return true
63
63
  end
64
64
 
65
- return @yml['canvas-border']
65
+ return @yml['canvas-border'] || true
66
66
  end
67
67
 
68
68
  def height
69
69
  if @yml.nil?
70
70
  return 400
71
71
  end
72
- @yml['height']
72
+ @yml['height'] || 400
73
73
  end
74
74
 
75
75
  def scripts_ignore
@@ -121,7 +121,7 @@ module Entityjs
121
121
  return 'game-canvas'
122
122
  end
123
123
 
124
- @yml['canvas-id']
124
+ @yml['canvas-id'] || 'game-canvas'
125
125
  end
126
126
 
127
127
  def license
data/lib/entityjs/dirc.rb CHANGED
@@ -7,8 +7,8 @@ module Entityjs
7
7
 
8
8
  def self.game?
9
9
 
10
- #check if config.yml exists
11
- if File.file? Config.file_name
10
+ #check if scripts dir exists
11
+ if File.directory? Config.scripts_folder
12
12
 
13
13
  if @game_root.nil?
14
14
  @game_root = Dir.pwd
data/lib/entityjs/page.rb CHANGED
@@ -39,7 +39,13 @@ module Entityjs
39
39
  protected
40
40
  #defines varaibles on the template htmls for view on webpage
41
41
  def self.set_vars(path, tests=false)
42
- contents = IO.read("#{Entityjs::root}/public/#{path}")
42
+ #search locally first
43
+ local = Dirc.game_root+'/'+path
44
+ if File.file? local
45
+ contents = IO.read(local);
46
+ else
47
+ contents = IO.read("#{Entityjs::root}/public/#{path}")
48
+ end
43
49
 
44
50
  #reload config for changes
45
51
  Config.instance.reload
@@ -1,3 +1,3 @@
1
1
  module Entityjs
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -21,10 +21,6 @@ Disable re.ready for testing
21
21
  */
22
22
  re.ready = function(){};
23
23
 
24
- window.addEventListener('load', function(){
25
- re.sys.init(re.canvas).start();
26
- }, true);
27
-
28
24
  /*
29
25
  Expects a trigger call from the given obj.
30
26
 
@@ -173,17 +169,36 @@ e.has('coin') //true
173
169
  var coin2 = f('coin');
174
170
  coin2.value //10
175
171
 
172
+ //create coin with custom factory
173
+ //still has other defines properties
174
+
175
+ var customCoin = f('coin', function(){
176
+ this.getValue = function(){
177
+ return this.value;
178
+ };
179
+ });
180
+
181
+ customCoin.value //10
182
+ customCoin.getValue(); //10
183
+
176
184
  */
177
185
  var _factories = {};
178
186
  function factory(comps, func){
179
- var e = re.e(comps);
180
-
181
- //don't enter in arrays, strings only
182
- if(func) _factories[comps] = func;
183
-
184
- if(_factories[comps]) _factories[comps].call(e);
185
-
186
- return e;
187
+ //define new factory
188
+ if(func && !_factories[comps]){
189
+ _factories[comps] = func;
190
+
191
+ } else {
192
+ //create
193
+ var e = re.e(comps);
194
+
195
+ //call defined factory
196
+ if(_factories[comps]) _factories[comps].call(e);
197
+
198
+ //call custom method
199
+ if(func) func.call(e);
200
+ return e;
201
+ }
187
202
  }
188
203
  var f = factory;
189
204
 
@@ -20,6 +20,17 @@ describe('comp', function(){
20
20
  eq(k.yep, 'yep')
21
21
  })
22
22
 
23
+ it('should add events', function(){
24
+ k.events('mouseup', function(){})
25
+ k.events({
26
+ mousedown:function(){}
27
+ });
28
+
29
+ is(k._re_events.mouseup)
30
+ is(k._re_events.mousedown)
31
+
32
+ })
33
+
23
34
  it('should requires', function(){
24
35
  k
25
36
  .requires('test test2');
@@ -29,6 +29,18 @@ describe('entity', function(){
29
29
  ok(e.has('yep45 ok12'))
30
30
  })
31
31
 
32
+ it('should add events from comp', function(){
33
+ var func = function(){
34
+
35
+ }
36
+ c.events('mousedown', func);
37
+
38
+ e.comp(c.name);
39
+
40
+ ok(e.has('^mousedown'));
41
+ is(e.mousedown);
42
+ })
43
+
32
44
  it('should define properly', function(){
33
45
  re.c('blah1')
34
46
  .defines({
@@ -140,7 +152,7 @@ describe('entity', function(){
140
152
 
141
153
  e.comp(c.name)
142
154
 
143
- e.removeComp(c.name)
155
+ e.removeComp(['blah', c.name])
144
156
  not(e.has(c.name))
145
157
  ok(called)
146
158
  ok(called2)
@@ -159,6 +171,10 @@ describe('entity', function(){
159
171
  eq(e.clone(2).comps(), e.comps())
160
172
  })
161
173
 
174
+ it('should clone empty entity', function(){
175
+ is(re.e().clone())
176
+ })
177
+
162
178
  it('parent', function(){
163
179
  c.defines('d', function(v){return v; })
164
180
  .defaults('y', function(v){return v;})
@@ -166,7 +182,45 @@ describe('entity', function(){
166
182
  eq(e.parent(c.name, 'd', 100), 100)
167
183
  eq(e.parent(c.name, 'y', 'bob'), 'bob')
168
184
  e.comp(c.name)
169
- ok(e.parent('', 'has', c.name))
185
+ ok(e.parent('','has', c.name))
186
+ })
187
+
188
+ it('attr overwrite method', function(){
189
+
190
+ var called = false;
191
+
192
+ e.attr({
193
+ blah:function(){}
194
+ });
195
+
196
+ e.attr({
197
+ blah:function(){
198
+ called = true;
199
+ }
200
+ });
201
+
202
+ e.blah();
203
+
204
+ ok(called);
205
+ });
206
+
207
+ it('should dispose of all components properly', function(){
208
+ var called = false, called2 = false;
209
+
210
+ e.comp('image iso');
211
+
212
+ re.c('draw').on('dispose', function(e){
213
+ called = true;
214
+ })
215
+
216
+ re.c('draw').dispose(function(){
217
+ called2 = true;
218
+ })
219
+
220
+ e.dispose();
221
+ ok(called);
222
+ ok(called2)
223
+
170
224
  })
171
225
 
172
226
  it('should throw error on undefined parent method', function(){
@@ -224,8 +278,9 @@ describe('entity', function(){
224
278
  not(e.has('^yep'))
225
279
 
226
280
  ok(e.has('^ok'))
227
- e.off({ok:func})
228
- not(e.has('^ok'))
281
+ e.off({ok:func})
282
+
283
+ not(e.has('^ok'))
229
284
 
230
285
  //remove all
231
286
  e.on('key', function(){});
@@ -233,7 +288,25 @@ describe('entity', function(){
233
288
  eq(e._re_signals, {});
234
289
  })
235
290
 
236
- it('should add multiple bindings', function(){
291
+ it('should change context of event', function(){
292
+
293
+ var obj = {};
294
+
295
+ e.on({
296
+ blah:function(){
297
+ eq(obj, this);
298
+ }
299
+ }, obj);
300
+
301
+ e.on('blah2', function(){
302
+ eq(obj, this);
303
+ }, obj);
304
+
305
+ e.trigger('blah2').trigger('blah');
306
+
307
+ });
308
+
309
+ it('should add multiple events', function(){
237
310
 
238
311
  var called = false;
239
312
  var called2 = false;
@@ -298,22 +371,32 @@ describe('entity', function(){
298
371
  var co;
299
372
  var en;
300
373
  var called2 = false;
374
+
375
+ //listen for dispose call on component
301
376
  c.dispose(function(comp){
302
377
  called = true
303
378
  co = comp
304
379
  })
380
+
381
+ //component dispose trigger
305
382
  c.on('dispose', function(e){
306
383
  called2 = true
307
384
  en = e
308
385
  })
386
+
387
+ //add comp to testing entity
309
388
  e.comp(c.name)
389
+
310
390
  var called3 = false
391
+ //listen for dispose trigger on entity
311
392
  e.on('dispose', function(){
312
393
  called3 = true
313
394
  });
314
395
 
396
+ //call it
315
397
  e.dispose()
316
398
 
399
+ //asserts
317
400
  ok(called)
318
401
  eq(co, c)
319
402
  ok(called2)
@@ -1,5 +1,9 @@
1
1
  describe('query', function(){
2
2
 
3
+ beforeEach(function(){
4
+ query = re();
5
+ })
6
+
3
7
  it('should query', function(){
4
8
  re.e('tesee');
5
9
  re.e('tesee bob99');
@@ -25,6 +29,10 @@ describe('query', function(){
25
29
  eq(re(g).length, 1)
26
30
  });
27
31
 
32
+ it('should return empty query', function(){
33
+ eq(re().length, 0);
34
+ })
35
+
28
36
  it('should select *', function(){
29
37
  var c = re._e.length;
30
38
  eq(re('*').length, c);
@@ -38,13 +46,24 @@ describe('query', function(){
38
46
  }).length, 1)
39
47
  });
40
48
 
41
- it('method', function(){
42
- eq(re.e('ok', 3).method('comp', 'b').comps(), ['ok', 'b'])
49
+ it('should create query from array', function(){
50
+ var a = [1,2,3];
51
+
52
+ var q = re(a);
53
+
54
+ eq(q[0], a[0])
55
+ eq(q[1], a[1])
56
+ eq(q[2], a[2])
57
+
58
+ })
59
+
60
+ it('invoke', function(){
61
+ eq(re.e('ok', 3).invoke('comp', 'b').comps(), ['ok', 'b'])
43
62
  });
44
63
 
45
64
  it('each', function(){
46
65
  var i = 0;
47
- is(re('dd', 3).each(function(c, l){
66
+ is(re('dd', 3).each(function(e, c, l){
48
67
  eq(i++, c);
49
68
  eq(l, 3)
50
69
  }))
@@ -52,10 +71,10 @@ describe('query', function(){
52
71
 
53
72
  it('tilemap', function(){
54
73
 
55
- is(re.e('tile', 10).tilemap(5, function(x, y, i, l){
74
+ is(re.e('tile', 10).tilemap(5, function(e, x, y, i, l){
56
75
  ok(x < 5)
57
76
  ok(y < 2)
58
- eq(l, 10)
77
+ is(l)
59
78
  }));
60
79
 
61
80
  });
@@ -75,29 +94,100 @@ describe('query', function(){
75
94
  eq(k[0].f, re('tile')[0].f);
76
95
  eq(k[0].y, re('tile')[0].y);
77
96
  });
78
-
97
+
98
+ it('e', function(){
99
+
100
+ var q = re();
101
+
102
+ q.e('blah');
103
+
104
+ ok(q.last().has('blah'))
105
+
106
+ })
107
+
108
+ it('should last', function(){
109
+ var b = re.e();
110
+ query.last(b);
111
+ eq(query.last(), b)
112
+ })
113
+
114
+ it('should first', function(){
115
+ var b = re.e();
116
+ query.first(b);
117
+ eq(query.first(), b)
118
+
119
+ })
120
+
121
+ it('insertAfter', function(){
122
+ var b = re.e();
123
+
124
+ query.last(10, 6);
125
+
126
+ query.insertAfter(10, b);
127
+
128
+ eq(query.indexOf(b), 1);
129
+ })
130
+
131
+ it('insertBefore', function(){
132
+
133
+ var b = re.e();
134
+
135
+ query.last(10, 6);
136
+
137
+ query.insertBefore(6, b);
138
+
139
+ eq(query.indexOf(b), 1);
140
+ })
141
+
142
+ it('swap', function(){
143
+ query.last(10, 6);
144
+
145
+
146
+ query.swap(10, 6);
147
+
148
+ eq(query[0], 6);
149
+ eq(query[1], 10);
150
+ })
151
+
152
+ it('should erase', function(){
153
+
154
+ var q = re();
155
+
156
+ var e = re.e();
157
+
158
+ q.push(e);
159
+
160
+ //add in
161
+ var n = re.e();
162
+
163
+ q.erase(e);
164
+
165
+ not(q.include(e))
166
+
167
+ })
168
+
79
169
  it('attr', function(){
80
170
  re('tile').attr('first', 'asdf');
81
- re('tile').each(function(){
82
- eq(this.first, 'asdf')
171
+ re('tile').each(function(e){
172
+ eq(e.first, 'asdf')
83
173
  })
84
174
 
85
175
  re('tile').attr({yap:'1232'});
86
- re('tile').each(function(){
87
- eq(this.yap, '1232')
176
+ re('tile').each(function(e){
177
+ eq(e.yap, '1232')
88
178
  })
89
179
  });
90
180
 
91
181
  it('def', function(){
92
182
  re('tile').def('first', 'asdf');
93
- re('tile').each(function(){
94
- eq(this.first, 'asdf')
183
+ re('tile').each(function(e){
184
+ eq(e.first, 'asdf')
95
185
  })
96
186
 
97
187
  re('tile').def({yap:'1232', first:'d'});
98
- re('tile').each(function(){
99
- eq(this.yap, '1232')
100
- eq(this.first, 'asdf')
188
+ re('tile').each(function(e){
189
+ eq(e.yap, '1232')
190
+ eq(e.first, 'asdf')
101
191
  })
102
192
 
103
193
  });
@@ -149,6 +239,97 @@ describe('query', function(){
149
239
  not(re.e('sdf',2).has('^wef'));
150
240
  });
151
241
 
242
+ it('include', function(){
243
+
244
+ var en = re.e();
245
+
246
+ var query = re();
247
+
248
+ not(query.include(en));
249
+
250
+ query.push(en);
251
+
252
+ ok(query.include(en));
253
+
254
+ })
255
+
256
+ it('min', function(){
257
+ var query = re();
258
+
259
+ query.push(0)
260
+ query.push(10)
261
+ query.push(2)
262
+ query.push(5)
263
+
264
+ eq(query.min(function(e, i, l){
265
+ eq(this, 'ok')
266
+ is(i)
267
+ is(l)
268
+
269
+ return e;
270
+
271
+ }, 'ok'), 0)
272
+ })
273
+
274
+ it('max', function(){
275
+
276
+ var query = re();
277
+
278
+ query.push(0)
279
+ query.push(10)
280
+ query.push(2)
281
+ query.push(5)
282
+
283
+ eq(query.max(function(e, i, l){
284
+ eq(this, 'ok')
285
+ is(i)
286
+ is(l)
287
+
288
+ return e;
289
+
290
+ }, 'ok'), 10)
291
+ })
292
+
293
+ it('find', function(){
294
+ var e = re();
295
+ e.push(1);
296
+ e.push(10);
297
+
298
+ //find index with 10
299
+ eq(e.find(function(t){
300
+ eq(e, this)
301
+ return t == 10;
302
+ }), 10);
303
+ })
304
+
305
+ it('isEmpty', function(){
306
+ ok(re().isEmpty())
307
+ })
308
+
309
+ it('every', function(){
310
+
311
+ //check if all entities in query have value blah
312
+ var e = re();
313
+ e.push(re.e());
314
+ e.push(re.e().attr('blah', true));
315
+
316
+ not(e.every(function(e){
317
+ return e.blah;
318
+ }));
319
+
320
+ e.attr('blah', true)
321
+
322
+ //should now all have blah
323
+ ok(e.every(function(e){
324
+ return e.blah;
325
+ }));
326
+
327
+ //length zero..
328
+ ok(re().every(function(){
329
+ return false;
330
+ }))
331
+ })
332
+
152
333
  it('dispose', function(){
153
334
  is(re.e('rgfdvdvdfv', 2).dispose());
154
335
  eq(re('rgfdvdvdfv').length, 0);