3 void CollisionManager::subscribe(Thing
* thing
){
7 void CollisionManager::remove(Thing
* thing
){
11 void CollisionManager::update(){
12 std::set
<Thing
*>::iterator it1
,it2
;
13 for (it1
= things
.begin(); it1
!= things
.end(); it1
++) {
14 for (it2
= it1
; it2
!= things
.end(); it2
++) {
15 if (*it1
== *it2
) continue;
16 checkCollision(*it1
,*it2
);
21 bool pointInsidePolygon(Ponto ponto
, Polygon p
) {
22 std::vector
<Linha
>::iterator it
;
23 Ponto
infinito(0xffffff,ponto
.y
);
25 Linha
toinfinity(ponto
,infinito
);
26 for (it
= p
.linhas
.begin(); it
!= p
.linhas
.end(); it
++) {
27 if (linesIntersect(*it
,toinfinity
)) {
37 bool CollisionManager::checkCollision(Thing
* a
, Thing
* b
){
38 if (a
->dead
|| b
->dead
)
41 pa
= a
->getCollision();
42 pb
= b
->getCollision();
43 pa
.translate(a
->getPosition());
44 pb
.translate(b
->getPosition());
45 std::vector
<Linha
>::iterator ita
,itb
;
46 if (pointInsidePolygon(pb
.linhas
[0].vertices
[0],pa
)) {
51 for (ita
= pa
.linhas
.begin(); ita
!= pa
.linhas
.end(); ita
++) {
52 for (itb
= pb
.linhas
.begin(); itb
!= pb
.linhas
.end(); itb
++) {
53 /*std::cout<<"A:"<<(*ita).vertices[0].x<<" "<<(*ita).vertices[0].y<<" "
54 <<(*ita).vertices[1].x<<" "<<(*ita).vertices[1].y<<std::endl;
55 std::cout<<"B:"<<(*itb).vertices[0].x<<" "<<(*itb).vertices[0].y<<" "
56 <<(*itb).vertices[1].x<<" "<<(*itb).vertices[1].y<<std::endl;*/
57 if (linesIntersect(*ita
,*itb
)) {