bool CollisionDetector::isLandingSuccessful() { GameObjectManager *gameObjManager = GameObjectManager::instance(); Spaceship *spaceship = gameObjManager->getSpaceship(); TerrainGenerator* terrainGenerator = TerrainGenerator::instance(); TerrainSegment* segment = terrainGenerator->getTerrainSegmentBasedOnX(spaceship->getXPosition()); if (typeid(LandingPad) != typeid(*segment)) { return false; } else { return landingSucceeds(spaceship); } }
bool CollisionDetector::spaceshipCrashWillHappen() { GameObjectManager *gameObjManager = GameObjectManager::instance(); Spaceship *spaceship = gameObjManager->getSpaceship(); TerrainGenerator* terrainGenerator = TerrainGenerator::instance(); TerrainSegment* segment = terrainGenerator->getTerrainSegmentBasedOnX(spaceship->getXPosition()); if (typeid(LandingPad) == typeid(*segment)) { bool softLanding = spaceship->getYSpeed() > landingSpeedLimit; bool withinLandingPad = segment->isSpaceshipWithinSegment(spaceship); return softLanding && withinLandingPad; } else { return collisionHappens(spaceship); } }