From d4e312885a1b57ba70295870b65ad5c870400474 Mon Sep 17 00:00:00 2001 From: Benau Date: Sun, 3 Jan 2016 10:19:51 +0800 Subject: [PATCH] Make SFX depends on race result too Currently use gp_end for test --- src/karts/kart.cpp | 58 +++++++++++++++++++++++++- src/karts/kart.hpp | 3 ++ src/race/race_manager.cpp | 56 ------------------------- src/race/race_manager.hpp | 2 - src/states_screens/race_result_gui.cpp | 11 +++-- 5 files changed, 67 insertions(+), 63 deletions(-) diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp index 7f23f6f7b..7b7dddf76 100644 --- a/src/karts/kart.cpp +++ b/src/karts/kart.cpp @@ -867,7 +867,7 @@ void Kart::finishedRace(float time) race_manager->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG) { // Save for music handling in race result gui - m_race_result = race_manager->getKartResult(this); + setRaceResult(); setController(new EndController(this, m_controller->getPlayer(), m_controller)); @@ -879,6 +879,62 @@ void Kart::finishedRace(float time) } } // finishedRace +//----------------------------------------------------------------------------- +void Kart::setRaceResult() +{ + if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_NORMAL_RACE || + race_manager->getMinorMode() == RaceManager::MINOR_MODE_TIME_TRIAL) + { + // TODO NetworkController? + if (this->getController()->isPlayerController()) + { + PlayerProfile *player = PlayerManager::getCurrentPlayer(); + const ChallengeStatus *challenge = player->getCurrentChallengeStatus(); + // In case of a GP challenge don't make the end animation depend + // on if the challenge is fulfilled + if (challenge && !challenge->getData()->isGrandPrix()) + { + if (challenge->getData()->isChallengeFulfilled()) + m_race_result = true; + else + m_race_result = false; + } + else if (this->getPosition() <= 0.5f*race_manager->getNumberOfKarts() || + this->getPosition() == 1) + m_race_result = true; + else + m_race_result = false; + } + else + { + if (this->getPosition() <= 0.5f*race_manager->getNumberOfKarts() || + this->getPosition() == 1) + m_race_result = true; + else + m_race_result = false; + } + } + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER || + race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES) + { + // the kart wins if it isn't eliminated + m_race_result = !this->isEliminated(); + } + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER) + { + // TODO complete together with soccer ai! + m_race_result = true; + } + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG) + { + // Easter egg mode only has one player, so always win + m_race_result = true; + } + else + Log::warn("Kart", "Unknown game mode given."); + +} // setKartResult + //----------------------------------------------------------------------------- /** Called when an item is collected. It will either adjust the collected * energy, or update the attachment or powerup for this kart. diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp index 539041de9..955337108 100644 --- a/src/karts/kart.hpp +++ b/src/karts/kart.hpp @@ -444,6 +444,9 @@ public: // ------------------------------------------------------------------------ /** Returns whether this kart wins or loses. */ virtual bool getRaceResult() const { return m_race_result; } + // ------------------------------------------------------------------------ + /** Set this kart race result. */ + void setRaceResult(); }; // Kart diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 13f9f8440..7abaac61e 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -21,7 +21,6 @@ #include #include -#include "challenges/challenge_status.hpp" #include "challenges/unlock_manager.hpp" #include "config/player_manager.hpp" #include "config/saved_grand_prix.hpp" @@ -890,59 +889,4 @@ void RaceManager::setupPlayerKartInfo() computeRandomKartList(); } // setupPlayerKartInfo -//----------------------------------------------------------------------------- -bool RaceManager::getKartResult(AbstractKart* kart) const -{ - if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_NORMAL_RACE || - race_manager->getMinorMode() == RaceManager::MINOR_MODE_TIME_TRIAL) - { - // TODO NetworkController? - if (kart->getController()->isPlayerController()) - { - PlayerProfile *player = PlayerManager::getCurrentPlayer(); - const ChallengeStatus *challenge = player->getCurrentChallengeStatus(); - // In case of a GP challenge don't make the end animation depend - // on if the challenge is fulfilled - if (challenge && !challenge->getData()->isGrandPrix()) - { - if (challenge->getData()->isChallengeFulfilled()) - return true; - else - return false; - } - else if (kart->getPosition() <= 0.5f*race_manager->getNumberOfKarts() || - kart->getPosition() == 1) - return true; - else - return false; - } - else - { - if (kart->getPosition() <= 0.5f*race_manager->getNumberOfKarts() || - kart->getPosition() == 1) - return true; - else - return false; - } - } - else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER || - race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES) - { - // the kart wins if it isn't eliminated - return !kart->isEliminated(); - } - else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER) - { - // TODO complete together with soccer ai! - return true; - } - else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG) - { - // Easter egg mode only has one player, so always win - return true; - } - - return true; // Fallback -} // getKartResult - /* EOF */ diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 990c0cb61..062e5cd50 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -774,8 +774,6 @@ public: { return m_kart_last_position_on_overworld; } - // ------------------------------------------------------------------------ - bool getKartResult(AbstractKart* kart) const; }; // RaceManager diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index defee6c44..0709e0e4b 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -83,7 +83,6 @@ void RaceResultGUI::init() getWidget("bottom")->setVisible(false); music_manager->stopMusic(); - m_finish_sound = SFXManager::get()->quickSound("race_finish"); bool human_win = true; unsigned int num_karts = race_manager->getNumberOfKarts(); @@ -94,9 +93,13 @@ void RaceResultGUI::init() human_win = human_win && kart->getRaceResult(); } - std::string path = (human_win ? //TODO proper win / lose music - file_manager->getAsset(FileManager::MUSIC, "Boom_boom_boom.music") : - file_manager->getAsset(FileManager::MUSIC, "race_summary.music")); + m_finish_sound = SFXManager::get()->quickSound( + human_win ? "gp_end" : "race_finish"); + + //std::string path = (human_win ? Different result music too later + // file_manager->getAsset(FileManager::MUSIC, "race_summary.music") : + // file_manager->getAsset(FileManager::MUSIC, "race_summary.music")); + std::string path = file_manager->getAsset(FileManager::MUSIC, "race_summary.music"); m_race_over_music = music_manager->getMusicInformation(path); if (!m_finish_sound)