entityjs 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/README.md +49 -0
- data/Rakefile +1 -0
- data/bin/entityjs +14 -0
- data/build/build_debug.bat +1 -0
- data/build/build_min.bat +1 -0
- data/build/config.php +64 -0
- data/build/debug.php +48 -0
- data/build/files.php +74 -0
- data/build/jsmin.php +376 -0
- data/build/min.php +50 -0
- data/changelog.txt +53 -0
- data/entityjs.gemspec +25 -0
- data/examples/keys/arrow.png +0 -0
- data/examples/keys/keys.html +59 -0
- data/examples/keys/keys.js +148 -0
- data/examples/mouse/mouse.html +58 -0
- data/examples/mouse/mouse.js +60 -0
- data/examples/scenes/home.png +0 -0
- data/examples/scenes/scenes.html +55 -0
- data/examples/scenes/scenes.js +134 -0
- 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 +56 -0
- data/examples/sounds/sounds.js +44 -0
- data/examples/style/background.png +0 -0
- data/examples/style/sheet.css +762 -0
- data/examples/tiles/tiles.html +56 -0
- data/examples/tiles/tiles.js +85 -0
- data/examples/tiles/tiles.png +0 -0
- data/lib/blank/config.js +4 -0
- data/lib/blank/config.yml +21 -0
- data/lib/blank/home.js +11 -0
- data/lib/blank/init.js +7 -0
- data/lib/blank/load.js +21 -0
- data/lib/blank/play.html +29 -0
- data/lib/entity.debug.js +52 -0
- data/lib/entity.min.js +184 -0
- data/lib/entityjs/command.rb +37 -0
- data/lib/entityjs/comp.rb +11 -0
- data/lib/entityjs/game.rb +93 -0
- data/lib/entityjs/min.rb +11 -0
- data/lib/entityjs/refresh.rb +14 -0
- data/lib/entityjs/version.rb +3 -0
- data/lib/entityjs.rb +6 -0
- data/license.txt +1 -0
- data/spec/lib/entityjs/game_spec.rb +11 -0
- data/spec/spec_helper.rb +3 -0
- data/src/entityjs/core/component.js +306 -0
- data/src/entityjs/core/entity.js +516 -0
- data/src/entityjs/core/load.js +224 -0
- data/src/entityjs/core/query.js +410 -0
- data/src/entityjs/core/re.js +70 -0
- data/src/entityjs/core/system.js +125 -0
- data/src/entityjs/cycle/draw.js +185 -0
- data/src/entityjs/cycle/ticker.js +27 -0
- data/src/entityjs/cycle/tween.js +61 -0
- data/src/entityjs/cycle/update.js +86 -0
- data/src/entityjs/cycle/wait.js +22 -0
- data/src/entityjs/cycle/worker.js +9 -0
- data/src/entityjs/display/anchor.js +53 -0
- data/src/entityjs/display/bitfont.js +93 -0
- data/src/entityjs/display/bitmap.js +37 -0
- data/src/entityjs/display/circle.js +30 -0
- data/src/entityjs/display/font.js +41 -0
- data/src/entityjs/display/group.js +63 -0
- data/src/entityjs/display/rect.js +19 -0
- data/src/entityjs/display/screen.js +46 -0
- data/src/entityjs/display/sprite.js +37 -0
- data/src/entityjs/input/keyboard.js +150 -0
- data/src/entityjs/input/mouse.js +123 -0
- data/src/entityjs/input/pressed.js +81 -0
- data/src/entityjs/input/touch.js +28 -0
- data/src/entityjs/math/bind.js +76 -0
- data/src/entityjs/math/bisect.js +69 -0
- data/src/entityjs/math/body.js +39 -0
- data/src/entityjs/math/drag.js +39 -0
- data/src/entityjs/math/hitmap.js +165 -0
- data/src/entityjs/math/hittest.js +26 -0
- data/src/entityjs/math/physics.js +142 -0
- data/src/entityjs/math/point.js +57 -0
- data/src/entityjs/math/tile.js +91 -0
- data/src/entityjs/media/channel.js +93 -0
- data/src/entityjs/media/playlist.js +5 -0
- data/src/entityjs/media/sound.js +110 -0
- data/src/entityjs/net/socket.js +52 -0
- data/src/entityjs/pattern/arraymap.js +89 -0
- data/src/entityjs/pattern/flicker.js +214 -0
- data/src/entityjs/pattern/timestep.js +34 -0
- data/src/entityjs/save/database.js +7 -0
- data/src/entityjs/save/storage.js +57 -0
- data/src/entityjs/util/log.js +25 -0
- data/src/entityjs/util/polyfill.js +25 -0
- data/src/entityjs/util/random.js +38 -0
- data/src/entityjs/util/scene.js +101 -0
- data/src/entityjs/util/sheet.js +51 -0
- data/src/entityjs/util/support.js +132 -0
- metadata +156 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
/*
|
2
|
+
The rect component draws a rectangle on screen.
|
3
|
+
*/
|
4
|
+
re.c('rect')
|
5
|
+
.require('draw')
|
6
|
+
.inherit({
|
7
|
+
color:'#82d5f4'
|
8
|
+
})
|
9
|
+
.extend({
|
10
|
+
|
11
|
+
draw:function(c){
|
12
|
+
|
13
|
+
c.fillStyle = this.color;
|
14
|
+
|
15
|
+
c.fillRect(-this.regX, -this.regY, this.sizeX, this.sizeY);
|
16
|
+
|
17
|
+
}
|
18
|
+
|
19
|
+
});
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/*
|
2
|
+
The screen component is used for scrolling or shaking all visible objects.
|
3
|
+
It simply offsets pos values upon rendering.
|
4
|
+
|
5
|
+
This is useful for setting up a tile-based game.
|
6
|
+
*/
|
7
|
+
re.c('screen')
|
8
|
+
.require('hittest')
|
9
|
+
.extend({
|
10
|
+
|
11
|
+
setPos:function(x, y){
|
12
|
+
if(arguments.length == 1){
|
13
|
+
y = x.posY;
|
14
|
+
x = x.posX;
|
15
|
+
}
|
16
|
+
|
17
|
+
this.posX = x - this.regX;
|
18
|
+
this.posY = y - this.regY;
|
19
|
+
|
20
|
+
return this;
|
21
|
+
},
|
22
|
+
|
23
|
+
toScreenX:function(x){
|
24
|
+
return x + this.posX + this.offX;
|
25
|
+
},
|
26
|
+
|
27
|
+
toScreenY:function(y){
|
28
|
+
return y + this.posY + this.offY;
|
29
|
+
}
|
30
|
+
|
31
|
+
})
|
32
|
+
.inherit({
|
33
|
+
|
34
|
+
posX:0,
|
35
|
+
posY:0,
|
36
|
+
|
37
|
+
regX:0,
|
38
|
+
regY:0,
|
39
|
+
|
40
|
+
sizeX:0,
|
41
|
+
sizeY:0,
|
42
|
+
|
43
|
+
offX:0,
|
44
|
+
offY:0
|
45
|
+
|
46
|
+
});
|
@@ -0,0 +1,37 @@
|
|
1
|
+
/*
|
2
|
+
The sprite object extends a drawable image for an entity.
|
3
|
+
*/
|
4
|
+
|
5
|
+
re.c('sprite')
|
6
|
+
.require('bitmap bisect')
|
7
|
+
.inherit({
|
8
|
+
|
9
|
+
frameX:0,
|
10
|
+
frameY:0
|
11
|
+
|
12
|
+
})
|
13
|
+
.extend({
|
14
|
+
|
15
|
+
setFrameId:function(id){
|
16
|
+
this.frameX = this.biToXt(id);
|
17
|
+
this.frameY = this.biToYt(id);
|
18
|
+
|
19
|
+
return this;
|
20
|
+
},
|
21
|
+
|
22
|
+
getFrameId:function(){
|
23
|
+
return this.toBi(this.frameX, this.frameY);
|
24
|
+
},
|
25
|
+
|
26
|
+
draw:function(c){
|
27
|
+
c.drawImage(this.bitmap, this.frameX * this.sizeX, this.frameY * this.sizeY, this.sizeX, this.sizeY, -this.regX, -this.regY, this.sizeX, this.sizeY);
|
28
|
+
|
29
|
+
return this;
|
30
|
+
},
|
31
|
+
|
32
|
+
//implement for flicker
|
33
|
+
flick:function(c){
|
34
|
+
this.setFrameId(c);
|
35
|
+
}
|
36
|
+
|
37
|
+
});
|
@@ -0,0 +1,150 @@
|
|
1
|
+
re.c('keyboard')
|
2
|
+
.global({
|
3
|
+
listeners:[],
|
4
|
+
|
5
|
+
keyCodes: {
|
6
|
+
/* start the a-z keys */
|
7
|
+
65 : 'a',
|
8
|
+
66:'b',
|
9
|
+
67:'c',
|
10
|
+
68:'d',
|
11
|
+
69:'e',
|
12
|
+
70:'f',
|
13
|
+
71:'g',
|
14
|
+
72:'h',
|
15
|
+
73:'i',
|
16
|
+
74:'j',
|
17
|
+
75:'k',
|
18
|
+
76:'l',
|
19
|
+
77:'m',
|
20
|
+
78:'n',
|
21
|
+
79:'o',
|
22
|
+
80:'p',
|
23
|
+
81:'q',
|
24
|
+
82:'r',
|
25
|
+
83:'s',
|
26
|
+
84:'t',
|
27
|
+
85:'u',
|
28
|
+
86:'v',
|
29
|
+
87:'w',
|
30
|
+
88:'x',
|
31
|
+
89:'y',
|
32
|
+
90:'z',
|
33
|
+
/* start number keys */
|
34
|
+
48:'0',
|
35
|
+
49:'1',
|
36
|
+
50:'2',
|
37
|
+
51:'3',
|
38
|
+
52:'4',
|
39
|
+
53:'5',
|
40
|
+
54:'6',
|
41
|
+
55:'7',
|
42
|
+
56:'8',
|
43
|
+
57:'9',
|
44
|
+
/* start the f keys */
|
45
|
+
112:'f1',
|
46
|
+
113:'f2',
|
47
|
+
114:'f3',
|
48
|
+
115:'f4',
|
49
|
+
116:'f5',
|
50
|
+
117:'f6',
|
51
|
+
118:'f7',
|
52
|
+
119:'f8',
|
53
|
+
120:'f9',
|
54
|
+
121:'f10',
|
55
|
+
122:'f11',
|
56
|
+
123:'f12',
|
57
|
+
/* start the modifier keys */
|
58
|
+
16:'shift',
|
59
|
+
17:'ctrl', //mac os - control
|
60
|
+
18:'alt',//mac os key - option opt
|
61
|
+
24:'cmd', //Mac OS key - also command
|
62
|
+
255:'fn',//lenovo - function
|
63
|
+
/* Misc. Keys */
|
64
|
+
8:'backspace',
|
65
|
+
13:'enter', //max os - return
|
66
|
+
32:'space',
|
67
|
+
27:'esc',
|
68
|
+
9:'tab',
|
69
|
+
20:'capslock',
|
70
|
+
91:'windows',//mac os - super
|
71
|
+
46:'delete', //NOT THE OS X DELETE KEY!
|
72
|
+
36:'home',
|
73
|
+
35:'end',
|
74
|
+
33:'pageup',
|
75
|
+
34:'pagedown',
|
76
|
+
/* Arrow keys */
|
77
|
+
37:'left',
|
78
|
+
38:'up',
|
79
|
+
39:'right',
|
80
|
+
40:'down',
|
81
|
+
/* Special char keys */
|
82
|
+
96:'`',
|
83
|
+
45:'-',//also insert on mac?
|
84
|
+
187:'=',
|
85
|
+
219:'[',
|
86
|
+
221:']',
|
87
|
+
220:'\\', //it's actually a \ but there's two to escape
|
88
|
+
59:';',
|
89
|
+
222:"'",
|
90
|
+
188:',',
|
91
|
+
190:'.',
|
92
|
+
191:'/'
|
93
|
+
},
|
94
|
+
|
95
|
+
/*
|
96
|
+
Add modifiers, shift, alt, ctrl.
|
97
|
+
.signal('ctrl+k')
|
98
|
+
*/
|
99
|
+
keyboardEvent: function(e){
|
100
|
+
var that = re.c('keyboard');
|
101
|
+
|
102
|
+
if(that.body != document.activeElement){
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
|
106
|
+
var c = e.keyCode || e.which;
|
107
|
+
|
108
|
+
var key = that.keyCodes[c];
|
109
|
+
|
110
|
+
if(re.c('pressed').preventDefault && re.c('pressed').preventDefault[key]){
|
111
|
+
if(e.preventDefault)
|
112
|
+
e.preventDefault();
|
113
|
+
else
|
114
|
+
e.returnValue = false;
|
115
|
+
|
116
|
+
}
|
117
|
+
|
118
|
+
if(re.c('pressed')._pressed){
|
119
|
+
re.c('pressed')._pressed[key] = (e.type == 'keydown');
|
120
|
+
}
|
121
|
+
|
122
|
+
for(var k=0; k<that.listeners.length; k++){
|
123
|
+
that.listeners[k]
|
124
|
+
.signal(e.type, key, e)
|
125
|
+
.signal(e.type+':'+key, key, e);
|
126
|
+
}
|
127
|
+
|
128
|
+
},
|
129
|
+
|
130
|
+
active:false,
|
131
|
+
|
132
|
+
initListeners:function(){
|
133
|
+
if(!this.active){
|
134
|
+
this.active = true;
|
135
|
+
re.listener('keydown', this.keyboardEvent, false);
|
136
|
+
re.listener('keyup', this.keyboardEvent, false);
|
137
|
+
this.body = re.$('body')[0];
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
141
|
+
})
|
142
|
+
.init(function(c){
|
143
|
+
c.initListeners();
|
144
|
+
//add to global key array
|
145
|
+
c.listeners.push(this);
|
146
|
+
})
|
147
|
+
.dispose(function(c){
|
148
|
+
//remove from global key array
|
149
|
+
c.listeners.splice(c.listeners.indexOf(this), 1);
|
150
|
+
});
|
@@ -0,0 +1,123 @@
|
|
1
|
+
re.c('mouse')
|
2
|
+
.global({
|
3
|
+
listeners:[],
|
4
|
+
|
5
|
+
mouseAction:function(e){
|
6
|
+
var b;
|
7
|
+
|
8
|
+
//find which key
|
9
|
+
if(e.which == null){
|
10
|
+
//IE
|
11
|
+
if(e.button < 2){
|
12
|
+
b = 'left';
|
13
|
+
} else if(e.button == 4){
|
14
|
+
b = 'middle';
|
15
|
+
} else {
|
16
|
+
b = 'right';
|
17
|
+
}
|
18
|
+
} else {
|
19
|
+
if(e.which < 2){
|
20
|
+
b = 'left';
|
21
|
+
} else if(e.which == 2){
|
22
|
+
b = 'middle';
|
23
|
+
} else {
|
24
|
+
b = 'right';
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
b = 'mouse:'+b;
|
29
|
+
|
30
|
+
//register mouse action
|
31
|
+
if(re.c('pressed')._pressed){
|
32
|
+
re.c('pressed')._pressed[b] = (e.type == 'mousedown');
|
33
|
+
}
|
34
|
+
|
35
|
+
var c = false;
|
36
|
+
|
37
|
+
if(re.c('pressed').preventDefault){
|
38
|
+
if(re.c('pressed').preventDefault[b]){
|
39
|
+
if(e.preventDefault)
|
40
|
+
e.preventDefault();
|
41
|
+
else
|
42
|
+
e.returnValue = false;
|
43
|
+
|
44
|
+
c = true;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
re.c('mouse').mouseEvent(e);
|
49
|
+
|
50
|
+
if(c) return false;
|
51
|
+
},
|
52
|
+
|
53
|
+
mouseEvent:function(e){
|
54
|
+
|
55
|
+
//calculate mouse coordinate
|
56
|
+
var x;
|
57
|
+
var y;
|
58
|
+
|
59
|
+
if(e.pageX || e.pageY){
|
60
|
+
x = e.pageX;
|
61
|
+
y = e.pageY;
|
62
|
+
} else {
|
63
|
+
x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
|
64
|
+
y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
65
|
+
}
|
66
|
+
|
67
|
+
//FUTURE fix, does not support multiple canvases
|
68
|
+
if(re.sys.canvas){
|
69
|
+
x -= re.sys.canvas.offsetLeft;
|
70
|
+
y -= re.sys.canvas.offsetTop;
|
71
|
+
}
|
72
|
+
|
73
|
+
//ignore if off canvas
|
74
|
+
if(x < 0 || y < 0 || y > re.sys.sizeY || x > re.sys.sizeX){
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
|
78
|
+
var that = re.c('mouse');
|
79
|
+
|
80
|
+
//FUTURE automatically transform screen coordinates?
|
81
|
+
var c, t, sx, sy;
|
82
|
+
for(var i=0, l = that.listeners.length; i<l; i++){
|
83
|
+
t = that.listeners[i];
|
84
|
+
if(t.toScreen && t.screen){
|
85
|
+
sx = t.screen.toScreenX(x);
|
86
|
+
sy = t.screen.toScreenY(y);
|
87
|
+
} else {
|
88
|
+
sx = x;
|
89
|
+
sy = y;
|
90
|
+
}
|
91
|
+
t.signal(e.type, sx, sy, e);
|
92
|
+
}
|
93
|
+
|
94
|
+
},
|
95
|
+
|
96
|
+
active:false,
|
97
|
+
initListeners:function(){
|
98
|
+
if(!this.active){
|
99
|
+
this.active = true;
|
100
|
+
|
101
|
+
re.listener('mousedown', this.mouseAction, false);
|
102
|
+
re.listener('mouseup', this.mouseAction, false);
|
103
|
+
re.listener('mousemove', this.mouseEvent, false);
|
104
|
+
re.listener('click', this.mouseEvent, false);
|
105
|
+
re.listener('dblclick', this.mouseEvent, false);
|
106
|
+
re.listener('contextmenu', this.mouseEvent, false);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
})
|
111
|
+
.inherit({
|
112
|
+
toScreen:false
|
113
|
+
})
|
114
|
+
.init(function(c){
|
115
|
+
//add to listener array
|
116
|
+
c.initListeners();
|
117
|
+
c.listeners.push(this);
|
118
|
+
})
|
119
|
+
.dispose(function(c){
|
120
|
+
//remove from listener array
|
121
|
+
|
122
|
+
c.listeners.splice(c.listeners.indexOf(this), 1);
|
123
|
+
});
|
@@ -0,0 +1,81 @@
|
|
1
|
+
re.c('pressed')
|
2
|
+
.global({
|
3
|
+
//contains pressed keys and mouse clicks
|
4
|
+
_pressed:{},
|
5
|
+
preventDefault:{}
|
6
|
+
|
7
|
+
})
|
8
|
+
.extend({
|
9
|
+
|
10
|
+
/*
|
11
|
+
This function is usually used in conjunction with mousemove or update for controls.
|
12
|
+
|
13
|
+
//if either one is true
|
14
|
+
if(this.pressed('w', 'up')){
|
15
|
+
this.posY--;
|
16
|
+
}
|
17
|
+
|
18
|
+
//or
|
19
|
+
if(this.pressed(['w', 'up']){
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
*/
|
24
|
+
pressed:function(){
|
25
|
+
return re.pressed.apply(this, arguments);
|
26
|
+
},
|
27
|
+
|
28
|
+
/*
|
29
|
+
Stops inputs default value.
|
30
|
+
|
31
|
+
FUTURE
|
32
|
+
-be able to remove prevents
|
33
|
+
*/
|
34
|
+
preventDefault:function(){
|
35
|
+
re.preventDefault.apply(this, arguments);
|
36
|
+
return this;
|
37
|
+
}
|
38
|
+
|
39
|
+
})
|
40
|
+
.init(function(){
|
41
|
+
|
42
|
+
//int mouse and keyboard
|
43
|
+
re._c.keyboard.initListeners();
|
44
|
+
re._c.mouse.initListeners();
|
45
|
+
re._c.touch.initListeners();
|
46
|
+
|
47
|
+
});
|
48
|
+
|
49
|
+
re.pressed = function(key){
|
50
|
+
var that = re.c('pressed');
|
51
|
+
|
52
|
+
var c = arguments;
|
53
|
+
|
54
|
+
if(typeof key == 'object') c = key;
|
55
|
+
|
56
|
+
for(var i=0; i<c.length; i++){
|
57
|
+
if(that._pressed[c[i]]){
|
58
|
+
return true;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
return false;
|
63
|
+
};
|
64
|
+
|
65
|
+
re.preventDefault = function(key){
|
66
|
+
|
67
|
+
var p = key.split(' ');
|
68
|
+
|
69
|
+
if(p.length > 1){
|
70
|
+
|
71
|
+
for(var k in p){
|
72
|
+
this.preventDefault(p[k]);
|
73
|
+
}
|
74
|
+
|
75
|
+
return this;
|
76
|
+
}
|
77
|
+
|
78
|
+
re.c('pressed').preventDefault[key] = true;
|
79
|
+
|
80
|
+
return this;
|
81
|
+
};
|
@@ -0,0 +1,28 @@
|
|
1
|
+
/*
|
2
|
+
The touch component handles touch events and dispatches signals.
|
3
|
+
*/
|
4
|
+
re.c('touch')
|
5
|
+
.global({
|
6
|
+
|
7
|
+
touchEvent:function(e){
|
8
|
+
|
9
|
+
},
|
10
|
+
|
11
|
+
active:false,
|
12
|
+
|
13
|
+
initListeners:function(){
|
14
|
+
if(!this.active){
|
15
|
+
this.active = true;
|
16
|
+
|
17
|
+
re.listener('touchstart', this.touchEvent, false);
|
18
|
+
re.listener('touchmove', this.touchEvent, false);
|
19
|
+
re.listener('touchend', this.touchEvent, false);
|
20
|
+
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
})
|
25
|
+
.init(function(c){
|
26
|
+
c.initListeners();
|
27
|
+
|
28
|
+
});
|
@@ -0,0 +1,76 @@
|
|
1
|
+
/*
|
2
|
+
The bind component prevents points from going outside of the set parameters.
|
3
|
+
|
4
|
+
This can be useful for maps, characters, enemies, boxes etc..
|
5
|
+
|
6
|
+
re.e('bind bitmap char.png')
|
7
|
+
.bind = {min:{x:0, y:0}, max:{x:100, y: 10}};
|
8
|
+
|
9
|
+
*/
|
10
|
+
|
11
|
+
re.c('bind')
|
12
|
+
.require('update')
|
13
|
+
.namespace({
|
14
|
+
|
15
|
+
update:function(){
|
16
|
+
if(!this.bind) return;
|
17
|
+
|
18
|
+
if(this.posX < this.bindMinX){
|
19
|
+
|
20
|
+
this.posX = this.bindMinX;
|
21
|
+
|
22
|
+
} else if(this.posX > this.bindMaxX){
|
23
|
+
|
24
|
+
this.posX = this.bindMaxX;
|
25
|
+
}
|
26
|
+
|
27
|
+
if(this.posY < this.bindMinY){
|
28
|
+
|
29
|
+
this.posY = this.bindMinY;
|
30
|
+
|
31
|
+
} else if(this.posY > this.bindMaxY){
|
32
|
+
|
33
|
+
this.posY = this.bindMaxY;
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
})
|
39
|
+
.inherit({
|
40
|
+
|
41
|
+
posX:0,
|
42
|
+
posY:0,
|
43
|
+
|
44
|
+
bindMinX:0,
|
45
|
+
bindMinY:0,
|
46
|
+
|
47
|
+
bindMaxX:10,
|
48
|
+
bindMaxY:10,
|
49
|
+
|
50
|
+
bind:true
|
51
|
+
|
52
|
+
})
|
53
|
+
.extend({
|
54
|
+
|
55
|
+
setBind:function(minx, miny, maxx, maxy){
|
56
|
+
|
57
|
+
this.bindMinX = minx;
|
58
|
+
this.bindMinY = miny;
|
59
|
+
|
60
|
+
this.bindMaxX = maxx;
|
61
|
+
this.bindMaxY = maxy;
|
62
|
+
|
63
|
+
return this;
|
64
|
+
}
|
65
|
+
|
66
|
+
})
|
67
|
+
.init(function(){
|
68
|
+
|
69
|
+
this.addSignal('update', this.bind_update);
|
70
|
+
|
71
|
+
})
|
72
|
+
.dispose(function(){
|
73
|
+
|
74
|
+
this.removeSignal('update', this.bind_update);
|
75
|
+
|
76
|
+
});
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/*
|
2
|
+
The bisect component cuts an object into equal sections. It supplies helper functions
|
3
|
+
for converting to a section and from a section. Useful for sprites and animation.
|
4
|
+
*/
|
5
|
+
re.bisect = re.c('bisect')
|
6
|
+
.global({
|
7
|
+
|
8
|
+
biToX:function(bi, width, size){
|
9
|
+
|
10
|
+
return this.biToXt(bi, width) * size;
|
11
|
+
},
|
12
|
+
|
13
|
+
biToY:function(bi, width, size){
|
14
|
+
|
15
|
+
return this.biToYt(bi, width) * size;
|
16
|
+
},
|
17
|
+
|
18
|
+
biToXt:function(bi, width, size){
|
19
|
+
|
20
|
+
return Math.floor(bi % (width / size) );
|
21
|
+
},
|
22
|
+
|
23
|
+
biToYt:function(bi, width, size){
|
24
|
+
return Math.floor((bi * size) / (width - 0.1));
|
25
|
+
},
|
26
|
+
|
27
|
+
toBi:function(xt, yt, w, s){
|
28
|
+
|
29
|
+
return (xt + (yt * (w / s))) / s;
|
30
|
+
}
|
31
|
+
|
32
|
+
})
|
33
|
+
.extend({
|
34
|
+
|
35
|
+
|
36
|
+
biToX:function(bi){
|
37
|
+
|
38
|
+
return this.biToXt(bi, this.bisect) * this.sizeX;
|
39
|
+
},
|
40
|
+
|
41
|
+
biToY:function(bi){
|
42
|
+
|
43
|
+
return this.biToYt(bi, this.bisect) * this.sizeY;
|
44
|
+
},
|
45
|
+
|
46
|
+
biToXt:function(bi){
|
47
|
+
|
48
|
+
return Math.floor(bi % (this.bisect / this.sizeX) );
|
49
|
+
},
|
50
|
+
|
51
|
+
biToYt:function(bi){
|
52
|
+
return Math.floor((bi * this.sizeY) / (this.bisect - 0.1));
|
53
|
+
},
|
54
|
+
|
55
|
+
toBi:function(xt, yt){
|
56
|
+
|
57
|
+
return (xt + (yt * (this.bisect / this.sizeX))) / this.sizeX;
|
58
|
+
}
|
59
|
+
|
60
|
+
})
|
61
|
+
.inherit({
|
62
|
+
|
63
|
+
//spliting width
|
64
|
+
bisect:1,
|
65
|
+
|
66
|
+
sizeX:1,
|
67
|
+
sizeY:1
|
68
|
+
|
69
|
+
});
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
The body component replaces the hittest component for
|
3
|
+
a more precise touch checking.
|
4
|
+
|
5
|
+
*/
|
6
|
+
re.c('body')
|
7
|
+
.extend({
|
8
|
+
|
9
|
+
touches:function(x, y, w, h){
|
10
|
+
return !
|
11
|
+
(
|
12
|
+
x > this.posX + this.bodX - this.padX ||
|
13
|
+
x + w < this.posX + this.padX ||
|
14
|
+
y > this.posY + this.bodY - this.padY||
|
15
|
+
y + h < this.posY + this.padY
|
16
|
+
);
|
17
|
+
},
|
18
|
+
|
19
|
+
touchesBody:function(x, y, bx, by, px, py){
|
20
|
+
return !
|
21
|
+
(
|
22
|
+
x + px > this.posX + this.bodX + this.padX ||
|
23
|
+
x + bx - px < this.posX + this.padX ||
|
24
|
+
y + py > this.posY + this.bodY - this.padY ||
|
25
|
+
y + by - py < this.posY + this.padY
|
26
|
+
);
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
})
|
31
|
+
.inherit({
|
32
|
+
|
33
|
+
padX:0,
|
34
|
+
padY:0,
|
35
|
+
|
36
|
+
bodX:1,
|
37
|
+
bodY:1
|
38
|
+
|
39
|
+
});
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
The drag component adds functions to move points
|
3
|
+
in relation to its starting postion.
|
4
|
+
*/
|
5
|
+
re.c('drag')
|
6
|
+
.inherit({
|
7
|
+
posX:0,
|
8
|
+
posY:0,
|
9
|
+
|
10
|
+
dragX:0,
|
11
|
+
dragY:0,
|
12
|
+
|
13
|
+
dragging:false
|
14
|
+
})
|
15
|
+
.extend({
|
16
|
+
|
17
|
+
startDrag:function(x, y){
|
18
|
+
if(!this.dragging){
|
19
|
+
this.dragging = true;
|
20
|
+
this.dragX = x;
|
21
|
+
this.dragY = y;
|
22
|
+
}
|
23
|
+
},
|
24
|
+
|
25
|
+
endDrag:function(){
|
26
|
+
this.dragging = false;
|
27
|
+
},
|
28
|
+
|
29
|
+
updateDrag:function(x, y){
|
30
|
+
if(this.dragging){
|
31
|
+
this.posX += x - this.dragX;
|
32
|
+
this.posY += y - this.dragY;
|
33
|
+
|
34
|
+
this.dragX = x;
|
35
|
+
this.dragY = y;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
});
|