entityjs 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/.gitignore +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +49 -0
  4. data/Rakefile +1 -0
  5. data/bin/entityjs +14 -0
  6. data/build/build_debug.bat +1 -0
  7. data/build/build_min.bat +1 -0
  8. data/build/config.php +64 -0
  9. data/build/debug.php +48 -0
  10. data/build/files.php +74 -0
  11. data/build/jsmin.php +376 -0
  12. data/build/min.php +50 -0
  13. data/changelog.txt +53 -0
  14. data/entityjs.gemspec +25 -0
  15. data/examples/keys/arrow.png +0 -0
  16. data/examples/keys/keys.html +59 -0
  17. data/examples/keys/keys.js +148 -0
  18. data/examples/mouse/mouse.html +58 -0
  19. data/examples/mouse/mouse.js +60 -0
  20. data/examples/scenes/home.png +0 -0
  21. data/examples/scenes/scenes.html +55 -0
  22. data/examples/scenes/scenes.js +134 -0
  23. data/examples/scenes/win.png +0 -0
  24. data/examples/sounds/sound1.mp3 +0 -0
  25. data/examples/sounds/sound1.ogg +0 -0
  26. data/examples/sounds/sounds.html +56 -0
  27. data/examples/sounds/sounds.js +44 -0
  28. data/examples/style/background.png +0 -0
  29. data/examples/style/sheet.css +762 -0
  30. data/examples/tiles/tiles.html +56 -0
  31. data/examples/tiles/tiles.js +85 -0
  32. data/examples/tiles/tiles.png +0 -0
  33. data/lib/blank/config.js +4 -0
  34. data/lib/blank/config.yml +21 -0
  35. data/lib/blank/home.js +11 -0
  36. data/lib/blank/init.js +7 -0
  37. data/lib/blank/load.js +21 -0
  38. data/lib/blank/play.html +29 -0
  39. data/lib/entity.debug.js +52 -0
  40. data/lib/entity.min.js +184 -0
  41. data/lib/entityjs/command.rb +37 -0
  42. data/lib/entityjs/comp.rb +11 -0
  43. data/lib/entityjs/game.rb +93 -0
  44. data/lib/entityjs/min.rb +11 -0
  45. data/lib/entityjs/refresh.rb +14 -0
  46. data/lib/entityjs/version.rb +3 -0
  47. data/lib/entityjs.rb +6 -0
  48. data/license.txt +1 -0
  49. data/spec/lib/entityjs/game_spec.rb +11 -0
  50. data/spec/spec_helper.rb +3 -0
  51. data/src/entityjs/core/component.js +306 -0
  52. data/src/entityjs/core/entity.js +516 -0
  53. data/src/entityjs/core/load.js +224 -0
  54. data/src/entityjs/core/query.js +410 -0
  55. data/src/entityjs/core/re.js +70 -0
  56. data/src/entityjs/core/system.js +125 -0
  57. data/src/entityjs/cycle/draw.js +185 -0
  58. data/src/entityjs/cycle/ticker.js +27 -0
  59. data/src/entityjs/cycle/tween.js +61 -0
  60. data/src/entityjs/cycle/update.js +86 -0
  61. data/src/entityjs/cycle/wait.js +22 -0
  62. data/src/entityjs/cycle/worker.js +9 -0
  63. data/src/entityjs/display/anchor.js +53 -0
  64. data/src/entityjs/display/bitfont.js +93 -0
  65. data/src/entityjs/display/bitmap.js +37 -0
  66. data/src/entityjs/display/circle.js +30 -0
  67. data/src/entityjs/display/font.js +41 -0
  68. data/src/entityjs/display/group.js +63 -0
  69. data/src/entityjs/display/rect.js +19 -0
  70. data/src/entityjs/display/screen.js +46 -0
  71. data/src/entityjs/display/sprite.js +37 -0
  72. data/src/entityjs/input/keyboard.js +150 -0
  73. data/src/entityjs/input/mouse.js +123 -0
  74. data/src/entityjs/input/pressed.js +81 -0
  75. data/src/entityjs/input/touch.js +28 -0
  76. data/src/entityjs/math/bind.js +76 -0
  77. data/src/entityjs/math/bisect.js +69 -0
  78. data/src/entityjs/math/body.js +39 -0
  79. data/src/entityjs/math/drag.js +39 -0
  80. data/src/entityjs/math/hitmap.js +165 -0
  81. data/src/entityjs/math/hittest.js +26 -0
  82. data/src/entityjs/math/physics.js +142 -0
  83. data/src/entityjs/math/point.js +57 -0
  84. data/src/entityjs/math/tile.js +91 -0
  85. data/src/entityjs/media/channel.js +93 -0
  86. data/src/entityjs/media/playlist.js +5 -0
  87. data/src/entityjs/media/sound.js +110 -0
  88. data/src/entityjs/net/socket.js +52 -0
  89. data/src/entityjs/pattern/arraymap.js +89 -0
  90. data/src/entityjs/pattern/flicker.js +214 -0
  91. data/src/entityjs/pattern/timestep.js +34 -0
  92. data/src/entityjs/save/database.js +7 -0
  93. data/src/entityjs/save/storage.js +57 -0
  94. data/src/entityjs/util/log.js +25 -0
  95. data/src/entityjs/util/polyfill.js +25 -0
  96. data/src/entityjs/util/random.js +38 -0
  97. data/src/entityjs/util/scene.js +101 -0
  98. data/src/entityjs/util/sheet.js +51 -0
  99. data/src/entityjs/util/support.js +132 -0
  100. metadata +156 -0
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
6
+ <title>Tiles Demo</title>
7
+ <script language="javascript">
8
+ //modify path of entity.debug.js
9
+ path = '../../';
10
+ </script>
11
+ <script src="../../lib/entity.debug.js" language="javascript"></script>
12
+ <script src="tiles.js" language="javascript"></script>
13
+
14
+ <link rel="stylesheet" type="text/css" href="../style/sheet.css" />
15
+
16
+ </head>
17
+
18
+ <body>
19
+
20
+
21
+ <div class="container_24">
22
+ <div id="content">
23
+ <h1>Tiles Demo</h1>
24
+
25
+ <div class="canvas-container">
26
+ <canvas id="canvas" width="500" height="400"> </canvas>
27
+ </div>
28
+
29
+ <div class="grid_12">
30
+ <h2 class="hd-left bg-yellow">Overview</h2>
31
+ <p>
32
+ Loads and renders a world from a tile array. View the <a href="tiles.js">source code</a> to see how easy it is to program.
33
+ </p>
34
+ </div>
35
+
36
+ <div class="grid_12">
37
+ <h2 class="hd-right bg-yellow">Controls</h2>
38
+
39
+ <ul>
40
+ <li>None</li>
41
+
42
+ </ul>
43
+
44
+ </div>
45
+
46
+ <div class="clear"></div>
47
+ </div>
48
+
49
+
50
+
51
+ </div>
52
+
53
+ </body>
54
+
55
+
56
+ </html>
@@ -0,0 +1,85 @@
1
+ /*
2
+ This example creates a tile based world from a multi-dimensional array.
3
+
4
+ Since tile-based games are popular some helper components have been
5
+ created. The tile components helps with moving tiles and getting tile
6
+ coordinates.
7
+
8
+ The query system also has a nice method called map which loops
9
+ through a two-dimensional array.
10
+ */
11
+
12
+ re.constants = {
13
+ //enter in tiles from 0-3
14
+ // 0 is water
15
+ // 1 is wood wall
16
+ // 2 is stone wall
17
+ // 3 is grass
18
+ map:
19
+ [
20
+ [2, 2, 2, 2, 2, 3, 3, 2, 2, 2],
21
+ [3, 3, 0, 0, 0, 3, 3, 3, 3, 0],
22
+ [3, 3, 3, 3, 3, 3, 2, 2, 0, 0],
23
+ [3, 3, 0, 3, 3, 3, 3, 3, 0, 0],
24
+ [2, 1, 3, 1, 3, 3, 3, 3, 3, 3]
25
+ ],
26
+
27
+ canvasId:'#canvas',
28
+ tileSize:40,
29
+ assets:'tiles.png'
30
+ }
31
+
32
+ re.ready(function(){
33
+
34
+ re.sys.init(re.constants.canvasId).start();
35
+
36
+ //setup tile size
37
+ re.tile.sizeX = re.constants.tileSize;
38
+ re.tile.sizeY = re.constants.tileSize;
39
+
40
+ re.load(re.constants.assets)
41
+ .complete(function(){
42
+
43
+ //load world
44
+ re.e('level')
45
+ .load(re.constants.map);
46
+
47
+ });
48
+
49
+
50
+ });
51
+
52
+ /*
53
+ The level component loads and handles all tiles in the game.
54
+ */
55
+ re.c('level')
56
+ .extend({
57
+
58
+ //loads given tile map
59
+ load:function(map){
60
+
61
+ var totalTiles = map.length * map[0].length;
62
+
63
+ //create tiles
64
+ //second parameter defines how many entities to create. (default 1)
65
+ //if count is higher than one it will return a query of all tiles
66
+ this.tiles = re.e('sprite tile '+re.constants.assets, totalTiles)
67
+ //returns entities as a two dimensional array
68
+ //the first value is the width of the array
69
+ .map(map[0].length, function(x, y){
70
+
71
+ //remember to set the crop image size of tiles
72
+ //or else nothing will appear
73
+ this.sizeX = re.tile.sizeX;
74
+ this.sizeY = re.tile.sizeY;
75
+
76
+
77
+ this.setFrameId(map[y][x]);
78
+
79
+ this.setTile(x, y);
80
+
81
+ });
82
+
83
+ }
84
+
85
+ });
Binary file
@@ -0,0 +1,4 @@
1
+ re.config = {
2
+ version:'1.0',
3
+ canvas:'#canvas'
4
+ };
@@ -0,0 +1,21 @@
1
+ # Configure your game settings
2
+
3
+ #project name
4
+ name: mygame
5
+
6
+ paths:
7
+ images: assets/images
8
+ sounds: assets/sounds
9
+ levels: assets/levels
10
+ src: src
11
+ lib: lib
12
+ test: tests
13
+
14
+ #files to ignore in /src and entity/src
15
+ #this is useful to ignore unused files
16
+ ignore:
17
+ socket
18
+
19
+ #although all files are compiled its
20
+ #useful to include dependent files first
21
+ order:
data/lib/blank/home.js ADDED
@@ -0,0 +1,11 @@
1
+ re.scene('home')
2
+ .enter(function(){
3
+
4
+ console.log('entering home scene. . .');
5
+
6
+ })
7
+ .exit(function(){
8
+
9
+ console.log('exiting home scene. . .');
10
+
11
+ })
data/lib/blank/init.js ADDED
@@ -0,0 +1,7 @@
1
+ re.ready(function(){
2
+
3
+ re.sys.init(re.config.canvas).start();
4
+
5
+ re.scene('load');
6
+
7
+ });
data/lib/blank/load.js ADDED
@@ -0,0 +1,21 @@
1
+ re.scene('load')
2
+ .enter(function(){
3
+
4
+ re.load(re.images.concat(re.sounds))
5
+ .complete(function(){
6
+ console.log('finished loading...')
7
+
8
+ //move to home
9
+ re.scene('home');
10
+ })
11
+ .error(function(e){
12
+ console.log('Error loading asset: '+e);
13
+ })
14
+ .progress(function(i){
15
+ console.log('Finished loading: '+i);
16
+ });
17
+
18
+ })
19
+ .exit(function(){
20
+ //exit load scene
21
+ })
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
6
+
7
+ <title>Play</title>
8
+
9
+ <script src="lib/entity.debug.js" language="javascript"></script>
10
+
11
+ </head>
12
+
13
+ <body>
14
+
15
+
16
+ <div id="content">
17
+ <h1>Play</h1>
18
+
19
+ <div class="canvas-container">
20
+ <canvas id="canvas" width="500" height="400"> </canvas>
21
+ </div>
22
+
23
+ </div>
24
+
25
+
26
+ </body>
27
+
28
+
29
+ </html>
@@ -0,0 +1,52 @@
1
+ /* EntityJS v0.2.2 http://entityjs.com | License http://entityjs.com/license */
2
+ if(!path) path = '';
3
+ document.write("<script src='"+path+"src/entityjs/core/re.js' language='javascript'><\/script>");
4
+ document.write("<script src='"+path+"src/entityjs/core/component.js' language='javascript'><\/script>");
5
+ document.write("<script src='"+path+"src/entityjs/core/entity.js' language='javascript'><\/script>");
6
+ document.write("<script src='"+path+"src/entityjs/core/load.js' language='javascript'><\/script>");
7
+ document.write("<script src='"+path+"src/entityjs/core/query.js' language='javascript'><\/script>");
8
+ document.write("<script src='"+path+"src/entityjs/core/system.js' language='javascript'><\/script>");
9
+ document.write("<script src='"+path+"src/entityjs/cycle/draw.js' language='javascript'><\/script>");
10
+ document.write("<script src='"+path+"src/entityjs/cycle/ticker.js' language='javascript'><\/script>");
11
+ document.write("<script src='"+path+"src/entityjs/cycle/tween.js' language='javascript'><\/script>");
12
+ document.write("<script src='"+path+"src/entityjs/cycle/update.js' language='javascript'><\/script>");
13
+ document.write("<script src='"+path+"src/entityjs/cycle/wait.js' language='javascript'><\/script>");
14
+ document.write("<script src='"+path+"src/entityjs/cycle/worker.js' language='javascript'><\/script>");
15
+ document.write("<script src='"+path+"src/entityjs/display/anchor.js' language='javascript'><\/script>");
16
+ document.write("<script src='"+path+"src/entityjs/display/bitfont.js' language='javascript'><\/script>");
17
+ document.write("<script src='"+path+"src/entityjs/display/bitmap.js' language='javascript'><\/script>");
18
+ document.write("<script src='"+path+"src/entityjs/display/circle.js' language='javascript'><\/script>");
19
+ document.write("<script src='"+path+"src/entityjs/display/font.js' language='javascript'><\/script>");
20
+ document.write("<script src='"+path+"src/entityjs/display/group.js' language='javascript'><\/script>");
21
+ document.write("<script src='"+path+"src/entityjs/display/rect.js' language='javascript'><\/script>");
22
+ document.write("<script src='"+path+"src/entityjs/display/screen.js' language='javascript'><\/script>");
23
+ document.write("<script src='"+path+"src/entityjs/display/sprite.js' language='javascript'><\/script>");
24
+ document.write("<script src='"+path+"src/entityjs/input/keyboard.js' language='javascript'><\/script>");
25
+ document.write("<script src='"+path+"src/entityjs/input/mouse.js' language='javascript'><\/script>");
26
+ document.write("<script src='"+path+"src/entityjs/input/pressed.js' language='javascript'><\/script>");
27
+ document.write("<script src='"+path+"src/entityjs/input/touch.js' language='javascript'><\/script>");
28
+ document.write("<script src='"+path+"src/entityjs/math/bind.js' language='javascript'><\/script>");
29
+ document.write("<script src='"+path+"src/entityjs/math/bisect.js' language='javascript'><\/script>");
30
+ document.write("<script src='"+path+"src/entityjs/math/body.js' language='javascript'><\/script>");
31
+ document.write("<script src='"+path+"src/entityjs/math/drag.js' language='javascript'><\/script>");
32
+ document.write("<script src='"+path+"src/entityjs/math/hitmap.js' language='javascript'><\/script>");
33
+ document.write("<script src='"+path+"src/entityjs/math/hittest.js' language='javascript'><\/script>");
34
+ document.write("<script src='"+path+"src/entityjs/math/physics.js' language='javascript'><\/script>");
35
+ document.write("<script src='"+path+"src/entityjs/math/point.js' language='javascript'><\/script>");
36
+ document.write("<script src='"+path+"src/entityjs/math/tile.js' language='javascript'><\/script>");
37
+ document.write("<script src='"+path+"src/entityjs/media/channel.js' language='javascript'><\/script>");
38
+ document.write("<script src='"+path+"src/entityjs/media/playlist.js' language='javascript'><\/script>");
39
+ document.write("<script src='"+path+"src/entityjs/media/sound.js' language='javascript'><\/script>");
40
+ document.write("<script src='"+path+"src/entityjs/pattern/arraymap.js' language='javascript'><\/script>");
41
+ document.write("<script src='"+path+"src/entityjs/pattern/flicker.js' language='javascript'><\/script>");
42
+ document.write("<script src='"+path+"src/entityjs/pattern/timestep.js' language='javascript'><\/script>");
43
+ document.write("<script src='"+path+"src/entityjs/save/database.js' language='javascript'><\/script>");
44
+ document.write("<script src='"+path+"src/entityjs/save/storage.js' language='javascript'><\/script>");
45
+ document.write("<script src='"+path+"src/entityjs/util/log.js' language='javascript'><\/script>");
46
+ document.write("<script src='"+path+"src/entityjs/util/polyfill.js' language='javascript'><\/script>");
47
+ document.write("<script src='"+path+"src/entityjs/util/random.js' language='javascript'><\/script>");
48
+ document.write("<script src='"+path+"src/entityjs/util/scene.js' language='javascript'><\/script>");
49
+ document.write("<script src='"+path+"src/entityjs/util/sheet.js' language='javascript'><\/script>");
50
+ document.write("<script src='"+path+"src/entityjs/util/support.js' language='javascript'><\/script>");
51
+
52
+ window.onload = function(){ re.version = '0.2.2'; }
data/lib/entity.min.js ADDED
@@ -0,0 +1,184 @@
1
+ /* EntityJS v0.2.2 http://entityjs.com | License http://entityjs.com/license */
2
+ re=function(selector){return new re.query(selector);};re.version="0.2.2";re._e=[];re._c={};re.ready=function(r){re.ready.c.push(r);window.onload=function(){for(var k in re.ready.c){re.ready.c[k].call(re);}};};re.ready.c=[];re.$=function(s){return re.$.c[s]=re.$.c[s]||(s.charAt(0)=='#')?document.getElementById(s.substr(1)):document.getElementsByTagName(s);};re.$.c={};re.$new=function(n){return document.createElement(n);};re.listener=function(t,c){if(window.addEventListener){window.addEventListener(t,c,true);}else{document.attachEvent('on'+t,c);}};Function.prototype.context=function(c){var that=this;return function(){return that.apply(c,arguments);};};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(o){for(var i=0;i<this.length;i++){if(this[i]==o){return i;}}
3
+ return-1;}}
4
+ var __z=function(n,r){this._checkFinal();if(!this[n]){this[n]=[];}
5
+ if(typeof r=='string'){this[n]=this[n].concat(r.split(' '));}else{this[n]=this[n].concat(r);}
6
+ return this;};re.comp=re.c=function(title){if(!re._c[title]){re._c[title]=new re.comp.init(title);}
7
+ return re._c[title];};re.comp.init=function(name){this.name=name;this._re_signals={};this._re_inherits={};this._re_extends={};this._re_final=false;};re.comp.init.prototype={_checkFinal:function(){if(this._re_final){throw this.name+' is final.';}},global:function(obj,value){this._checkFinal();if(arguments.length==1){for(var type in obj){this[type]=obj[type];}}else{this[obj]=value;}
8
+ return this;},require:function(r){return __z.call(this,'_re_requires',r);},assert:function(r){return __z.call(this,'_re_asserts',r);},implement:function(r){return __z.call(this,'_re_implments',r);},alias:function(s){this._checkFinal();var p=s.split(' ');if(p.length>1){for(var i in p){this.alias(p[i]);}
9
+ return this;}
10
+ if(s.charAt(0)=='-'){if(re._c[s.substr(1)]==this){delete re._c[s.substr(1)];}}else{re._c[s]=this;}
11
+ return this;},addSignal:function(){return re.e.init.prototype.addSignal.apply(this,arguments);},removeSignal:function(){return re.e.init.prototype.removeSignal.apply(this,arguments);},signal:function(){return re.e.init.prototype.signal.apply(this,arguments);},inherit:function(d,value){this._checkFinal();if(arguments.length==1){for(var k in d){this._re_inherits[k]=d[k];}}else{this._re_inherits[d]=value;}
12
+ return this;},namespace:function(obj,value){this._checkFinal();var name=this.name+'_';if(arguments.length==1){for(var k in obj){this._re_extends[name+k]=obj[k];}}else{this._re_extends[name+obj]=value;}
13
+ return this;},extend:function(d,value){this._checkFinal();if(!this._re_extends){this._re_extends={};}
14
+ if(arguments.length==1){for(var k in d){this._re_extends[k]=d[k];}}else{this._re_extends[d]=value;}
15
+ return this;},init:function(method){this._checkFinal();this._re_init=method;return this;},dispose:function(method){this._checkFinal();this._re_dispose=method;return this;},lock:function(){this._checkFinal();this._re_final=true;return this;},run:function(method){this._checkFinal();method.call(this);return this;}};(function(re){var q=function(c,count){if(!count){return new re.entity.init(c);}
16
+ var q=re();for(var i=0;i<count;i++){q._e.push(re.e(c));}
17
+ return q;};q.id=0;var e=function(c){this._re_comps=[];this._re_signals={};this.id=q.id+'';q.id++;re._e.push(this);this.addComp(c);};var p=e.prototype;p.id='';p.addComp=function(com){this._re_comp(com);if(this._re_interface){for(var i in this._re_interface){if(!this.hasOwnProperty(this._re_interface[i])){throw'implementation: '+this._re_interface[i]+' missing';}}}
18
+ if(this._re_asserts){for(var t in this._re_asserts){if(this._re_comps.indexOf(c._re_asserts[t])!=-1){throw'assert: '+c.name+' cannot be coupled with '+c._re_asserts[t];}}}
19
+ return this;};p.removeComp=function(com){var pieces;if(typeof com=='object'){pieces=com;com=com[0];}else{pieces=com.split(' ');}
20
+ if(pieces.length>1){for(var k in pieces){this._re_comp(pieces[k]);}
21
+ return this;}
22
+ var c=re._c[com];if(!this.has(com))return this;this._re_comps.splice(this._re_comps.indexOf(com),1);if(c){if(c._re_dispose){c._re_dispose.call(this,c);}
23
+ c.signal('dispose',this);}};p._re_comp=function(com){if(!com)return this;var pieces;if(typeof com=='object'){pieces=com;com=com[0];}else{pieces=com.split(' ');}
24
+ if(pieces.length>1){for(var k in pieces){this._re_comp(pieces[k]);}
25
+ return this;}
26
+ var c;var vals=com.split(':');com=vals[0];c=re._c[com];vals[0]=c;if(this.has(com))return this;this._re_comps.push(com);if(c){this._re_comp(c._re_requires);if(c._re_implements){if(!this._re_implements){this._re_implements=[];}
27
+ this._re_implements=this._re_implements.concat(c._re_implements);}
28
+ if(c._re_asserts){if(!this._re_asserts){this._re_asserts=[];}
29
+ this._re_asserts=this._re_asserts.concat(c._re_asserts);}
30
+ if(c._re_inherits){this.inherit(c._re_inherits);}
31
+ if(c._re_extends){this.extend(c._re_extends);}
32
+ if(c._re_init){c._re_init.apply(this,vals);}
33
+ c.signal('init',this);}
34
+ return this;}
35
+ p.getComps=function(){return this._re_comps.slice();}
36
+ p.clone=function(count){return re.e(this._re_comps,count);}
37
+ p.parent=function(comp,method){var a=Array.prototype.slice.call(arguments,2);if(comp==''){re.e.init[method].apply(this,a);}
38
+ var c=re._c[comp];if(c._re_extends[method]){return c._re_extends[method].apply(this,a);}
39
+ if(c._re_inherits[method]){return c._re_inherits[method].apply(this,a);}
40
+ return this;}
41
+ p.has=function(comp){if(typeof comp=='string'){comp=re.query._toObj(comp);}
42
+ comp.comp=comp.comp||[];comp.id=comp.id||'';comp.signal=comp.signal||[];comp.not=comp.not||[];for(p=0;p<comp.comp.length;p++){if(this._re_comps.indexOf(comp.comp[p])==-1){return false;}}
43
+ for(p=0;p<comp.not.length;p++){if(this._re_comps.indexOf(comp.not[p])!=-1){return false;}}
44
+ var s;for(p=0;p<comp.signal.length;p++){s=comp.signal[p];if(!this._re_signals[s]||this._re_signals[s].length==0){return false;}}
45
+ if(comp.id!=''&&this.id!=comp.id){return false;}
46
+ return true;};p.addSignal=function(type,method){if(typeof type=='object'){for(var k in type){this.addSignal(k,type[k]);}}else{if(!this._re_signals[type]){this._re_signals[type]=[];}
47
+ this._re_signals[type].push(method);}
48
+ return this;};p.removeSignal=function(type,method){if(typeof type=='object'){for(var k in type){this.removeSignal(k,type[k]);}}else{if(typeof method=='function'){for(var k in this._re_signals[type]){if(this._re_signals[type][k]==method){this._re_signals[type].splice(k,1);}}}else{this._re_signals[type]=[];}}
49
+ return this;};p.signal=function(type){if(!this._re_signals[type])return this;var b;for(var i=0,l=this._re_signals[type].length;i<l;i++){b=this._re_signals[type];if(!b[i])continue;if(b[i].apply((b[i].c)?b[i].c:this,Array.prototype.slice.call(arguments,1))===false){b.splice(i,1);}}
50
+ return this;};p.extend=function(obj,value){var a=typeof obj;if(a=='object'){for(var key in obj){if(!obj.hasOwnProperty(key))continue;this.extend(key,obj[key]);}}else{this[obj]=value;}
51
+ return this;}
52
+ p.inherit=function(obj,value){if(typeof obj=='object'){for(var key in obj){if(!obj.hasOwnProperty(key))continue;this.inherit(key,obj[key]);}}else{if(!this.hasOwnProperty(obj)||typeof this[obj]!=typeof value){this[obj]=value;}}
53
+ return this;}
54
+ p.dispose=function(){re._e.splice(re._e.indexOf(this),1);for(var i in this._re_comps){var k=re.c(this._re_comps[i]);if(k._re_dispose){k._re_dispose.call(this,k);}
55
+ k.signal('dispose',this);}
56
+ this.signal('dispose');return this;}
57
+ re.entity=re.e=q;re.entity.init=e;}(re));(function(re){var b=function(assets){return new re.load.init(assets);}
58
+ b.path="";b.imageExt='img';b.soundExt='sfx';b.images=['gif','jpg','jpeg','png'];b.sounds=['wav','mp3','aac','ogg'];var l=function(assets){if(typeof assets=='string'){this.assets=assets.split(' ');}else{this.assets=assets;}
59
+ var a;for(var i=0;i<this.assets.length;i++){this.total++;a=this.assets[i];var j=a.lastIndexOf('.')+1;var ext=a.substr(j).toLowerCase();var s=a;var d=a.lastIndexOf('/');if(d!=-1){a=a.substr(d+1,a.length);}
60
+ var n=a.substr(0,j);if(re.load.images.indexOf(ext)!=-1){this._loadImg(s,a,n);}else if(re.load.sounds.indexOf(ext)!=-1){if(!re.support||re.support(ext)){this._loadSound(s,a,n);}}}
61
+ return this;}
62
+ var p=l.prototype;p.current=0;p.total=0;p._loadImg=function(src,a,n){var that=this;var img=new Image();re.c(a).alias(n+re.load.imgExt).global({bitmap:img}).extend({bitmap:img});img.onload=function(){re.c(a).extend({bisect:img.width,sizeX:img.width,sizeY:img.height});that.current++;if(that._p){that._p.call(that,that.current,that.total,a);}
63
+ if(that.current>=that.total){if(that._s){that._s.call(that,that.assets);}}};img.onerror=function(){if(that._e){that._e.call(that,a);}};img.src=re.load.path+src;return this;}
64
+ p._loadSound=function(src,a,n){var that=this;var s=new Audio(re.load.path+src);s.preload="auto";s.load();re.c(a).alias(n+re.load.soundExt).global({sound:s}).extend({sound:s});s.addEventListener('canplaythrough',function(){that.current++;if(that._p){that._p.call(that,that.current,that.total,a);}
65
+ if(that.current>=that.total){if(that._s){that._s.call(that,that.assets);}}},false);s.addEventListener('error',function(){if(that._e){that._e.call(that,a);}},false);}
66
+ p.progress=function(m){this._p=m;return this;}
67
+ p.complete=function(m){this._s=m;return this;}
68
+ p.error=function(m){this._e=m;return this;}
69
+ re.load=b;re.load.init=l;}(re));(function(re){var q=function(selector){this._e=[];if(selector){this.query(selector);}}
70
+ q._toObj=function(query){if(q.c[query]){return q.c[query];}
71
+ var temp=query.split(' ');var comps=[];var signals=[];var minus=[];var id='';var fl;var val;for(var j=0;j<temp.length;j++){fl=temp[j].charAt(0);val=temp[j].substr(1);if(fl=='^'){signals.push(val);}else if(fl=='-'){minus.push(val);}else if(fl=='#'){id=val;}else{comps.push(temp[j]);}}
72
+ var comp={comp:comps,signal:signals,not:minus,id:id};q.c[query]=comp;return comp;}
73
+ q.c={};var p=q.prototype;p.query=function(select){select=select||'';var i=0;if(typeof select=='string'){if(select=='*'){this._e=re._e.slice();return this;}
74
+ var obj=q._toObj(select);var en;main:for(;i<re._e.length;i++){en=re._e[i];if(en.has(obj)){this._e.push(en);}}}else if(typeof select=='function'){for(;i<re._e.length;i++){if(select.call(re._e[i],i,re._e.length)){this._e.push(re._e[i]);}}}
75
+ return this;}
76
+ p.toArray=function(){return this._e.slice();}
77
+ p.method=function(m){var b=Array.prototype.slice.call(arguments,1);this.each(function(){this[m].apply(this,b);});return this;}
78
+ p.each=function(m){var l=this._e.length,i=-1,e;while(++i<l&&(e=this._e[i])&&m.call(e,i,l)!==false);return this;}
79
+ p.map=function(w,method){var x=0;var y=0;for(var i=0,l=this._e.length;i<l;i++){if(method.call(this._e[i],x,y,i,l)==false)break;x++;if(x==w){x=0;y++;}}}
80
+ p.getComps=function(){var l=[];this.each(function(){l.concat(this.getComps());});return l;}
81
+ p.random=function(){return this._e[~~(Math.random()*this._e.length)];}
82
+ p.pluck=function(value){var t=[];var k=value.split(' ');this.each(function(){var o={};for(var p in k){if(k.hasOwnProperty(p)){o[k[p]]=this[k[p]];}}
83
+ t.push(o);});return t;}
84
+ p.extend=function(obj,value){this.each(function(){this.extend(obj,value);});return this;}
85
+ p.inherit=function(obj,value){this.each(function(){this.inherit(obj,value);});return this;}
86
+ p.addComp=function(c){this.each(function(ref){this.addComp(c);});return this;}
87
+ p.removeComp=function(c){this.each(function(ref){this.removeComp(c);});}
88
+ p.signal=function(type,method){var p=arguments;this.each(function(ref){this.signal.apply(this,p);});return this;}
89
+ p.length=function(){return this._e.length;}
90
+ p.filter=function(method){var q=re();var that=this;this.each(function(i,l){if(method.call(this,i,l)){q.push(this);}});return q;}
91
+ p.has=function(comp){for(var i=0;i<this._e.length;i++){if(!this._e.has(comp)){return false;}}
92
+ return this;}
93
+ p.dispose=function(){this.each(function(){this.dispose();});return this;}
94
+ p.get=function(index){return this._e[index];}
95
+ p.put=function(entity){this._e.push(entity);return this;}
96
+ re.query=q;}(re));re.c('system').inherit({contextType:'2d',clearColor:'#f9f9f9',stepSize:0.03,running:false,sizeX:0,sizeY:0}).extend({clear:function(color){if(color){this.context.fillStyle=color;this.context.fillRect(0,0,this.sizeX,this.sizeY);}else{this.context.clearRect(0,0,this.sizeX,this.sizeY);}
97
+ return this;},start:function(){if(!this.running){this.running=true;var that=this;(function mainLoop(){that.system_loop.call(that);if(that.running){that.requestAnimationFrame(mainLoop,that.canvas);}})();}
98
+ return this;},loop:function(m){this.system_loop=m;return this;},stop:function(){this.running=false;return this;},init:function(canvasId,screen,contextType){this.addComp('polyfill ticker timestep');this.canvas=re.$(canvasId);this.contextType=contextType||this.contextType;this.context=this.canvas.getContext(this.contextType);this.sizeX=this.canvas.width;this.sizeY=this.canvas.height;screen=screen||re.screen;if(screen){screen.sizeX=this.sizeX;screen.sizeY=this.sizeY;screen.regX=this.sizeX*0.5;screen.regY=this.sizeY*0.5;}
99
+ return this;},system_loop:function(){this.timestep(this.tick(),function(){re._c.update.update.call(re._c.update,this,this.stepSize);});this.clear(this.clearColor);re._c.draw.draw.call(re._c.draw,this);}}).run(function(){re.system=re.sys=re.e('system');});re.c('draw').global({listeners:[],draw:function(s){var l=this.listeners;for(var k=0,le=l.length,b;k<le;++k){b=l[k];if(b&&b.sys==s&&b.drawing&&b.isVisible()){b.draw_render(s.context);}}}}).implement('draw').init(function(c){c.listeners.push(this);this.screen=re.screen;}).dispose(function(c){c.listeners.splice(c.listeners.indexOf(this),1);}).inherit({sys:re.sys,drawing:true,rotation:0,alpha:1,scaleX:1,scaleY:1,posX:0,posY:0,sizeX:1,sizeY:1,regX:0,regY:0}).extend({cache:function(){if(!this.image)return this;this.clearCache();var c=re.$new('canvas');var s=Math.max(this.image.width,this.image.height);c.width=s;c.height=s;this.draw_render(c.getContext(re.sys.contextType));this.canvasCache=c;return this;},clearCache:function(){this.canvasCache=null;},drawFirst:function(){var l=re.c('draw').listeners;l.splice(l.indexOf(this),1);l.unshift(this);return this;},drawLast:function(){var l=re.c('draw').listeners;l.splice(l.indexOf(this),1);l.push(this);return this;},drawAfter:function(en){var l=re.c('draw').listeners;var him=l.indexOf(en);var me=l.indexOf(this);if(him>me){var t=l[him];l[him]=l[me];l[me]=t;}
100
+ return this;},drawBefore:function(en){var l=re.c('draw').listeners;var him=l.indexOf(en);var me=l.indexOf(this);if(him<me){var t=l[him];l[him]=l[me];l[me]=t;}
101
+ return this;},getScreenX:function(){var x=this.posX;if(this.screen)x-=this.screen.posX;return x;},getScreenY:function(){var y=this.posY;if(this.screen)y-=this.screen.posY;return y;},isVisible:function(){return(!this.screen||this.screen.touches(this.posX-this.regX,this.posY-this.regY,this.sizeX,this.sizeY));}}).namespace({render:function(c){if(!c)c=this.sys.context;this.draw_before(c);this.draw(c);this.draw_after(c);},before:function(c){c.save();if(this.alpha!=1)
102
+ c.globalAlpha=this.alpha;c.translate(this.getScreenX(),this.getScreenY());if(this.rotation!=0)
103
+ c.rotate(this.rotation*Math.PI/180);if(this.scaleX!=1||this.scaleY!=1)
104
+ c.scale(this.scaleX,this.scaleY);},after:function(c){c.restore();}});re.c('ticker').inherit({time:0,maxTick:0.05}).init(function(){this.lastTime=Date.now();}).extend({tick:function(){var wall=Date.now();var delta=(wall-this.lastTime)/1000;this.lastTime=wall;var timeDelta=Math.min(delta,this.maxTick);this.time+=timeDelta;return timeDelta;}});re.c('tween').require('update').global({tween:function(obj,time,props){return obj.comp('tween').tween(time,props);}}).namespace({update:function(t){}}).inherit({tweening:false}).extend({tween:function(time,props){this.time=time||5;if(this.tweening){this.removeSignal('update',this.tween_update);}
105
+ for(var i in props){if(!props.hasOwnProperty(i))continue;this.tween_props[i]={s:re.sys.stepSize,i:props[i]};}
106
+ return this;}}).init(function(){this.tween_props={};});re.tween=re.c('tween').tween;re.c('update').global({listeners:[],update:function(s,t){var l=this.listeners;for(var k=0,le=l.length,b;k<le;++k){b=l[k];if(b&&b.sys==s&&b.updating){b.signal('update',t,s.time);}}}}).inherit({updating:true,sys:re.sys}).extend(function(){var l=re.c('update').listeners;return{updateFirst:function(){l.splice(l.indexOf(this),1);l.unshift(this);return this;},updateLast:function(){l.splice(l.indexOf(this),1);l.push(l);return this;},updateAfter:function(e){var him=l.indexOf(e);var me=l.indexOf(this);if(him>me){var t=l[him];l[him]=l[me];l[me]=t;}
107
+ return this;},updateBefore:function(e){var him=l.indexOf(e);var me=l.indexOf(this);if(him<me){var t=l[him];l[him]=l[me];l[me]=t;}
108
+ return this;}};}()).init(function(c){c.listeners.push(this);}).dispose(function(c){c.listeners.splice(c.listeners.indexOf(this),1);});re.c('wait').require('update').extend({wait:function(time,callback){var c=0;this.addSignal('update',function(t){c+=t;if(c>=time){this.callback.apply(this,Array.prototype.slice.call(arguments,2));return false;}});}});re.c('anchor').extend({centerX:function(o){o=o||0;this.posX=Math.floor(re.sys.sizeX*0.5-this.sizeX*0.5+o);return this;},centerY:function(o){o=o||0;this.posY=Math.floor(re.sys.sizeY*0.5-this.sizeY*0.5+o);return this;},right:function(x){x=x||0;this.posX=Math.floor(re.sys.sizeX-this.sizeX+x);return this;},left:function(x){x=x||0;this.posX=Math.floor(x);return this;},top:function(y){y=y||0;this.posY=Math.floor(y);return this;},bottom:function(y){y=y||0;this.posY=Math.floor(re.sys.sizeY-this.sizeY+y);return this;}}).inherit({sizeX:0,sizeY:0,posX:0,posY:0});re.c('bitfont').require('draw').inherit({text:'',charOffset:32}).extend({isVisible:function(){return this.text.length!=0&&this.bitmap&&this.parent('draw','isVisible');},draw:function(c){var slot=0,charWidth,code,charPos;for(var i=0,l=this.text.length;i<l;++i){code=this.text.charCodeAt(i)-this.charOffset;charWidth=this.charWidths[code];if(!this.charCache[code]){charPos=0;for(var p=0;p<code;++p){charPos+=this.charWidths[p]+1;}
109
+ this.charCache[code]=charPos;}
110
+ c.drawImage(this.bitmap,this.charCache[code],0,charWidth,this.bitmap.height,-this.regX+slot,-this.regY,charWidth,this.bitmap.height);slot+=charWidth;}
111
+ this.sizeX=slot;this.sizeY=this.bitmap.height;},updateSize:function(){var t=0;for(var p=0;p<this.text.length;p++){t+=this.charWidths[p];}
112
+ this.sizeX=t;if(this.bitmap){this.sizeY=this.bitmap.height;}else{this.sizeY=0;}
113
+ return this;},setText:function(text){this.text=text;this.updateSize();return this;}}).init(function(){if(!this.charCache){this.charCache={};}
114
+ this.updateSize();});re.c('bitmap').require('draw').extend({setBitmap:function(b){this.bitmap=b;if(b){this.sizeX=b.width;this.sizeY=b.height;}
115
+ return this;},isVisible:function(){return this.bitmap&&this.parent('draw','isVisible');},draw:function(c){c.drawImage(this.bitmap,-this.regX,-this.regY,this.sizeX,this.sizeY);return this;}}).init(function(){if(this.bitmap){this.setBitmap(this.bitmap);}});re.c('circle').require('draw').inherit({color:'#82d5f4'}).extend({draw:function(c){c.fillStyle=this.color;c.beginPath();c.arc(-this.regX,-this.regY,this.sizeX,0,Math.PI*2,true);c.closePath();c.fill();},setRadius:function(r){this.sizeX=this.sizeY=r;return this;}});re.c('font').require('draw').inherit({font:"14px sans-serif",textColor:'#000000',textAlign:'',text:''}).extend({isVisible:function(){return this.text.length!=0;},setText:function(t){this.text=t;return this;},draw:function(c){c.font=this.font;c.fillStyle=this.textColor;c.fillText(this.text,-this.regX,-this.regY);}});re.c('group').inherit({posX:0,posY:0}).extend({group:function(){for(var i=0;i<arguments.length;i++){arguments[i].comp('group').group}},ungroup:function(e){},getScreenX:function(){var x=this.posX;if(this.group)x+=this.group.posX;if(this.screen)x+=this.screen.posX;return x;},getScreenY:function(){var y=this.posY;if(this.group)y+=this.group.posY;if(this.screen)y+=this.screen.posY;return y;},getGroupX:function(){var x=this.posX;if(this.group){x+=this.group.posX;}
116
+ return x;},getGroupY:function(){var y=this.posY;if(this.group){y+=this.group.posY;}
117
+ return y;},setGroupX:function(x){},setGroupY:function(y){}});re.c('rect').require('draw').inherit({color:'#82d5f4'}).extend({draw:function(c){c.fillStyle=this.color;c.fillRect(-this.regX,-this.regY,this.sizeX,this.sizeY);}});re.c('screen').require('hittest').extend({setPos:function(x,y){if(arguments.length==1){y=x.posY;x=x.posX;}
118
+ this.posX=x-this.regX;this.posY=y-this.regY;return this;},toScreenX:function(x){return x+this.posX+this.offX;},toScreenY:function(y){return y+this.posY+this.offY;}}).inherit({posX:0,posY:0,regX:0,regY:0,sizeX:0,sizeY:0,offX:0,offY:0});re.c('sprite').require('bitmap bisect').inherit({frameX:0,frameY:0}).extend({setFrameId:function(id){this.frameX=this.biToXt(id);this.frameY=this.biToYt(id);return this;},getFrameId:function(){return this.toBi(this.frameX,this.frameY);},draw:function(c){c.drawImage(this.bitmap,this.frameX*this.sizeX,this.frameY*this.sizeY,this.sizeX,this.sizeY,-this.regX,-this.regY,this.sizeX,this.sizeY);return this;},flick:function(c){this.setFrameId(c);}});re.c('keyboard').global({listeners:[],keyCodes:{65:'a',66:'b',67:'c',68:'d',69:'e',70:'f',71:'g',72:'h',73:'i',74:'j',75:'k',76:'l',77:'m',78:'n',79:'o',80:'p',81:'q',82:'r',83:'s',84:'t',85:'u',86:'v',87:'w',88:'x',89:'y',90:'z',48:'0',49:'1',50:'2',51:'3',52:'4',53:'5',54:'6',55:'7',56:'8',57:'9',112:'f1',113:'f2',114:'f3',115:'f4',116:'f5',117:'f6',118:'f7',119:'f8',120:'f9',121:'f10',122:'f11',123:'f12',16:'shift',17:'ctrl',18:'alt',24:'cmd',255:'fn',8:'backspace',13:'enter',32:'space',27:'esc',9:'tab',20:'capslock',91:'windows',46:'delete',36:'home',35:'end',33:'pageup',34:'pagedown',37:'left',38:'up',39:'right',40:'down',96:'`',45:'-',187:'=',219:'[',221:']',220:'\\',59:';',222:"'",188:',',190:'.',191:'/'},keyboardEvent:function(e){var that=re.c('keyboard');if(that.body!=document.activeElement){return;}
119
+ var c=e.keyCode||e.which;var key=that.keyCodes[c];if(re.c('pressed').preventDefault&&re.c('pressed').preventDefault[key]){if(e.preventDefault)
120
+ e.preventDefault();else
121
+ e.returnValue=false;}
122
+ if(re.c('pressed')._pressed){re.c('pressed')._pressed[key]=(e.type=='keydown');}
123
+ for(var k=0;k<that.listeners.length;k++){that.listeners[k].signal(e.type,key,e).signal(e.type+':'+key,key,e);}},active:false,initListeners:function(){if(!this.active){this.active=true;re.listener('keydown',this.keyboardEvent,false);re.listener('keyup',this.keyboardEvent,false);this.body=re.$('body')[0];}}}).init(function(c){c.initListeners();c.listeners.push(this);}).dispose(function(c){c.listeners.splice(c.listeners.indexOf(this),1);});re.c('mouse').global({listeners:[],mouseAction:function(e){var b;if(e.which==null){if(e.button<2){b='left';}else if(e.button==4){b='middle';}else{b='right';}}else{if(e.which<2){b='left';}else if(e.which==2){b='middle';}else{b='right';}}
124
+ b='mouse:'+b;if(re.c('pressed')._pressed){re.c('pressed')._pressed[b]=(e.type=='mousedown');}
125
+ var c=false;if(re.c('pressed').preventDefault){if(re.c('pressed').preventDefault[b]){if(e.preventDefault)
126
+ e.preventDefault();else
127
+ e.returnValue=false;c=true;}}
128
+ re.c('mouse').mouseEvent(e);if(c)return false;},mouseEvent:function(e){var x;var y;if(e.pageX||e.pageY){x=e.pageX;y=e.pageY;}else{x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;}
129
+ if(re.sys.canvas){x-=re.sys.canvas.offsetLeft;y-=re.sys.canvas.offsetTop;}
130
+ if(x<0||y<0||y>re.sys.sizeY||x>re.sys.sizeX){return;}
131
+ var that=re.c('mouse');var c,t,sx,sy;for(var i=0,l=that.listeners.length;i<l;i++){t=that.listeners[i];if(t.toScreen&&t.screen){sx=t.screen.toScreenX(x);sy=t.screen.toScreenY(y);}else{sx=x;sy=y;}
132
+ t.signal(e.type,sx,sy,e);}},active:false,initListeners:function(){if(!this.active){this.active=true;re.listener('mousedown',this.mouseAction,false);re.listener('mouseup',this.mouseAction,false);re.listener('mousemove',this.mouseEvent,false);re.listener('click',this.mouseEvent,false);re.listener('dblclick',this.mouseEvent,false);re.listener('contextmenu',this.mouseEvent,false);}}}).inherit({toScreen:false}).init(function(c){c.initListeners();c.listeners.push(this);}).dispose(function(c){c.listeners.splice(c.listeners.indexOf(this),1);});re.c('pressed').global({_pressed:{},preventDefault:{}}).extend({pressed:function(){return re.pressed.apply(this,arguments);},preventDefault:function(){re.preventDefault.apply(this,arguments);return this;}}).init(function(){re._c.keyboard.initListeners();re._c.mouse.initListeners();re._c.touch.initListeners();});re.pressed=function(key){var that=re.c('pressed');var c=arguments;if(typeof key=='object')c=key;for(var i=0;i<c.length;i++){if(that._pressed[c[i]]){return true;}}
133
+ return false;};re.preventDefault=function(key){var p=key.split(' ');if(p.length>1){for(var k in p){this.preventDefault(p[k]);}
134
+ return this;}
135
+ re.c('pressed').preventDefault[key]=true;return this;};re.c('touch').global({touchEvent:function(e){},active:false,initListeners:function(){if(!this.active){this.active=true;re.listener('touchstart',this.touchEvent,false);re.listener('touchmove',this.touchEvent,false);re.listener('touchend',this.touchEvent,false);}}}).init(function(c){c.initListeners();});re.c('bind').require('update').namespace({update:function(){if(!this.bind)return;if(this.posX<this.bindMinX){this.posX=this.bindMinX;}else if(this.posX>this.bindMaxX){this.posX=this.bindMaxX;}
136
+ if(this.posY<this.bindMinY){this.posY=this.bindMinY;}else if(this.posY>this.bindMaxY){this.posY=this.bindMaxY;}}}).inherit({posX:0,posY:0,bindMinX:0,bindMinY:0,bindMaxX:10,bindMaxY:10,bind:true}).extend({setBind:function(minx,miny,maxx,maxy){this.bindMinX=minx;this.bindMinY=miny;this.bindMaxX=maxx;this.bindMaxY=maxy;return this;}}).init(function(){this.addSignal('update',this.bind_update);}).dispose(function(){this.removeSignal('update',this.bind_update);});re.bisect=re.c('bisect').global({biToX:function(bi,width,size){return this.biToXt(bi,width)*size;},biToY:function(bi,width,size){return this.biToYt(bi,width)*size;},biToXt:function(bi,width,size){return Math.floor(bi%(width/size));},biToYt:function(bi,width,size){return Math.floor((bi*size)/(width-0.1));},toBi:function(xt,yt,w,s){return(xt+(yt*(w/s)))/s;}}).extend({biToX:function(bi){return this.biToXt(bi,this.bisect)*this.sizeX;},biToY:function(bi){return this.biToYt(bi,this.bisect)*this.sizeY;},biToXt:function(bi){return Math.floor(bi%(this.bisect/this.sizeX));},biToYt:function(bi){return Math.floor((bi*this.sizeY)/(this.bisect-0.1));},toBi:function(xt,yt){return(xt+(yt*(this.bisect/this.sizeX)))/this.sizeX;}}).inherit({bisect:1,sizeX:1,sizeY:1});re.c('body').extend({touches:function(x,y,w,h){return!(x>this.posX+this.bodX-this.padX||x+w<this.posX+this.padX||y>this.posY+this.bodY-this.padY||y+h<this.posY+this.padY);},touchesBody:function(x,y,bx,by,px,py){return!(x+px>this.posX+this.bodX+this.padX||x+bx-px<this.posX+this.padX||y+py>this.posY+this.bodY-this.padY||y+by-py<this.posY+this.padY);}}).inherit({padX:0,padY:0,bodX:1,bodY:1});re.c('drag').inherit({posX:0,posY:0,dragX:0,dragY:0,dragging:false}).extend({startDrag:function(x,y){if(!this.dragging){this.dragging=true;this.dragX=x;this.dragY=y;}},endDrag:function(){this.dragging=false;},updateDrag:function(x,y){if(this.dragging){this.posX+=x-this.dragX;this.posY+=y-this.dragY;this.dragX=x;this.dragY=y;}}});re.c('hitmap').require('arraymap').extend({hitValue:1,checkAxisX:function(value,x,y,vx,vy){return value==this.hitValue;},checkAxisY:function(value,x,y,vx,vy){return value==this.hitValue;},checkHit:function(posX,posY,velX,velY,bodX,bodY,padX,padY){if(arguments.length==1){var velX=posX.velX;var velY=posX.velY;var bodX=posX.bodX;var bodY=posX.bodY;var padX=posX.padX;var padY=posX.padY;var posY=posX.posY;posX=posX.posX;}
137
+ var res={posX:posX,posY:posY,tarX:-1,tarY:-1};var step=~~(Math.max(Math.abs(velX),Math.abs(velY))/((re.tile.sizeX+re.tile.sizeY)*0.5)+0.5);if(step>1){var sx=velX/step;var sy=velY/step;for(var i=0;i<step&&(sx||sy);i++){this.hitmap_step(res,posX,posY,sx,sy,bodX,bodY,padY,padY);if(res.hitX){sx=0;}
138
+ if(res.hitY){sy=0;}}}else{this.hitmap_step(res,posX,posY,velX,velY,bodX,bodY,padX,padY);}
139
+ return res;}}).namespace({step:function(res,x,y,vx,vy,width,height,padx,pady){res.posX+=vx;res.posY+=vy;var t,ty,tx;if(vx){t=re.tile.sizeX;var offsetx=(vx>0?width-padx:padx);var firsty=Math.floor((y+pady)/t);var lasty=Math.ceil((y+height-pady)/t);tx=Math.floor((x+vx+offsetx)/t);var offx=(vx<0?t:0);if(tx>=0&&tx<this.lengthX&&lasty>=0&&firsty<this.lengthY){for(ty=firsty;ty<lasty;ty++){if(this.map[ty]){this.signal('hit',this.map[ty][tx],tx,ty);if(this.checkAxisX(this.map[ty][tx],x,y,vx,vy)){res.hitX=true;res.posX=tx*t+offx-offsetx;res.tarX=tx*t;res.tarY=ty*t;break;}}}}}
140
+ if(vy){t=re.tile.sizeY;var offsety=(vy>0?height-pady:pady);var firstx=Math.floor((res.posX+padx)/t);var lastx=Math.ceil((res.posX+width-padx)/t);ty=Math.floor((y+vy+offsety)/t);var offy=(vy<0?t:0);if(ty>=0&&ty<this.lengthY&&lastx>=0&&firstx<this.lengthX){for(tx=firstx;tx<lastx;tx++){if(this.map[ty]){this.signal('hit',this.map[ty][tx],tx,ty);if(this.checkAxisY(this.map[ty][tx],x,y,vx,vy)){res.hitY=true;res.posY=ty*t+offy-offsety;res.tarX=tx*t;res.tarY=ty*t;break;}}}}}}});re.c('hittest').inherit({posX:0,posY:0,sizeX:0,sizeY:0,touches:function(x,y,w,h){return!(x>this.posX+this.sizeX||x+w<this.posX||y>this.posY+this.sizeY||y+h<this.posY);}});re.physics=re.c('physics').require('update').global({graX:0,graY:0,minVel:0.01}).inherit({posX:0,posY:0,velX:0,velY:0,velMaxX:100,velMaxY:100,friX:0.9,friY:0.4,accX:0,accY:0,resX:0,resY:0,masX:1,masY:1,padX:0,padY:0,bodX:1,bodY:1}).namespace({update:function(t){this.velX=this.force(this.velX,this.accX,this.friX,this.graX,this.masX,this.velMaxX);this.velY=this.force(this.velY,this.accY,this.friY,this.graY,this.masY,this.velMaxY);if(this.hitmap){this.aftermath(this.hitmap.checkHit(this));}else{this.aftermath(this.posX+this.velX,this.posY+this.velY);}}}).extend({aftermath:function(posx,posy,hitx,hity,tarx,tary){if(arguments.length==1){hitx=posx.hitX;hity=posx.hitY;tarx=posx.tarX;tary=posx.tarY;posy=posx.posY;posx=posx.posX;}
141
+ this.posX=posx;this.posY=posy;this.signal('aftermath',hitx,hity,tarx,tary);if(hitx){this.velX=this.forceRes(this.velX,this.resX);}
142
+ if(hity){this.velY=this.forceRes(this.velY,this.resY);}},forceRes:function(vel,res){return vel*-res;},forceGra:function(gra,mas){return gra*mas;},forceVel:function(vel,acc,fri){return(vel+acc)*fri;},force:function(vel,acc,fri,gra,mas,max){var v=this.forceVel(vel,acc,fri)+this.forceGra(gra,mas);v=Math.min(max,Math.max(-max,v));if(Math.abs(v)<re.physics.minVel){v=0;}
143
+ return v;},isIdle:function(){return(this.velY==0&&this.velX==0&&this.accX==0&&this.accY==0);}}).init(function(c){this.hitmap=re.hitmap;this.graX=c.graX;this.graY=c.graY;this.addSignal('update',this.physics_update);}).dispose(function(){this.removeSignal('update',this.physics_update);});re.c('point').inherit({posX:0,posY:0}).extend({setPos:function(x,y){if(arguments.length==1){if(x.y)
144
+ this.posY=x.posY;if(x.x)
145
+ this.posX=x.posX;}else{this.posX=x;this.posY=y;}
146
+ return this;},setPosX:function(x){this.posX=x;return this;},setPosY:function(y){this.posY=y;return this;},distanceTo:function(x,y){if(arguments.length==1){y=x.posY;x=x.posX;}
147
+ var kx,ky;kx=x-this.posX>>31;ky=y-this.posY>>31;return Math.round(((x-this.posX^kx)-kx)+((y-this.posY^ky)-ky));}});re.tile=re.c('tile').global({sizeX:40,sizeY:40,roundX:function(x,size){if(arguments.length==1){size=re.tile.sizeX;}
148
+ return re.tile.roundTileX(x)*size;},roundY:function(y,size){if(arguments.length==1){size=re.tile.sizeY;}
149
+ return re.tile.roundTileY(y)*size;},roundTileX:function(x,size){if(arguments.length==1){size=re.tile.sizeX;}
150
+ return Math.round((x-size*0.5)/size);},roundTileY:function(y,size){if(arguments.length==1){size=re.tile.sizeY;}
151
+ return Math.round((y-size*0.5)/size);}}).inherit({posX:0,posY:0}).init(function(){if(!this.sizeX)
152
+ this.sizeX=re.tile.sizeX;if(!this.sizeY)
153
+ this.sizeY=re.tile.sizeY;}).extend({setTileFromPoint:function(x,y){this.posX=re.tile.roundX(x);this.posY=re.tile.roundY(y);return this;},setTile:function(xt,yt){this.setTileX(xt);this.setTileY(yt);return this;},setTileX:function(value){this.posX=Math.floor(value*this.sizeX);return this;},getTileX:function(){return Math.floor(this.posX/this.sizeX);},setTileY:function(value){this.posY=Math.floor(value*this.sizeY);return this;},getTileY:function(){return Math.floor(this.posY/this.sizeY);}});re.c('playlist');re.sound=re.c('sound').global({enabled:true}).namespace({hasEvent:false,loops:0}).extend({play:function(loop){if(!this.sound||!re.sound.enabled)return this;var c=this.sound;var that=this;c.currentTime=0;c.play();if(loop){this.sound_loops=0;if(!this.sound_hasEvent){this.sound_hasEvent=true;c.addEventListener('ended',function(){that.signal('sounded',that.sound_loops,loop);if(loop==-1||that.sound_loops<loop){c.currentTime=0;that.sound_loops++;}},false);}}
154
+ return this;},resume:function(){this.sound.play();return this;},pause:function(){this.sound.pause();return this;},currentTime:function(){return this.sound.currentTime;},ended:function(){return this.sound.ended;}});re.c('arraymap').inherit({lengthX:0,lengthY:0}).extend({value:0,set:function(x,y,value){while(y>=this.map.length){var m=new Array(this.map[0]);for(var l in m){m[l]=this.value;}
155
+ this.map.push(m);}
156
+ while(x>=this.map[this.map.length-1].length){for(var k=0;k<this.map.length;k++){this.map[k].push(this.value);}}
157
+ this.lengthX=this.map[y].length;this.lengthY=this.map.length;this.map[y][x]=value;return this;},within:function(x,y){if(y<0||y>=this.lengthY||x<0||x>=this.lengthX){return false;}
158
+ return true;},get:function(x,y){if(this.within(x,y)){return this.map[y][x];}
159
+ return null;},copy:function(a){for(var y=0;y<a.length;y++){for(var x=0;x<a[0].length;x++){this.set(x,y,a[y][x]);}}
160
+ return this;},copyByRef:function(m){this.map=m;if(m.length>0){this.lengthX=m[0].length;}else{this.lengthX=0;}
161
+ this.lengthY=m.length;return this;}}).init(function(){this.map=[];});re.c('flicker').require('update timestep').implement('flick').init(function(){this.flicker_reels={};this.flicker_old={};this.flicker_reel={};this.flicker_flickering='';}).extend({flicker_stop:function(){if(this.flickering()){this.signal('animated',this.flicker_flickering);this.flicker_flickering='';this.stepProgress=0;this.frameX=this.flicker_oldX;this.frameY=this.flicker_oldY;this.removeSignal('update',this.flicker_update);}
162
+ return this;},flicker_update:function(t){this.timestep(t,function(){var c=this.flicker_reel;if(this.flicker_frame==this.flicker_reel.frames.length){if(c.loops==-1||--this.flicker_loops>=1){this.flicker_frame=0;}else{this.flicker_stop();return;}}
163
+ this.flick(c.frames[this.flicker_frame]);this.flicker_frame++;});},addFlicker:function(id,loops,duration,frames){if(typeof id=='object'){for(var i in id){if(!id.hasOwnProperty(i))continue;var c=id[i].slice();c.unshift(i);this.addFlicker.apply(this,c);}
164
+ return this;}
165
+ if(typeof frames=='string')frames=frames.split(' ');this.flicker_reels[id]={frames:frames,duration:duration,loops:loops};return this;},removeFlicker:function(id){if(typeof id=='object'){for(var i in id){if(!id.hasOwnProperty(i))continue;this.removeFlicker.call(this,id[i]);}
166
+ return this;}
167
+ delete this.flicker_reels[id];return this;},flicker:function(id,loops,duration,frames){if(arguments.length==0){return this.flicker_stop();}
168
+ if(id==this.flicker_flickering)return;if(!this.flicker_reels[id]){return this;}
169
+ var r=this.flicker_reels[id];var c=this.flicker_reel;c.loops=(isNaN(loops))?r.loops:loops;c.duration=(isNaN(duration))?r.duration:duration;c.frames=(typeof frames=='object')?frames:r.frames;this.flicker_loops=c.loops;this.stepProgress=0;this.stepSize=c.duration/c.frames.length;this.flicker_oldX=this.frameX;this.flicker_oldY=this.frameY;this.flicker_frame=0;this.flick(c.frames[this.flicker_frame++]);if(!this.flickering()){this.addSignal('update',this.flicker_update);}
170
+ this.flicker_flickering=id;return this;},flickering:function(id){if(id){return this.flicker_flickering==id;}
171
+ return this.flicker_flickering!='';}});re.c('timestep').inherit({stepProgress:0,stepSize:0.3}).extend({timestep:function(progress,callback,context){this.stepProgress+=progress;while(this.stepProgress>=this.stepSize){callback.call((context)?context:this);this.stepProgress-=this.stepSize;}}})
172
+ re.c('storage').init(function(c,type){this.storage=(type=='session')?sessionStorage:localStorage;}).extend({length:function(){return this.storage.length;},key:function(index){return this.storage.key(index);},getItem:function(key){return this.storage.getItem(key);},getJson:function(key){return JSON.parse(this.getItem(key));},setItem:function(key,data){if(typeof data!='number'||typeof data!='string'){data=JSON.stringify(data);}
173
+ this.storage.setItem(key,data);return this;},removeItem:function(key){this.storage.removeItem(key);return this;},clear:function(){this.storage.clear();return this;}})
174
+ re.log=function(){try{console.log.apply(console,arguments);}catch(e){try{opera.postError.apply(opera,arguments);}catch(e){alert(Array.prototype.join.call(arguments," "));}}};re.c('log').extend('log',re.log);re.c('polyfill').extend({requestAnimationFrame:function(callback,canvas){return requestAnimFrame(callback,canvas);}}).run(function(){window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1000/60);};});re.c('random').extend({random:function(max,min){switch(arguments.length){case 0:return Math.random();case 1:return Math.random()*max;case 2:return Math.random()*(max-min+1)+min;}},randomInt:function(max,min){return Math.floor(this.random.apply(this,arguments));}}).run(function(){var b=re.e('random');re.random=b.random;re.randomInt=b.randomInt;b.dispose();});re.scene=function(title){var s=re.c('scene');if(title.charAt(0)=='-'){delete s._scenes[title.substr(1)];return s;}else if(s._scenes[title]){var current=arguments.callee.current;var t=s._scenes[current];if(t&&typeof t.scene_exit=='function'){t.scene_exit.call(t,title);}
175
+ arguments.callee.current=title;s.curent=title;t=s._scenes[title];if(typeof t.scene_enter=='function'){t.scene_enter.apply(t,Array.prototype.slice.call(arguments,1));}}else{re.e('scene:'+title);}
176
+ return s._scenes[title];};re.c('scene').global({_scenes:{}}).init(function(c,title){c._scenes[title]=this;this.sceneName=title;}).dispose(function(c){delete c._scenes[this.sceneName];}).extend({enter:function(m){this.scene_enter=m;return this;},exit:function(m){this.scene_exit=m;return this;},scene:function(){return re.scene.apply(this,arguments);}});re.c('sheet').global({sheet:function(map,padX,padY,sizeX,sizeY){var frameWidth=sizeX||re.tile.sizeX;var frameHeight=sizeY||re.tile.sizeY;if(padX){frameWidth+=padX;}
177
+ if(padY){frameHeight+=padY;}
178
+ var x;var y;for(var p in map){x=map[p][0]||0;y=map[p][1]||0;re.c(p).require('sprite').extend({frame:{x:x,y:y},size:{x:frameWidth,y:frameHeight},bitmap:this.bitmap});}
179
+ return this;}}).require('tile').extend({sheet:re.sheet});re.sheet=re.c('sheet').sheet;re.c('support').global({support:function(s){var that=re.c('support');if(arguments.length>1){var d;for(var i=0;i<arguments.length;i++){d=arguments[i];if(that.support(d)){return d;}}
180
+ return false;}
181
+ var k=s.split(' ');var stat=true;for(var j in k){stat=stat&&!!that[k[j]];}
182
+ return stat;}}).extend({support:function(s){return re.c('support').call(this,s);}}).run(function(){var c=re.c('support');re.support=c.support;c.canvas=!!document.createElement('canvas').getContext;c.text=!!(c.canvas&&typeof document.createElement('canvas').getContext('2d').fillText=='function');var ele=document.createElement('audio');try{if(c.audio=!!ele.canPlayType){c.ogg=ele.canPlayType('audio/ogg; codecs="vorbis"');c.mp3=ele.canPlayType('audio/mpeg;');c.wav=ele.canPlayType('audio/wav; codecs="1"');c.aac=ele.canPlayType('audio/x-m4a;')||ele.canPlayType('audio/aac;');for(var i in c){if(c[i]=='no'||c[i]==''){c[i]=false;}}}}catch(e){}
183
+ try{c.localstorage=!!localStorage.getItem;}catch(e){c.localstorage=false;}
184
+ c.worker=!!window.Worker;c.webgl=!!window.WebGLRenderingContext;c.touch='ontouchstart'in window;});
@@ -0,0 +1,37 @@
1
+
2
+ require 'entityjs/game'
3
+ require 'entityjs/min'
4
+ require 'entityjs/refresh'
5
+ require 'entityjs/comp'
6
+
7
+ module Entityjs
8
+ class Command
9
+
10
+ def self.run(command, args=nil)
11
+
12
+ case command
13
+ when 'game'
14
+ Entityjs::Game.generate(command, args[1..-1])
15
+ puts 'generated game'
16
+
17
+ when 'min'
18
+ Entityjs::Min.generate(args)
19
+
20
+ when 'refresh'
21
+ Entityjs::Refresh.generate(args)
22
+
23
+ when 'comp'
24
+ Entityjs::Comp.generate(args)
25
+
26
+ else
27
+ puts 'Error enter in one of the following...'
28
+ puts 'entityjs game [name] [comp]+'
29
+ puts 'entityjs comp [name]'
30
+ puts 'entityjs min'
31
+ puts 'entityjs refresh'
32
+
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ module Entityjs
2
+
3
+ class Comp
4
+
5
+ def self.generate(name)
6
+
7
+ end
8
+
9
+ end
10
+
11
+ end