Make SFX depends on race result too

Currently use gp_end for test
This commit is contained in:
Benau 2016-01-03 10:19:51 +08:00
parent 37da8423f8
commit d4e312885a
5 changed files with 67 additions and 63 deletions

View File

@ -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.

View File

@ -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

View File

@ -21,7 +21,6 @@
#include <iostream>
#include <algorithm>
#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 */

View File

@ -774,8 +774,6 @@ public:
{
return m_kart_last_position_on_overworld;
}
// ------------------------------------------------------------------------
bool getKartResult(AbstractKart* kart) const;
}; // RaceManager

View File

@ -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)