entityjs 0.2.2 → 0.3.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.
- data/.gitignore +7 -6
- data/.rspec +2 -0
- data/README.md +170 -49
- data/Rakefile +9 -0
- data/bin/entityjs +24 -14
- data/entityjs.gemspec +15 -9
- data/lib/entityjs/assets.rb +167 -0
- data/lib/entityjs/command.rb +52 -27
- data/lib/entityjs/commands/build.rb +128 -0
- data/lib/entityjs/commands/comp.rb +74 -0
- data/lib/entityjs/commands/font.rb +73 -0
- data/lib/entityjs/commands/new.rb +59 -0
- data/lib/entityjs/commands/server.rb +54 -0
- data/lib/entityjs/commands/templates.rb +28 -0
- data/lib/entityjs/commands/test.rb +69 -0
- data/lib/entityjs/config.rb +130 -0
- data/lib/entityjs/dirc.rb +184 -0
- data/lib/entityjs/parsers/parse_tmx.rb +41 -0
- data/lib/entityjs/parsers/parse_xml.rb +39 -0
- data/lib/entityjs/version.rb +1 -1
- data/lib/entityjs.rb +53 -0
- data/license.txt +1 -1
- data/public/play.html +122 -0
- data/public/qunit/qunit.css +226 -0
- data/public/qunit/qunit.entity.js +190 -0
- data/public/qunit/qunit.input.js +200 -0
- data/public/qunit/qunit.js +1598 -0
- data/public/qunit/qunit.mock.js +97 -0
- data/public/tests.html +45 -0
- data/spec/javascripts/helpers/accept.png +0 -0
- data/spec/javascripts/helpers/alligator.mp3 +0 -0
- data/spec/javascripts/helpers/alligator.ogg +0 -0
- data/spec/javascripts/helpers/canvas.js +15 -0
- data/spec/javascripts/helpers/entityunit.js +50 -0
- data/spec/javascripts/helpers/factories.js +11 -0
- data/spec/javascripts/helpers/jquery-1.7.1.min.js +4 -0
- data/spec/javascripts/src/core/comp_spec.js +145 -0
- data/spec/javascripts/src/core/entity_spec.js +324 -0
- data/spec/javascripts/src/core/load_spec.js +71 -0
- data/spec/javascripts/src/core/query_spec.js +157 -0
- data/spec/javascripts/src/core/re_spec.js +61 -0
- data/spec/javascripts/src/core/system_spec.js +41 -0
- data/spec/javascripts/src/cycle/draw_spec.js +106 -0
- data/spec/javascripts/src/cycle/tick_spec.js +20 -0
- data/spec/javascripts/src/cycle/update_spec.js +86 -0
- data/spec/javascripts/src/display/align_spec.js +43 -0
- data/spec/javascripts/src/display/circle_spec.js +26 -0
- data/spec/javascripts/src/display/group_spec.js +7 -0
- data/spec/javascripts/src/display/image_spec.js +32 -0
- data/spec/javascripts/src/display/imgtext_spec.js +32 -0
- data/spec/javascripts/src/display/rect_spec.js +13 -0
- data/spec/javascripts/src/display/screen_spec.js +47 -0
- data/spec/javascripts/src/display/sprite_spec.js +28 -0
- data/spec/javascripts/src/display/text_spec.js +30 -0
- data/spec/javascripts/src/input/keyboard_spec.js +67 -0
- data/spec/javascripts/src/input/mouse_spec.js +133 -0
- data/spec/javascripts/src/input/pressed_spec.js +31 -0
- data/spec/javascripts/src/math/bisect_spec.js +59 -0
- data/spec/javascripts/src/math/body_spec.js +30 -0
- data/spec/javascripts/src/math/drag_spec.js +38 -0
- data/spec/javascripts/src/math/force_spec.js +134 -0
- data/spec/javascripts/src/math/hit_spec.js +28 -0
- data/spec/javascripts/src/math/hitmap_spec.js +52 -0
- data/spec/javascripts/src/math/limit_spec.js +35 -0
- data/spec/javascripts/src/math/point_spec.js +57 -0
- data/spec/javascripts/src/math/tile_spec.js +78 -0
- data/spec/javascripts/src/media/sound_spec.js +40 -0
- data/spec/javascripts/src/pattern/automap_spec.js +93 -0
- data/spec/javascripts/src/pattern/flicker_spec.js +66 -0
- data/spec/javascripts/src/pattern/timestep_spec.js +23 -0
- data/spec/javascripts/src/save/storage_spec.js +37 -0
- data/spec/javascripts/src/util/log_spec.js +9 -0
- data/spec/javascripts/src/util/polyfill_spec.js +13 -0
- data/spec/javascripts/src/util/random_spec.js +33 -0
- data/spec/javascripts/src/util/scene_spec.js +52 -0
- data/spec/javascripts/src/util/sheet_spec.js +25 -0
- data/spec/javascripts/src/util/support_spec.js +17 -0
- data/spec/javascripts/support/jasmine.yml +76 -0
- data/spec/javascripts/support/jasmine_config.rb +32 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/lib/entityjs/assets_spec.rb +216 -0
- data/spec/lib/entityjs/command_spec.rb +53 -0
- data/spec/lib/entityjs/commands/build_spec.rb +69 -0
- data/spec/lib/entityjs/commands/comp_spec.rb +45 -0
- data/spec/lib/entityjs/commands/font_spec.rb +7 -0
- data/spec/lib/entityjs/commands/new_spec.rb +20 -0
- data/spec/lib/entityjs/commands/templates_spec.rb +9 -0
- data/spec/lib/entityjs/commands/test_spec.rb +31 -0
- data/spec/lib/entityjs/config_spec.rb +19 -0
- data/spec/lib/entityjs/dirc_spec.rb +83 -0
- data/spec/lib/entityjs/version_spec.rb +9 -0
- data/spec/spec_helper.rb +21 -3
- data/spec/support/factories.rb +19 -0
- data/spec/support/mygame.rb +11 -0
- data/src/core/comp.js +318 -0
- data/src/core/entity.js +549 -0
- data/src/core/load.js +242 -0
- data/src/core/query.js +354 -0
- data/src/core/re.js +74 -0
- data/src/core/system.js +121 -0
- data/src/cycle/draw.js +178 -0
- data/src/cycle/tick.js +25 -0
- data/src/{entityjs/cycle → cycle}/tween.js +60 -60
- data/src/{entityjs/cycle → cycle}/update.js +86 -85
- data/src/{entityjs/cycle → cycle}/wait.js +22 -21
- data/src/{entityjs/cycle → cycle}/worker.js +8 -8
- data/src/display/align.js +45 -0
- data/src/display/circle.js +33 -0
- data/src/{entityjs/display → display}/group.js +62 -62
- data/src/display/image.js +35 -0
- data/src/display/imgtext.js +102 -0
- data/src/{entityjs/display → display}/rect.js +18 -18
- data/src/display/screen.js +57 -0
- data/src/display/sprite.js +54 -0
- data/src/display/text.js +44 -0
- data/src/{entityjs/input → input}/keyboard.js +152 -150
- data/src/input/mouse.js +111 -0
- data/src/input/pressed.js +41 -0
- data/src/{entityjs/input → input}/touch.js +24 -28
- data/src/math/bisect.js +84 -0
- data/src/math/body.js +70 -0
- data/src/{entityjs/math → math}/drag.js +44 -38
- data/src/math/force.js +143 -0
- data/src/math/hit.js +32 -0
- data/src/math/hitmap.js +167 -0
- data/src/math/limit.js +37 -0
- data/src/math/point.js +40 -0
- data/src/math/tile.js +109 -0
- data/src/media/channel.js +93 -0
- data/src/{entityjs/media → media}/playlist.js +4 -4
- data/src/media/sound.js +114 -0
- data/src/{entityjs/net → net}/socket.js +51 -51
- data/src/pattern/automap.js +133 -0
- data/src/{entityjs/pattern → pattern}/flicker.js +206 -213
- data/src/pattern/timestep.js +31 -0
- data/src/{entityjs/save → save}/database.js +6 -6
- data/src/{entityjs/save → save}/storage.js +47 -56
- data/src/{entityjs/util → util}/log.js +17 -25
- data/src/{entityjs/util → util}/polyfill.js +24 -24
- data/src/util/random.js +20 -0
- data/src/util/scene.js +102 -0
- data/src/util/sheet.js +35 -0
- data/src/{entityjs/util → util}/support.js +109 -132
- data/{examples/keys → templates/arrow_keys/assets/images}/arrow.png +0 -0
- data/templates/arrow_keys/config.yml +22 -0
- data/templates/arrow_keys/readme.txt +9 -0
- data/templates/arrow_keys/scripts/display/arrow.js +69 -0
- data/templates/arrow_keys/scripts/init.js +10 -0
- data/templates/arrow_keys/scripts/input/controls.js +35 -0
- data/templates/arrow_keys/scripts/scenes/home.js +20 -0
- data/templates/arrow_keys/scripts/scenes/load.js +57 -0
- data/templates/arrow_keys/tests/display/arrow_test.js +29 -0
- data/templates/arrow_keys/tests/init_test.js +4 -0
- data/templates/arrow_keys/tests/input/controls_test.js +32 -0
- data/templates/arrow_keys/tests/scenes/home_test.js +0 -0
- data/templates/arrow_keys/tests/scenes/load_test.js +16 -0
- data/templates/blank/config.yml +22 -0
- data/templates/blank/readme.txt +79 -0
- data/templates/platform/assets/images/bit.png +0 -0
- data/templates/platform/assets/images/hero.png +0 -0
- data/templates/platform/assets/images/items.png +0 -0
- data/templates/platform/assets/images/tiles.png +0 -0
- data/templates/platform/assets/levels/level1.tmx +44 -0
- data/templates/platform/assets/sounds/coin.mp3 +0 -0
- data/templates/platform/assets/sounds/coin.ogg +0 -0
- data/templates/platform/config.yml +22 -0
- data/templates/platform/readme.txt +87 -0
- data/templates/platform/scripts/display/bit.js +12 -0
- data/templates/platform/scripts/display/hero.js +77 -0
- data/templates/platform/scripts/display/tile.js +2 -0
- data/templates/platform/scripts/display/tsprite.js +17 -0
- data/templates/platform/scripts/init.js +7 -0
- data/templates/platform/scripts/items/coin.js +27 -0
- data/templates/platform/scripts/items/item.js +41 -0
- data/templates/platform/scripts/items/spring.js +25 -0
- data/templates/platform/scripts/scenes/home.js +10 -0
- data/templates/platform/scripts/scenes/load.js +27 -0
- data/templates/platform/scripts/scenes/play.js +31 -0
- data/templates/platform/scripts/util/counter.js +34 -0
- data/templates/platform/scripts/util/level.js +84 -0
- data/templates/platform/tests/display/bit_test.js +7 -0
- data/templates/platform/tests/display/hero_test.js +73 -0
- data/templates/platform/tests/display/tile_test.js +7 -0
- data/templates/platform/tests/display/tsprite_test.js +8 -0
- data/templates/platform/tests/factories.js +30 -0
- data/templates/platform/tests/items/coin_test.js +28 -0
- data/templates/platform/tests/items/item_test.js +36 -0
- data/templates/platform/tests/items/spring_test.js +21 -0
- data/templates/platform/tests/scenes/home_test.js +9 -0
- data/templates/platform/tests/scenes/load_test.js +11 -0
- data/templates/platform/tests/scenes/play_test.js +15 -0
- data/templates/platform/tests/util/counter_test.js +9 -0
- data/templates/platform/tests/util/level_test.js +29 -0
- metadata +249 -97
- data/build/build_debug.bat +0 -1
- data/build/build_min.bat +0 -1
- data/build/config.php +0 -64
- data/build/debug.php +0 -48
- data/build/files.php +0 -74
- data/build/jsmin.php +0 -376
- data/build/min.php +0 -50
- data/changelog.txt +0 -53
- data/examples/keys/keys.html +0 -59
- data/examples/keys/keys.js +0 -148
- data/examples/mouse/mouse.html +0 -58
- data/examples/mouse/mouse.js +0 -60
- data/examples/scenes/home.png +0 -0
- data/examples/scenes/scenes.html +0 -55
- data/examples/scenes/scenes.js +0 -134
- data/examples/scenes/win.png +0 -0
- data/examples/sounds/sound1.mp3 +0 -0
- data/examples/sounds/sound1.ogg +0 -0
- data/examples/sounds/sounds.html +0 -56
- data/examples/sounds/sounds.js +0 -44
- data/examples/style/background.png +0 -0
- data/examples/style/sheet.css +0 -762
- data/examples/tiles/tiles.html +0 -56
- data/examples/tiles/tiles.js +0 -85
- data/examples/tiles/tiles.png +0 -0
- data/lib/blank/config.js +0 -4
- data/lib/blank/config.yml +0 -21
- data/lib/blank/home.js +0 -11
- data/lib/blank/init.js +0 -7
- data/lib/blank/load.js +0 -21
- data/lib/blank/play.html +0 -29
- data/lib/entity.debug.js +0 -52
- data/lib/entity.min.js +0 -184
- data/lib/entityjs/comp.rb +0 -11
- data/lib/entityjs/game.rb +0 -93
- data/lib/entityjs/min.rb +0 -11
- data/lib/entityjs/refresh.rb +0 -14
- data/spec/lib/entityjs/game_spec.rb +0 -11
- data/src/entityjs/core/component.js +0 -306
- data/src/entityjs/core/entity.js +0 -516
- data/src/entityjs/core/load.js +0 -224
- data/src/entityjs/core/query.js +0 -410
- data/src/entityjs/core/re.js +0 -70
- data/src/entityjs/core/system.js +0 -125
- data/src/entityjs/cycle/draw.js +0 -185
- data/src/entityjs/cycle/ticker.js +0 -27
- data/src/entityjs/display/anchor.js +0 -53
- data/src/entityjs/display/bitfont.js +0 -93
- data/src/entityjs/display/bitmap.js +0 -37
- data/src/entityjs/display/circle.js +0 -30
- data/src/entityjs/display/font.js +0 -41
- data/src/entityjs/display/screen.js +0 -46
- data/src/entityjs/display/sprite.js +0 -37
- data/src/entityjs/input/mouse.js +0 -123
- data/src/entityjs/input/pressed.js +0 -81
- data/src/entityjs/math/bind.js +0 -76
- data/src/entityjs/math/bisect.js +0 -69
- data/src/entityjs/math/body.js +0 -39
- data/src/entityjs/math/hitmap.js +0 -165
- data/src/entityjs/math/hittest.js +0 -26
- data/src/entityjs/math/physics.js +0 -142
- data/src/entityjs/math/point.js +0 -57
- data/src/entityjs/math/tile.js +0 -91
- data/src/entityjs/media/channel.js +0 -93
- data/src/entityjs/media/sound.js +0 -110
- data/src/entityjs/pattern/arraymap.js +0 -89
- data/src/entityjs/pattern/timestep.js +0 -34
- data/src/entityjs/util/random.js +0 -38
- data/src/entityjs/util/scene.js +0 -101
- data/src/entityjs/util/sheet.js +0 -51
data/src/core/load.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
(function(re){
|
|
2
|
+
|
|
3
|
+
var b = function(assets){
|
|
4
|
+
return new re.load.init(assets);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
b.path = "";
|
|
8
|
+
|
|
9
|
+
b.imageExt = 'img';
|
|
10
|
+
b.soundExt = 'sfx';
|
|
11
|
+
b.images = ['gif', 'jpg', 'jpeg', 'png'];
|
|
12
|
+
b.sounds = ['wav', 'mp3', 'aac', 'ogg'];
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Loads images, sounds and other files into components.
|
|
16
|
+
|
|
17
|
+
All loaded assets will be put into a component with a ref to the asset.
|
|
18
|
+
|
|
19
|
+
//example of loading assets
|
|
20
|
+
re.load('tiles.png add.js attack.mp3')
|
|
21
|
+
.complete(function(arrayOfAssets){
|
|
22
|
+
//create new bitmap of tiles.png
|
|
23
|
+
re.e('bitmap tiles.png');
|
|
24
|
+
|
|
25
|
+
//new sound
|
|
26
|
+
re.e('sound attack.mp3');
|
|
27
|
+
|
|
28
|
+
//access image staticaly or localy
|
|
29
|
+
re.comp('tiles.png').image;
|
|
30
|
+
re.entity('tiles.png').image;
|
|
31
|
+
|
|
32
|
+
})
|
|
33
|
+
.error(function(assetThatCausedError){
|
|
34
|
+
//error
|
|
35
|
+
})
|
|
36
|
+
.progress(function(current, total, assetLoaded){
|
|
37
|
+
//called on loads
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
@warning only supports loading images and sounds
|
|
41
|
+
|
|
42
|
+
//load sound
|
|
43
|
+
|
|
44
|
+
//re.support will return the supported codec
|
|
45
|
+
re.load('run.'+re.support('ogg', 'aac'));
|
|
46
|
+
|
|
47
|
+
FUTURE remove directories from calls
|
|
48
|
+
|
|
49
|
+
*/
|
|
50
|
+
var l = function(assets){
|
|
51
|
+
|
|
52
|
+
if(re.is(assets,'string')){
|
|
53
|
+
this.assets = assets.split(' ');
|
|
54
|
+
|
|
55
|
+
} else if(re.is(assets,'object')){
|
|
56
|
+
this.assets = [];
|
|
57
|
+
for(var i in assets){
|
|
58
|
+
|
|
59
|
+
if(assets.hasOwnProperty(i) && re.is(assets[i], 'array')){
|
|
60
|
+
this.assets = this.assets.concat(assets[i]);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
|
|
66
|
+
this.assets = assets;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
var a;
|
|
70
|
+
for(var i=0; i<this.assets.length; i++){
|
|
71
|
+
|
|
72
|
+
this.total++;
|
|
73
|
+
|
|
74
|
+
a = this.assets[i];
|
|
75
|
+
|
|
76
|
+
//copy full source path
|
|
77
|
+
var s = a;
|
|
78
|
+
|
|
79
|
+
//remove directories
|
|
80
|
+
var d = a.lastIndexOf('/');
|
|
81
|
+
if(d != -1){
|
|
82
|
+
a = a.substr(d+1, a.length);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
//find file extension
|
|
86
|
+
var j = a.lastIndexOf('.')+1;
|
|
87
|
+
var ext = a.substr(j).toLowerCase();
|
|
88
|
+
|
|
89
|
+
//find name
|
|
90
|
+
var n = a.substr(0, j);
|
|
91
|
+
|
|
92
|
+
if(re.load.images.indexOf(ext) != -1){
|
|
93
|
+
|
|
94
|
+
this._loadImg(s, a, n);
|
|
95
|
+
|
|
96
|
+
} else if(re.load.sounds.indexOf(ext) != -1){
|
|
97
|
+
|
|
98
|
+
//check if support component exists first
|
|
99
|
+
if(!re.support || re.support(ext)){
|
|
100
|
+
//don't load the same sound twice
|
|
101
|
+
if(re._c[n+re.load.soundExt]){
|
|
102
|
+
//remove from array
|
|
103
|
+
this.total--;
|
|
104
|
+
this.assets.splice(i, 1);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
this._loadSound(s, a, n);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
var p = l.prototype;
|
|
120
|
+
|
|
121
|
+
p.current = 0;
|
|
122
|
+
p.total = 0;
|
|
123
|
+
|
|
124
|
+
p._loadImg = function(src, a, n){
|
|
125
|
+
var that = this;
|
|
126
|
+
var img = new Image();
|
|
127
|
+
|
|
128
|
+
//create new image component
|
|
129
|
+
re.c(a)
|
|
130
|
+
.alias(n+re.load.imageExt)
|
|
131
|
+
.statics({
|
|
132
|
+
image:img
|
|
133
|
+
})
|
|
134
|
+
.defines({
|
|
135
|
+
//save image for other components to copy or use
|
|
136
|
+
_image:img
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
img.onload = function(){
|
|
140
|
+
re.c(a).defaults({
|
|
141
|
+
sizeX:img.width,
|
|
142
|
+
sizeY:img.height
|
|
143
|
+
})
|
|
144
|
+
.defines('bisect', img.width);
|
|
145
|
+
|
|
146
|
+
that._loaded();
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
img.onerror = function(){
|
|
150
|
+
|
|
151
|
+
if(that._e){
|
|
152
|
+
that._e.call(that, a);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
img.src = re.load.path+src;
|
|
158
|
+
|
|
159
|
+
return this;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
p._loaded = function(){
|
|
163
|
+
this.current++;
|
|
164
|
+
|
|
165
|
+
if(this.current <= this.total){
|
|
166
|
+
if(this._p){
|
|
167
|
+
this._p(this.current, this.total, this.assets[this.current-1]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if(this.current == this.total){
|
|
171
|
+
if(this._s){
|
|
172
|
+
this._s(this.assets);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
p._loadSound = function(src, a, n){
|
|
178
|
+
var that = this;
|
|
179
|
+
|
|
180
|
+
var s = new Audio(re.load.path+src);
|
|
181
|
+
s.src = re.load.path+src;
|
|
182
|
+
s.preload = "auto";
|
|
183
|
+
s.load();
|
|
184
|
+
|
|
185
|
+
re.c(a)
|
|
186
|
+
//create statics codec for easy use
|
|
187
|
+
.alias(n+re.load.soundExt)
|
|
188
|
+
.statics({
|
|
189
|
+
sound:s
|
|
190
|
+
})
|
|
191
|
+
.defines({
|
|
192
|
+
_sound:s
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
//s.addEventListener('load',function(){that._loaded()}, false);
|
|
196
|
+
//called multiple times in firefox
|
|
197
|
+
var f = function(){
|
|
198
|
+
that._loaded();
|
|
199
|
+
//remove after first call
|
|
200
|
+
s.removeEventListener('canplaythrough', f);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
s.addEventListener('canplaythrough',f,false);
|
|
204
|
+
|
|
205
|
+
s.addEventListener('error',function(){
|
|
206
|
+
|
|
207
|
+
if(that._e){
|
|
208
|
+
that._e.call(that, a);
|
|
209
|
+
}
|
|
210
|
+
},false);
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
p.progress = function(m){
|
|
215
|
+
|
|
216
|
+
this._p = m;
|
|
217
|
+
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
p.complete = function(m){
|
|
222
|
+
|
|
223
|
+
this._s = m;
|
|
224
|
+
|
|
225
|
+
if(this.assets.length == 0){
|
|
226
|
+
m([]);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return this;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
p.error = function(m){
|
|
233
|
+
|
|
234
|
+
this._e = m;
|
|
235
|
+
|
|
236
|
+
return this;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
re.load = b;
|
|
240
|
+
re.load.init = l;
|
|
241
|
+
|
|
242
|
+
}(re));
|
data/src/core/query.js
ADDED
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
(function(re){
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Searches through all entities using the selector conditions
|
|
5
|
+
|
|
6
|
+
//identifiers
|
|
7
|
+
* identifies all
|
|
8
|
+
^ identifies a bind
|
|
9
|
+
# identifies an id
|
|
10
|
+
! identifies not
|
|
11
|
+
|
|
12
|
+
//select all entities
|
|
13
|
+
re('*');
|
|
14
|
+
|
|
15
|
+
//select all entities with 2d and ai components
|
|
16
|
+
re('2d ai');
|
|
17
|
+
|
|
18
|
+
//select all 2d entities without the monster component
|
|
19
|
+
re('2d -monster');
|
|
20
|
+
|
|
21
|
+
//select all draw entities and entities with the id equal to asset
|
|
22
|
+
re('draw #asset')
|
|
23
|
+
//returns a random entity
|
|
24
|
+
.random();
|
|
25
|
+
|
|
26
|
+
//select all entities with id of bob and player
|
|
27
|
+
//warning you cannot query for two ids
|
|
28
|
+
re('#bob player')
|
|
29
|
+
//takes values from all objects and returns an array
|
|
30
|
+
.pluck('width height');
|
|
31
|
+
|
|
32
|
+
//find all bitmap entities with update bind.
|
|
33
|
+
re('bitmap ^update');
|
|
34
|
+
|
|
35
|
+
//add color comp to all text components
|
|
36
|
+
re('text').comp('color');
|
|
37
|
+
|
|
38
|
+
//custom entity search
|
|
39
|
+
re(function(index){
|
|
40
|
+
|
|
41
|
+
if(entity.has('health') && entity.health > 0){
|
|
42
|
+
//add to query
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//skip entity
|
|
47
|
+
return false;
|
|
48
|
+
})
|
|
49
|
+
//calls reset method on all entities
|
|
50
|
+
.method('reset');
|
|
51
|
+
|
|
52
|
+
//returns direct reference to first entity with id of player
|
|
53
|
+
re('#player').health = 100;
|
|
54
|
+
|
|
55
|
+
*/
|
|
56
|
+
var q = function(selector){
|
|
57
|
+
|
|
58
|
+
if(selector){
|
|
59
|
+
this.query(selector);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
Sort a query string into objects
|
|
65
|
+
*/
|
|
66
|
+
q._toObj = function(query){
|
|
67
|
+
if(q.c[query]){
|
|
68
|
+
return q.c[query];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
//convert to object
|
|
72
|
+
var temp = query.split(' ');
|
|
73
|
+
var comps = [];
|
|
74
|
+
var binds = [];
|
|
75
|
+
var minus = [];
|
|
76
|
+
var id = '';
|
|
77
|
+
|
|
78
|
+
//split string
|
|
79
|
+
var fl;
|
|
80
|
+
var val;
|
|
81
|
+
for(var j = temp.length; j--;){
|
|
82
|
+
fl = temp[j].charAt(0);
|
|
83
|
+
val = temp[j].substr(1);
|
|
84
|
+
|
|
85
|
+
if(fl == '^'){
|
|
86
|
+
binds.push(val);
|
|
87
|
+
} else if(fl == '!'){
|
|
88
|
+
minus.push(val);
|
|
89
|
+
} else if(fl == '#'){
|
|
90
|
+
id = val;
|
|
91
|
+
} else {
|
|
92
|
+
comps.push(temp[j]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var comp = {
|
|
97
|
+
comp:comps,
|
|
98
|
+
on:binds,
|
|
99
|
+
not:minus,
|
|
100
|
+
id:id
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
q.c[query] = comp;
|
|
104
|
+
|
|
105
|
+
return comp;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
q.c = {};
|
|
109
|
+
|
|
110
|
+
var p = q.prototype = new Array;
|
|
111
|
+
|
|
112
|
+
p.query = function(select){
|
|
113
|
+
select = select || '';
|
|
114
|
+
var l = re._e.length, i = -1, e;
|
|
115
|
+
|
|
116
|
+
if(re.is(select, 'string')){
|
|
117
|
+
|
|
118
|
+
if(select == '*'){
|
|
119
|
+
|
|
120
|
+
this.push.apply(this, re._e.slice());
|
|
121
|
+
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//optimize search and cache
|
|
126
|
+
var obj = q._toObj(select);
|
|
127
|
+
|
|
128
|
+
while(++i < l && (e = re._e[i])){
|
|
129
|
+
if(e.has(obj)) this.push(e);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
} else if(re.is(select, 'function')){
|
|
133
|
+
|
|
134
|
+
while(++i < l && (e = re._e[i])){
|
|
135
|
+
if(select.call(e, i, l)) this.push(e);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
Calls the given method name on all entities.
|
|
145
|
+
|
|
146
|
+
re('enemies').method('rest');
|
|
147
|
+
*/
|
|
148
|
+
p.method = function(m){
|
|
149
|
+
var b = Array.prototype.slice.call(arguments, 1);
|
|
150
|
+
return this.each(function(){
|
|
151
|
+
|
|
152
|
+
this[m].apply(this, b);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
example
|
|
159
|
+
re('draw').each(function(index, length){
|
|
160
|
+
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
returning false will break the loop
|
|
164
|
+
*/
|
|
165
|
+
p.each = function(m){
|
|
166
|
+
var l = this.length, i = -1, e;
|
|
167
|
+
|
|
168
|
+
while(++i < l && (e = this[i]) && m.call(e, i, l) !== false);
|
|
169
|
+
|
|
170
|
+
return this;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
The map method allows multidimensional loops.
|
|
175
|
+
|
|
176
|
+
//map through and increase y every 3 entities.
|
|
177
|
+
|
|
178
|
+
re('draw').tilemap(3, function(x, y){
|
|
179
|
+
this.x(x * width);
|
|
180
|
+
this.y(Y * height);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
//so instead of getting this back
|
|
184
|
+
[e,e,e,e,e...]
|
|
185
|
+
|
|
186
|
+
//you will get this
|
|
187
|
+
[
|
|
188
|
+
[e,e,e],
|
|
189
|
+
[e,e,e],
|
|
190
|
+
[e,e,e]
|
|
191
|
+
...
|
|
192
|
+
]
|
|
193
|
+
|
|
194
|
+
returning false will break the loop
|
|
195
|
+
|
|
196
|
+
*/
|
|
197
|
+
p.tilemap = function(w, method){
|
|
198
|
+
var x = 0;
|
|
199
|
+
var y = 0;
|
|
200
|
+
|
|
201
|
+
return this.each(function(i, l){
|
|
202
|
+
|
|
203
|
+
if(method.call(this[i], x, y, i, l) == false) return false;
|
|
204
|
+
|
|
205
|
+
x++;
|
|
206
|
+
|
|
207
|
+
if(x == w){
|
|
208
|
+
x = 0;
|
|
209
|
+
y++;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/*
|
|
215
|
+
Returns an array of all components in the query.
|
|
216
|
+
*/
|
|
217
|
+
p.comps = function(){
|
|
218
|
+
var l = [];
|
|
219
|
+
|
|
220
|
+
this.each(function(){
|
|
221
|
+
var k = this.comps();
|
|
222
|
+
for(var i=0; i<k.length; i++){
|
|
223
|
+
if(l.indexOf(k[i]) == -1){
|
|
224
|
+
l.push(k[i])
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
return l;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/*
|
|
233
|
+
Returns a random entity.
|
|
234
|
+
*/
|
|
235
|
+
p.random = function(){
|
|
236
|
+
return this[~~(Math.random()*this.length)];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
The pluck method returns all values from all entities in an array.
|
|
241
|
+
|
|
242
|
+
//will return all pos objs from all entities.
|
|
243
|
+
re('point').pluck('pos visible');
|
|
244
|
+
|
|
245
|
+
//if we print...
|
|
246
|
+
|
|
247
|
+
[
|
|
248
|
+
{pos:0, visible:0}
|
|
249
|
+
...
|
|
250
|
+
]
|
|
251
|
+
|
|
252
|
+
*/
|
|
253
|
+
p.pluck = function(value){
|
|
254
|
+
var t = [];
|
|
255
|
+
|
|
256
|
+
var k = value.split(' ');
|
|
257
|
+
|
|
258
|
+
this.each(function(){
|
|
259
|
+
var o = {};
|
|
260
|
+
|
|
261
|
+
for(var p in k){
|
|
262
|
+
if(k.hasOwnProperty(p)){
|
|
263
|
+
o[k[p]] = this[k[p]];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
t.push(o);
|
|
268
|
+
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
return t;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
p.defines = function(){
|
|
275
|
+
throw 'Deprecated use attr'
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
p.attr = function(obj, value){
|
|
279
|
+
return this.each(function(){
|
|
280
|
+
this.attr(obj,value);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
p.defaults = function(){
|
|
286
|
+
throw 'Deprecated use def'
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
p.def = function(obj, value){
|
|
290
|
+
return this.each(function(){
|
|
291
|
+
this.def(obj, value);
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
p.comp = function(c){
|
|
297
|
+
|
|
298
|
+
return this.each(function(ref){
|
|
299
|
+
this.comp(c);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
p.removeComp = function(c){
|
|
305
|
+
return this.each(function(ref){
|
|
306
|
+
this.removeComp(c);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
p.on = function(type, method){
|
|
311
|
+
|
|
312
|
+
return this.each(function(){
|
|
313
|
+
this.on(type,method);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
p.off = function(type, method){
|
|
319
|
+
return this.each(function(){
|
|
320
|
+
this.off(type, method);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
p.trigger = function(){
|
|
325
|
+
var p = arguments;
|
|
326
|
+
return this.each(function(){
|
|
327
|
+
this.trigger.apply(this, p);
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
p.has = function(comp){
|
|
332
|
+
|
|
333
|
+
for(var i=0; i<this.length; i++){
|
|
334
|
+
if(!this[i].has(comp)){
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return this.length != 0;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
p.dispose = function(){
|
|
343
|
+
|
|
344
|
+
return this.each(function(){
|
|
345
|
+
|
|
346
|
+
this.dispose();
|
|
347
|
+
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
re.query = q;
|
|
353
|
+
|
|
354
|
+
}(re));
|
data/src/core/re.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/*
|
|
2
|
+
EntityJS Javascript Game Engine
|
|
3
|
+
Copyright 2011, Ben D'Angelo
|
|
4
|
+
http://entityjs.com
|
|
5
|
+
|
|
6
|
+
Licensed under MIT http://entityjs.com/license
|
|
7
|
+
|
|
8
|
+
*/
|
|
9
|
+
re = function(selector){
|
|
10
|
+
return new re.query(selector);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
//automatically filled when compiled
|
|
14
|
+
re.version = "$VERSION";
|
|
15
|
+
|
|
16
|
+
//contains all entities
|
|
17
|
+
re._e = [];
|
|
18
|
+
//contains all components
|
|
19
|
+
re._c = {};
|
|
20
|
+
|
|
21
|
+
re.ready = function(r){
|
|
22
|
+
re.ready.c.push(r);
|
|
23
|
+
|
|
24
|
+
window.onload = function(){
|
|
25
|
+
for(var k in re.ready.c){
|
|
26
|
+
re.ready.c[k].call(re);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
re.ready.c = [];
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
The $ method is used for selecting ids and tags.
|
|
34
|
+
*/
|
|
35
|
+
re.$ = function(s){
|
|
36
|
+
return re.$.c[s] = re.$.c[s] || ((s.charAt(0) == '#') ? document.getElementById(s.substr(1)) : document.getElementsByTagName(s)[0]);
|
|
37
|
+
};
|
|
38
|
+
//caches dom queries
|
|
39
|
+
re.$.c = {};
|
|
40
|
+
|
|
41
|
+
re.$new = function(n){
|
|
42
|
+
return document.createElement(n);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
Special polyfills and object additions
|
|
47
|
+
*/
|
|
48
|
+
re.listener = function(t, c){
|
|
49
|
+
if(window.addEventListener){
|
|
50
|
+
window.addEventListener(t, c, true);
|
|
51
|
+
} else {
|
|
52
|
+
document.attachEvent('on'+t, c);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
Checks the existance of a variable or
|
|
58
|
+
*/
|
|
59
|
+
re.is = function(obj, type){
|
|
60
|
+
if(arguments.length==1) return obj != null;
|
|
61
|
+
|
|
62
|
+
return obj != null && Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() == type.toLowerCase();
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
if(!Array.prototype.indexOf){
|
|
66
|
+
Array.prototype.indexOf = function(o){
|
|
67
|
+
for(var i=0; i<this.length; i++){
|
|
68
|
+
if(this[i]==o){
|
|
69
|
+
return i;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return -1;
|
|
73
|
+
}
|
|
74
|
+
}
|