Rally X
ELEN3009 Project by Justin Wernick and David Schneider
|
00001 #include "CollisionDetector.h" 00002 00003 void CollisionDetector::checkCollisions(list<PlayerCar>& players, list<EnemyCar>& enemies, list<Checkpoint>& checkpoints, list<Rock>& rocks, list<Smokescreen>& smokescreens) 00004 { 00005 for (list<PlayerCar>::iterator playIter = players.begin(); playIter!=players.end(); ++playIter) 00006 { 00007 for (list<EnemyCar>::iterator enemyIter = enemies.begin(); enemyIter!=enemies.end(); ++enemyIter) 00008 { 00009 if ((abs(playIter->x() - enemyIter->x())<1)&&(abs(playIter->y() - enemyIter->y())<1)) 00010 { 00011 collision(*playIter, *enemyIter); 00012 } 00013 } 00014 00015 for (list<Checkpoint>::iterator checkIter = checkpoints.begin(); checkIter!=checkpoints.end(); ++checkIter) 00016 { 00017 if ((abs(playIter->x() - checkIter->x())<1)&&(abs(playIter->y() - checkIter->y())<1)) 00018 { 00019 collision(*playIter, *checkIter); 00020 } 00021 } 00022 00023 for (list<Rock>::iterator rockIter = rocks.begin(); rockIter!=rocks.end(); ++rockIter) 00024 { 00025 if ((abs(playIter->x() - rockIter->x())<1)&&(abs(playIter->y() - rockIter->y())<1)) 00026 { 00027 collision(*playIter, *rockIter); 00028 } 00029 } 00030 } 00031 00032 for (list<EnemyCar>::iterator enemyIter = enemies.begin(); enemyIter!=enemies.end(); ++enemyIter) 00033 { 00034 for (list<Smokescreen>::iterator smokeIter = smokescreens.begin(); smokeIter!=smokescreens.end(); ++smokeIter) 00035 { 00036 if ((abs(enemyIter->x() - smokeIter->x())<1)&&(abs(enemyIter->y() - smokeIter->y())<1)) 00037 { 00038 collision(*enemyIter, *smokeIter); 00039 } 00040 } 00041 } 00042 } 00043 00044 void CollisionDetector::collision(PlayerCar& player, Checkpoint& checkpoint) 00045 { 00046 player.gotCheckpoint(); 00047 checkpoint.collect(); 00048 } 00049 00050 void CollisionDetector::collision(PlayerCar& player, Rock& rock) 00051 { 00052 player.crash(); 00053 } 00054 00055 void CollisionDetector::collision(PlayerCar& player, EnemyCar& enemy) 00056 { 00057 player.crash(); 00058 enemy.crash(); 00059 } 00060 00061 void CollisionDetector::collision(EnemyCar& enemy, Smokescreen& smokescreen) 00062 { 00063 enemy.blind(); 00064 }