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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
EUnit = {
|
|
2
|
+
stack:[],
|
|
3
|
+
|
|
4
|
+
runStack:function(){
|
|
5
|
+
for(var i in EUnit.stack){
|
|
6
|
+
var k = EUnit.stack[i];
|
|
7
|
+
|
|
8
|
+
ok(k.called, k.message);
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
push:function(obj){
|
|
13
|
+
this.stack.push(obj);
|
|
14
|
+
|
|
15
|
+
return QUnit.config.queue.unshift(EUnit.runStack);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/*
|
|
19
|
+
Expects a trigger call from the given obj.
|
|
20
|
+
|
|
21
|
+
var e = re.e('flicker');
|
|
22
|
+
|
|
23
|
+
expectTrigger(e, 'flicker:end', function(){
|
|
24
|
+
//if triggered this will be called
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
*/
|
|
28
|
+
function expectTrigger(obj, trigger, func){
|
|
29
|
+
var trig = {
|
|
30
|
+
called:0,
|
|
31
|
+
message:"Expected "+trigger+" to be triggered"
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
trig.meth = function(){
|
|
35
|
+
trig.called++;
|
|
36
|
+
if(func) func.apply(obj, arguments);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
obj.on(trigger, trig.meth);
|
|
40
|
+
|
|
41
|
+
EUnit.push(trig);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
Expects the given entity to have the given flicker present
|
|
46
|
+
|
|
47
|
+
var e = re.e();
|
|
48
|
+
|
|
49
|
+
expectFlicker(e, 'run'); //false
|
|
50
|
+
|
|
51
|
+
e.comps('flicker').addFlicker('run', 123, 21, [2]);
|
|
52
|
+
|
|
53
|
+
expectFlicker(e, 'run') //true
|
|
54
|
+
|
|
55
|
+
*/
|
|
56
|
+
function expectFlicker(ent, flick){
|
|
57
|
+
ok(ent.flicker_reels[flick] != null, "Expected entity to have flicker "+flick);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
Expects an entity or component to have a current listener attached.
|
|
62
|
+
|
|
63
|
+
var e = re.e();
|
|
64
|
+
|
|
65
|
+
expectListener(e, 'update'); //false
|
|
66
|
+
|
|
67
|
+
e.on('update', function(){
|
|
68
|
+
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
expectListener(e, 'update') //true
|
|
72
|
+
|
|
73
|
+
*/
|
|
74
|
+
function expectListener(ent, trigger, func){
|
|
75
|
+
if(arguments.length == 2){
|
|
76
|
+
ok(ent.has('^'+trigger), "Expected entity to have listener "+trigger);
|
|
77
|
+
} else {
|
|
78
|
+
var fin = false;
|
|
79
|
+
for(var i in ent._re_signals[trigger]){
|
|
80
|
+
fin = (ent._re_signals[trigger][i] == func)
|
|
81
|
+
if(fin) break;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
ok(fin, "Expected entity to have listener "+trigger+" with function");
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
Generates a factory for creating complex entities.
|
|
91
|
+
|
|
92
|
+
//create coin factory
|
|
93
|
+
factory('coin', function(){
|
|
94
|
+
//set values on the newly created coin
|
|
95
|
+
this.value = 10;
|
|
96
|
+
|
|
97
|
+
//has all normal methods
|
|
98
|
+
this.def('blah', 10);
|
|
99
|
+
this.on('update', function(){
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
//create coin
|
|
104
|
+
var e = factory('coin');
|
|
105
|
+
e.value // 10
|
|
106
|
+
e.has('coin') //true
|
|
107
|
+
|
|
108
|
+
//can also use f
|
|
109
|
+
var coin2 = f('coin');
|
|
110
|
+
coin2.value //10
|
|
111
|
+
|
|
112
|
+
*/
|
|
113
|
+
var _factories = {};
|
|
114
|
+
function factory(comps, func){
|
|
115
|
+
var e = re.e(comps);
|
|
116
|
+
|
|
117
|
+
//don't enter in arrays, strings only
|
|
118
|
+
if(func) _factories[comps] = func;
|
|
119
|
+
|
|
120
|
+
if(_factories[comps]) _factories[comps].call(e);
|
|
121
|
+
|
|
122
|
+
return e;
|
|
123
|
+
}
|
|
124
|
+
var f = factory;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
Generates a factory entity for easy use in the module()
|
|
128
|
+
|
|
129
|
+
//light weight
|
|
130
|
+
//a new coin in e will be created for every test()
|
|
131
|
+
module('coin', lazy('coin'));
|
|
132
|
+
|
|
133
|
+
//do something after coin creation
|
|
134
|
+
module('coin', lazy('coin', function(e){
|
|
135
|
+
//called on coin creation.
|
|
136
|
+
}));
|
|
137
|
+
|
|
138
|
+
//setup teardown methods together
|
|
139
|
+
module('coin', lazy('coin', {
|
|
140
|
+
setup:function(e){
|
|
141
|
+
//called on coin creation.
|
|
142
|
+
},
|
|
143
|
+
teardown:function(e){
|
|
144
|
+
//called after each test
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
147
|
+
|
|
148
|
+
test('coin should have valid of 10', function(){
|
|
149
|
+
equal(e.value, 10);
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
etc..
|
|
153
|
+
|
|
154
|
+
*/
|
|
155
|
+
var e;
|
|
156
|
+
function lazy(comps, obj){
|
|
157
|
+
return {
|
|
158
|
+
setup:function(){
|
|
159
|
+
e = f(comps);
|
|
160
|
+
if(typeof obj == 'function') obj(e);
|
|
161
|
+
if(obj && obj.setup) obj.setup(e);
|
|
162
|
+
},
|
|
163
|
+
teardown:function(){
|
|
164
|
+
if(obj && obj.teardown) obj.teardown(e);
|
|
165
|
+
e.dispose();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/*
|
|
171
|
+
Some super lazy evaluations
|
|
172
|
+
*/
|
|
173
|
+
var eq = equal;
|
|
174
|
+
var not = function(arg, message){ok(!arg, message);}
|
|
175
|
+
function is(obj, type){
|
|
176
|
+
if(arguments.length == 1){
|
|
177
|
+
ok(obj != null, "Expected to be present");
|
|
178
|
+
} else{
|
|
179
|
+
ok(obj != null && Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() == type.toLowerCase())
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function match(test, reg, i){
|
|
184
|
+
if(typeof reg == 'string'){
|
|
185
|
+
reg = new RegExp(reg, i)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
ok(test.match(reg) != null, "Expected to match "+reg)
|
|
189
|
+
|
|
190
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/*
|
|
2
|
+
EntityJS methods to simulate user inputs.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
function _findKeyCode(code){
|
|
6
|
+
var codes = re.c('keyboard').keyCodes;
|
|
7
|
+
|
|
8
|
+
for(var i in codes){
|
|
9
|
+
if(codes[i] == code){
|
|
10
|
+
return i;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//sim keyboard presses
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
Calls keydown. This will keep it down until keyup is called.
|
|
20
|
+
keydown('w');
|
|
21
|
+
*/
|
|
22
|
+
function keydown(key, e){
|
|
23
|
+
e = e || {};
|
|
24
|
+
|
|
25
|
+
e.type = 'keydown';
|
|
26
|
+
e.keyCode = _findKeyCode(key);
|
|
27
|
+
|
|
28
|
+
re.c('keyboard').event(e);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
Calls keyup, even if keydown was not pressed beforehand.
|
|
33
|
+
keyup('w');
|
|
34
|
+
*/
|
|
35
|
+
function keyup(key, e){
|
|
36
|
+
e = e || {};
|
|
37
|
+
|
|
38
|
+
e.type = 'keyup';
|
|
39
|
+
e.keyCode = _findKeyCode(key);
|
|
40
|
+
|
|
41
|
+
re.c('keyboard').event(e);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
Calls keydown before the callback and then keyup after.
|
|
46
|
+
|
|
47
|
+
keypress('w', function(){
|
|
48
|
+
|
|
49
|
+
//w is down
|
|
50
|
+
|
|
51
|
+
//w is up
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
//w is not down
|
|
55
|
+
|
|
56
|
+
//Can also enter in an array of keys
|
|
57
|
+
keypress(['w','a','s','d'], function(key, event){
|
|
58
|
+
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
//Can also send custom attributes to the event object.
|
|
62
|
+
var e = re.e('keyboard')
|
|
63
|
+
.on('keydown', function(key, event){
|
|
64
|
+
re.log(event.myCustom); //cake
|
|
65
|
+
});
|
|
66
|
+
keypress('w', null, {myCustom:'cake'});
|
|
67
|
+
|
|
68
|
+
//key in mind the callback method is also optional
|
|
69
|
+
|
|
70
|
+
*/
|
|
71
|
+
function keypress(key, callback, e){
|
|
72
|
+
if(typeof key == 'object'){
|
|
73
|
+
for(var i in key){
|
|
74
|
+
keypress(key[i], callback, e);
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
keydown(key, e);
|
|
79
|
+
if(callback) callback(key, e);
|
|
80
|
+
keyup(key, e);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
function _mouseEvent(e, type, x, y, key){
|
|
84
|
+
e = e || {};
|
|
85
|
+
|
|
86
|
+
e.type = type;
|
|
87
|
+
e.clientX = x + document.body.scrollLeft + document.documentElement.scrollLeft;
|
|
88
|
+
e.clientX = y + document.body.scrollTop + document.documentElement.scrollTop;
|
|
89
|
+
|
|
90
|
+
if(key){
|
|
91
|
+
re.c('mouse').press(e);
|
|
92
|
+
} else {
|
|
93
|
+
re.c('mouse').event(e);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//sim mouse clicks
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
Will hold the mouse down until mouse up is called.
|
|
101
|
+
|
|
102
|
+
//click at 10,20 with the middle key
|
|
103
|
+
//add custom to the event object.
|
|
104
|
+
mousedown(10, 20, 'middle', {custom:234});
|
|
105
|
+
|
|
106
|
+
*/
|
|
107
|
+
function mousedown(x, y, key, e){
|
|
108
|
+
|
|
109
|
+
_mouseEvent(e, 'mousedown', x, y, key || 'left');
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
Will call mouse up on the given x, y.
|
|
114
|
+
Mousedown does not need to be called for this to work.
|
|
115
|
+
|
|
116
|
+
mouseup(20, 40, 'right');
|
|
117
|
+
*/
|
|
118
|
+
function mouseup(x, y, key, e){
|
|
119
|
+
_mouseEvent(e, 'mouseup', x, y, key || 'left');
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
Calls mousemove on the given coordinate.
|
|
124
|
+
|
|
125
|
+
mousemove(20, 30);
|
|
126
|
+
|
|
127
|
+
*/
|
|
128
|
+
function mousemove(x, y, e){
|
|
129
|
+
_mouseEvent(e, 'mousemove', x, y);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
Calls contextmenu on the given coordiante.
|
|
134
|
+
|
|
135
|
+
contextmenu(30, 50)
|
|
136
|
+
*/
|
|
137
|
+
function contextmenu(x, y, e){
|
|
138
|
+
_mouseEvent(e, 'contextmenu', x, y);
|
|
139
|
+
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
Clicks on the given coordinate and optionally call a method inbetween.
|
|
144
|
+
|
|
145
|
+
click(20, 30);
|
|
146
|
+
|
|
147
|
+
//with callback
|
|
148
|
+
click(40, 50, function(x, y, key, event){
|
|
149
|
+
//mousedown..
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
//mouseup..
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
//mouse not down
|
|
156
|
+
|
|
157
|
+
//call with custom key and event
|
|
158
|
+
click(20, 50, null, 'middle', {blah:23});
|
|
159
|
+
|
|
160
|
+
//multiple clicks
|
|
161
|
+
|
|
162
|
+
click([[0,1], [30, 20], [34, 73]], function(x, y, key, event){
|
|
163
|
+
|
|
164
|
+
re.log('clicks', x, y, key, event);
|
|
165
|
+
|
|
166
|
+
}, 'right', {extra:10});
|
|
167
|
+
|
|
168
|
+
*/
|
|
169
|
+
function click(x, y, callback, key, e){
|
|
170
|
+
|
|
171
|
+
if(typeof x == 'object'){
|
|
172
|
+
|
|
173
|
+
for(var i in x){
|
|
174
|
+
click(x[i][0], x[i][1], y, callback, key);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
mousedown(x, y, key, e);
|
|
181
|
+
_mouseEvent(e, 'click', x, y);
|
|
182
|
+
if(callback) callback(x, y, key, e);
|
|
183
|
+
mouseup(x, y, key, e);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/*
|
|
187
|
+
Same as the click method, except it calls click twice and then dispatches the callback.
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
dblclick(20, 40, function(x, y, key, e){
|
|
191
|
+
//blah
|
|
192
|
+
}, 'left', {bl:sdf});
|
|
193
|
+
|
|
194
|
+
*/
|
|
195
|
+
function dblclick(x, y, callback, key, e){
|
|
196
|
+
click(x, y, null, key, e);
|
|
197
|
+
click(x, y, null, key, e);
|
|
198
|
+
_mouseEvent(e, 'dblclick', x, y);
|
|
199
|
+
if(callback) callback(x, y, key, e);
|
|
200
|
+
};
|