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,93 @@
1
+ module Entityjs
2
+
3
+ class Game
4
+
5
+ def self.generate(name, comps=[])
6
+ @root = name
7
+
8
+ #create directory
9
+ self.create_dir(name)
10
+
11
+ Dir.chdir(Dir.pwd+'/'+name)
12
+
13
+ #create html file
14
+ create_file('play.html')
15
+
16
+ create_file('config.yml')
17
+
18
+ #create lib
19
+ self.create_dir('lib')
20
+
21
+ #create src directory
22
+ self.create_dir('src')
23
+
24
+ Dir.chdir(Dir.pwd+'/src')
25
+
26
+ self.create_file('init.js')
27
+
28
+ self.create_dir('display')
29
+
30
+ self.create_dir('plugins')
31
+
32
+ self.create_dir('scenes')
33
+
34
+ Dir.chdir(Dir.pwd+'/scenes')
35
+ self.create_file('load.js')
36
+ self.create_file('home.js')
37
+
38
+ #create assets
39
+ Dir.chdir(Dir.pwd+'/../..')
40
+
41
+ self.create_dir('assets')
42
+
43
+ Dir.chdir(Dir.pwd+'/assets')
44
+
45
+ self.create_dir('sounds')
46
+
47
+ self.create_dir('images')
48
+
49
+ self.create_dir('levels')
50
+
51
+ #create test directory
52
+ Dir.chdir(Dir.pwd+'/..')
53
+ self.create_dir('tests')
54
+
55
+ Dir.chdir(Dir.pwd+'/tests')
56
+
57
+ self.create_dir('scenes')
58
+ self.create_dir('display')
59
+
60
+ Entityjs::Command.run('comp', comps)
61
+
62
+ Entityjs::Command.run('refresh')
63
+
64
+ return true
65
+ end
66
+
67
+ def self.create_file(name)
68
+ template = File.expand_path(File.dirname(__FILE__) + '/../blank/'+name)
69
+ FileUtils.cp template, name
70
+
71
+ path = "/#{name}"
72
+
73
+ cut = Dir.pwd.split(@root)
74
+
75
+ if cut.length == 2
76
+ path = cut.pop+path
77
+ end
78
+
79
+ puts "Created: #{path}"
80
+ end
81
+
82
+ def self.create_dir(name)
83
+ begin
84
+ Dir::mkdir(name)
85
+ puts "Created: /#{name}"
86
+ rescue
87
+ puts "Directory: /#{name} already exists!"
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,11 @@
1
+ module Entityjs
2
+
3
+ class Min
4
+
5
+ def self.generate()
6
+
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,14 @@
1
+ module Entityjs
2
+
3
+ class Refresh
4
+
5
+ def self.generate(args=nil)
6
+
7
+
8
+
9
+ puts 'Refreshed debug.js'
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,3 @@
1
+ module Entityjs
2
+ VERSION = "0.2.2"
3
+ end
data/lib/entityjs.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "entityjs/version"
2
+
3
+ module Entityjs
4
+
5
+
6
+ end
data/license.txt ADDED
@@ -0,0 +1 @@
1
+ /* EntityJS v$VERSION http://entityjs.com | License http://entityjs.com/license */
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'game' do
4
+
5
+ it 'should generate game mygame' do
6
+
7
+ Entityjs::Game.generate('mygame').should == true
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ root = File.dirname(__FILE__)+'/../'
2
+
3
+ Dir[root+"lib/entityjs/*.rb"].each {|file| require file }
@@ -0,0 +1,306 @@
1
+
2
+ /*
3
+ Quick way to convert sentences to arrays.
4
+ */
5
+ var __z = function(n, r){
6
+ this._checkFinal();
7
+
8
+ if(!this[n]){
9
+ this[n] = [];
10
+ }
11
+
12
+ if(typeof r == 'string'){
13
+ this[n] = this[n].concat(r.split(' '));
14
+ } else {
15
+ this[n] = this[n].concat(r);
16
+ }
17
+
18
+ return this;
19
+ };
20
+
21
+ /*
22
+ If component exists, the component will NOT be overwritten.
23
+
24
+ @return component reference
25
+ */
26
+ re.comp = re.c = function(title){
27
+
28
+ if(!re._c[title]){
29
+ re._c[title] = new re.comp.init(title);
30
+ }
31
+
32
+ return re._c[title];
33
+ };
34
+
35
+ re.comp.init = function(name){
36
+
37
+ this.name = name;
38
+ this._re_signals = {};
39
+ this._re_inherits = {};
40
+ this._re_extends = {};
41
+ this._re_final = false;
42
+ };
43
+
44
+ /*
45
+ p._re_requires = null;
46
+
47
+ p._re_init = null;
48
+
49
+ p._re_dispose = null;
50
+
51
+ p._re_asserts = null;
52
+
53
+ p._re_interface = null;
54
+ */
55
+
56
+ re.comp.init.prototype = {
57
+
58
+ _checkFinal:function(){
59
+
60
+ if(this._re_final){
61
+ throw this.name+' is final.';
62
+ }
63
+ },
64
+
65
+ global:function(obj, value){
66
+ this._checkFinal();
67
+
68
+ if(arguments.length == 1){
69
+
70
+ for(var type in obj){
71
+ this[type] = obj[type];
72
+ }
73
+
74
+ } else {
75
+ this[obj] = value;
76
+ }
77
+
78
+ return this;
79
+ },
80
+
81
+
82
+ require:function(r){
83
+ return __z.call(this, '_re_requires', r);
84
+ },
85
+
86
+ /*
87
+ Upon component init it will throw an error
88
+ if one of the listed components exist.
89
+
90
+ This prevents incompatible components from colliding.
91
+ */
92
+ assert:function(r){
93
+ return __z.call(this, '_re_asserts', r);
94
+ },
95
+
96
+ /*
97
+ The implement method checks and enforces implmentation
98
+ of the given keys. This can create interface components
99
+ for organization and query searches.
100
+
101
+ Forcing an interface on components will allow instant
102
+ runtime errors and save time.
103
+
104
+ //reccommended to put an i infront to represent an interface
105
+ re.c('ienemy')
106
+ //create an enemy interface
107
+ .interface('moveTo spawn attack runAway');
108
+
109
+ */
110
+ implement:function(r){
111
+ return __z.call(this, '_re_implments', r);
112
+ },
113
+
114
+ /*
115
+ Creates new names for a component.
116
+
117
+ //create a new alias of draw
118
+ re.c('draw')
119
+ .alias('bob');
120
+
121
+ //remove alias
122
+ re.c('draw')
123
+ .alias('-bob');
124
+
125
+ //aliases can even delete components itself
126
+ re.c('draw').alias('-draw');
127
+
128
+ //add two aliases
129
+ re.c('draw').alias('dr bob');
130
+
131
+ */
132
+ alias:function(s){
133
+ this._checkFinal();
134
+
135
+ var p = s.split(' ');
136
+
137
+ if(p.length > 1){
138
+
139
+ for(var i in p){
140
+ this.alias(p[i]);
141
+ }
142
+
143
+ return this;
144
+ }
145
+
146
+ if(s.charAt(0) == '-'){
147
+ //only remove if its a reference
148
+ if(re._c[s.substr(1)] == this){
149
+ delete re._c[s.substr(1)];
150
+ }
151
+ } else {
152
+
153
+ re._c[s] = this;
154
+ }
155
+
156
+ return this;
157
+ },
158
+
159
+ addSignal:function(){
160
+ return re.e.init.prototype.addSignal.apply(this, arguments);
161
+ },
162
+
163
+ removeSignal:function(){
164
+ return re.e.init.prototype.removeSignal.apply(this, arguments);
165
+ },
166
+
167
+ /*
168
+ Adds signal functionality to components.
169
+ All components will automatically call two signals, init and dispose.
170
+
171
+ Init on entity creation and dispose on entitiy disposition.
172
+
173
+ This is useful for 'watch tower' components that keep a list of
174
+ all entities that have its component. Check the cycle directory.
175
+
176
+ */
177
+ signal:function(){
178
+ return re.e.init.prototype.signal.apply(this, arguments);
179
+ },
180
+
181
+ /*
182
+ Default adds onto but doesn't overwrite values.
183
+ */
184
+ inherit:function(d, value){
185
+ this._checkFinal();
186
+
187
+ if(arguments.length == 1){
188
+
189
+ for(var k in d){
190
+ this._re_inherits[k] = d[k];
191
+ }
192
+
193
+ } else {
194
+
195
+ this._re_inherits[d] = value;
196
+
197
+ }
198
+
199
+ return this;
200
+ },
201
+
202
+ /*
203
+ The namespace method is used to put private component variables
204
+ in its own space. This prevents unwanted overrites.
205
+
206
+ re.c('draw')
207
+ .namespace({
208
+ pos:0,
209
+ type:'none'
210
+
211
+ });
212
+
213
+ //or
214
+ re.c('draw')
215
+ .namespace("pos", 0);
216
+
217
+ //Will cast to
218
+ this.draw_pos = 10;
219
+ this.draw_type = 'none';
220
+
221
+ */
222
+ namespace:function(obj, value){
223
+ this._checkFinal();
224
+ var name = this.name+'_';
225
+
226
+ if(arguments.length == 1){
227
+
228
+ for(var k in obj){
229
+ this._re_extends[name+k] = obj[k];
230
+ }
231
+
232
+ } else {
233
+ this._re_extends[name+obj] = value;
234
+ }
235
+
236
+ return this;
237
+ },
238
+
239
+ /*
240
+ extend overrides everything.
241
+ */
242
+ extend:function(d, value){
243
+ this._checkFinal();
244
+
245
+ if(!this._re_extends){
246
+ this._re_extends = {};
247
+ }
248
+ if(arguments.length == 1){
249
+
250
+ for(var k in d){
251
+ this._re_extends[k] = d[k];
252
+ }
253
+
254
+ } else {
255
+ this._re_extends[d] = value;
256
+ }
257
+
258
+ return this;
259
+ },
260
+
261
+ init:function(method){
262
+ this._checkFinal();
263
+
264
+ this._re_init = method;
265
+
266
+ return this;
267
+ },
268
+
269
+ dispose:function(method){
270
+ this._checkFinal();
271
+
272
+ this._re_dispose = method;
273
+
274
+ return this;
275
+ },
276
+
277
+ /*
278
+ The lock method prevents modification to the component.
279
+
280
+ This is handy to stop unexpected changes to a component.
281
+ */
282
+ lock:function(){
283
+ this._checkFinal();
284
+
285
+ this._re_final = true;
286
+
287
+ return this;
288
+ },
289
+
290
+ /*
291
+ The run method allows a function to be ran in the context
292
+ of the component.
293
+
294
+ Useful to keep everything in one big component.
295
+ */
296
+ run:function(method){
297
+ this._checkFinal();
298
+
299
+ //re.ready(function(){
300
+ method.call(this);
301
+ //});
302
+
303
+ return this;
304
+ }
305
+
306
+ };