/
CollisionDetector.js
64 lines (41 loc) · 1.39 KB
/
CollisionDetector.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var CollisionDetector = function(){
var bricks = [];
var circle;
var collisionDetector = this;
this.setBricks = function( bricks ){
collisionDetector.bricks = bricks;
};
this.setCircle = function( circle ){
collisionDetector.circle = circle;
};
this.checkCollision = function(){
var collisionData = {};
for( var i = 0; i < collisionDetector.bricks.length; i++ ){
var brickX = collisionDetector.bricks[i][ "posx" ];
var brickY = collisionDetector.bricks[i][ "posy" ];
var circleX = collisionDetector.circle.getCenterX();
var circleY = collisionDetector.circle.getCenterY();
var circleRadius = collisionDetector.circle.radius;
var disX = Math.abs( circleX - brickX - brickLength / 2 );
var disY = Math.abs( circleY - brickY - brickLength / 2 );
var collide = false;
if( disX <= brickLength / 2 && disY <= brickHeight / 2 ){
collide = true;
}
var dx = Math.abs( disX - brickLength / 2 );
var dy = Math.abs( disY - brickHeight / 2 );
if( dx * dx + dy * dy <= circleRadius * circleRadius ){
collide = true;
}
if( collide ){
collisionDetector.bricks.splice( i, 1 );
collisionData[ "posx" ] = brickX;
collisionData[ "posy" ] = brickY;
if( collisionDetector.bricks.length == 0 )
collisionData[ "finished"] = true;
break;
}
}
return collisionData;
};
}