void OverWorld::onFirePressed(Controller* who) { const std::vector<OverworldChallenge>& challenges = Track::getCurrentTrack()->getChallengeList(); AbstractKart* k = getKart(0); Vec3 kart_xyz = k->getXYZ(); if (dynamic_cast<RescueAnimation*>(k->getKartAnimation()) != NULL) { // you can't start a race while being rescued return; } for (unsigned int n=0; n<challenges.size(); n++) { if ( (kart_xyz - Vec3(challenges[n].m_position)).length2_2d() < CHALLENGE_DISTANCE_SQUARED) { if (challenges[n].m_challenge_id == "tutorial") { scheduleTutorial(); return; } else { const ChallengeData* challenge = unlock_manager->getChallengeData(challenges[n].m_challenge_id); if (challenge == NULL) { Log::error("track", "Cannot find challenge named '%s'\n", challenges[n].m_challenge_id.c_str()); continue; } const unsigned int val = challenge->getNumTrophies(); bool unlocked = (PlayerManager::getCurrentPlayer()->getPoints() >= val); if (UserConfigParams::m_everything_unlocked) unlocked = true; if (unlocked) { race_manager->setKartLastPositionOnOverworld(kart_xyz); new SelectChallengeDialog(0.8f, 0.8f, challenges[n].m_challenge_id); } } } // end if } // end for } // onFirePressed
void OverWorld::onFirePressed(Controller* who) { const std::vector<OverworldChallenge>& challenges = m_track->getChallengeList(); AbstractKart* k = getKart(0); Vec3 kart_xyz = k->getXYZ(); if (dynamic_cast<RescueAnimation*>(k->getKartAnimation()) != NULL) { // you can't start a race while being rescued return; } for (unsigned int n=0; n<challenges.size(); n++) { if ( challenges[n].isForceFieldSet() && challenges[n].getForceField().m_is_locked ) continue; if ( (kart_xyz - Vec3(challenges[n].m_position)).length2_2d() < CHALLENGE_DISTANCE_SQUARED) { if (challenges[n].m_challenge_id == "tutorial") { scheduleTutorial(); return; } else { race_manager->setKartLastPositionOnOverworld(kart_xyz); new SelectChallengeDialog(0.8f, 0.8f, challenges[n].m_challenge_id); } } // end if } // end for } // onFirePressed