Class: DXOpal::Sprite::CollisionArea::Base
- Inherits:
-
Object
- Object
- DXOpal::Sprite::CollisionArea::Base
show all
- Defined in:
- lib/dxopal/sprite/collision_area.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Instance Attribute Details
#sprite ⇒ Object
Sprite corresponds to this hitarea
9
10
11
|
# File 'lib/dxopal/sprite/collision_area.rb', line 9
def sprite
@sprite
end
|
Instance Method Details
#aabb(poss) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/dxopal/sprite/collision_area.rb', line 73
def aabb(poss)
x1 = y1 = Float::INFINITY
x2 = y2 = -Float::INFINITY
%x{
for(var i=0; i<poss.length; i++) {
if (poss[i][0] < x1) x1 = poss[i][0];
if (poss[i][1] < y1) y1 = poss[i][1];
if (poss[i][0] > x2) x2 = poss[i][0];
if (poss[i][1] > y2) y2 = poss[i][1];
}
}
return [[x1, y1], [x2, y2]]
end
|
#absolute(poss) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/dxopal/sprite/collision_area.rb', line 17
def absolute(poss)
ox = @sprite.x
oy = @sprite.y
return poss.map{|(x, y)| [x+ox, y+oy]} if !@sprite.collision_sync
angle = @sprite.angle
cx = @sprite.center_x
cy = @sprite.center_y
sx = @sprite.scale_x
sy = @sprite.scale_y
ret = []
%x{
var rad = Math.PI / 180.0 * angle;
var sin = Math.sin(rad);
var cos = Math.cos(rad);
poss.forEach(function(pos){
var x = pos[0], y = pos[1];
x2 = (x - cx) * sx * cos - (y - cy) * sy * sin + cx + ox;
y2 = (x - cx) * sx * sin + (y - cy) * sy * cos + cy + oy;
ret.push([x2, y2]);
});
}
return ret
end
|
#absolute1(pos) ⇒ Object
42
43
44
|
# File 'lib/dxopal/sprite/collision_area.rb', line 42
def absolute1(pos)
absolute([pos]).first
end
|
#transback(poss, sprite) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/dxopal/sprite/collision_area.rb', line 46
def transback(poss, sprite)
return poss if !sprite.collision_sync
angle = sprite.angle
cx = sprite.x + sprite.center_x
cy = sprite.y + sprite.center_y
sx = sprite.scale_x
sy = sprite.scale_y
ret = []
%x{
var rad = Math.PI / 180.0 * -angle;
var sin = Math.sin(rad);
var cos = Math.cos(rad);
poss.forEach(function(pos){
var x = pos[0], y = pos[1];
x2 = ((x - cx) * cos - (y - cy) * sin) / sx + cx;
y2 = ((x - cx) * sin + (y - cy) * cos) / sy + cy;
ret.push([x2, y2]);
});
}
return ret
end
|
#transback1(pos, sprite) ⇒ Object
69
70
71
|
# File 'lib/dxopal/sprite/collision_area.rb', line 69
def transback1(pos, sprite)
transback([pos], sprite).first
end
|
#type ⇒ Object
Return a string like “Point”, “Rect”, etc. Used for type checking in `collides?` (because Opal's Class#is_a? is not very fast)
13
14
15
|
# File 'lib/dxopal/sprite/collision_area.rb', line 13
def type
raise "override me"
end
|