This commit is contained in:
Benau 2019-07-08 01:45:36 +08:00
parent dc8bbfc603
commit 400c1e5347
6 changed files with 32 additions and 21 deletions

View File

@ -823,9 +823,9 @@ void RaceManager::exitRace(bool delete_world)
const int loserThreshold = 3;
std::string winners[3];
std::pair<std::string, float> winners[3];
// because we don't care about AIs that lost
std::vector<std::string> humanLosers;
std::vector<std::pair<std::string, float> > humanLosers;
for (unsigned int i=0; i < kart_status_count; ++i)
{
if(UserConfigParams::logMisc())
@ -837,7 +837,8 @@ void RaceManager::exitRace(bool delete_world)
const int rank = m_kart_status[i].m_gp_rank;
if (rank >= 0 && rank < loserThreshold)
{
winners[rank] = m_kart_status[i].m_ident;
winners[rank].first = m_kart_status[i].m_ident;
winners[rank].second = m_kart_status[i].m_color;
if (m_kart_status[i].m_kart_type == KT_PLAYER ||
m_kart_status[i].m_kart_type == KT_NETWORK_PLAYER)
{
@ -851,7 +852,7 @@ void RaceManager::exitRace(bool delete_world)
if (m_kart_status[i].m_kart_type == KT_PLAYER ||
m_kart_status[i].m_kart_type == KT_NETWORK_PLAYER)
{
humanLosers.push_back(m_kart_status[i].m_ident);
humanLosers.emplace_back(m_kart_status[i].m_ident, m_kart_status[i].m_color);
}
}
}
@ -892,8 +893,8 @@ void RaceManager::exitRace(bool delete_world)
{
Log::error("RaceManager", "There are no winners and no losers."
"This should have never happened\n");
std::vector<std::string> karts;
karts.push_back(UserConfigParams::m_default_kart);
std::vector<std::pair<std::string, float> > karts;
karts.emplace_back(UserConfigParams::m_default_kart, 0.0f);
scene->setKarts(karts);
}
}

View File

@ -24,6 +24,8 @@
#include "config/player_manager.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/lod_node.hpp"
#include "graphics/lod_node.hpp"
#include "graphics/render_info.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/widgets/button_widget.hpp"
@ -159,7 +161,7 @@ void GrandPrixLose::onUpdate(float dt)
// -------------------------------------------------------------------------------------
void GrandPrixLose::setKarts(std::vector<std::string> ident_arg)
void GrandPrixLose::setKarts(std::vector<std::pair<std::string, float> > ident_arg)
{
TrackObjectManager* tobjman = Track::getCurrentTrack()->getTrackObjectManager();
@ -179,10 +181,10 @@ void GrandPrixLose::setKarts(std::vector<std::string> ident_arg)
const int count = (int)ident_arg.size();
for (int n=0; n<count; n++)
{
const KartProperties* kart = kart_properties_manager->getKart(ident_arg[n]);
const KartProperties* kart = kart_properties_manager->getKart(ident_arg[n].first);
if (kart != NULL)
{
KartModel* kart_model = kart->getKartModelCopy();
KartModel* kart_model = kart->getKartModelCopy(std::make_shared<RenderInfo>(ident_arg[n].second));
m_all_kart_models.push_back(kart_model);
scene::ISceneNode* kart_main_node = kart_model->attachModel(true, false);
LODNode* lnode = dynamic_cast<LODNode*>(kart_main_node);
@ -225,7 +227,7 @@ void GrandPrixLose::setKarts(std::vector<std::string> ident_arg)
else
{
Log::warn("GrandPrixLose", "A kart named '%s' could not be found\n",
ident_arg[n].c_str());
ident_arg[n].first.c_str());
m_kart_node[n] = NULL;
} // if kart != NULL
}

View File

@ -22,8 +22,9 @@
#include "guiengine/screen.hpp"
#include "states_screens/grand_prix_cutscene.hpp"
#include <vector>
#include <string>
#include <utility>
#include <vector>
namespace irr { namespace scene { class ISceneNode; class ICameraSceneNode; class ILightSceneNode; class IMeshSceneNode; } }
class KartModel;
@ -61,7 +62,7 @@ public:
void onCutsceneEnd() OVERRIDE;
void onUpdate(float dt) OVERRIDE;
/** \brief set which karts lost this GP */
void setKarts(std::vector<std::string> ident);
void setKarts(std::vector<std::pair<std::string, float> > ident);
MusicInformation* getInGameMenuMusic() const OVERRIDE;
};

View File

@ -24,6 +24,7 @@
#include "config/player_manager.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/lod_node.hpp"
#include "graphics/render_info.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/widgets/button_widget.hpp"
@ -327,23 +328,23 @@ void GrandPrixWin::onUpdate(float dt)
// -------------------------------------------------------------------------------------
void GrandPrixWin::setKarts(const std::string idents_arg[3])
void GrandPrixWin::setKarts(const std::pair<std::string, float> idents_arg[3])
{
TrackObjectManager* tobjman = Track::getCurrentTrack()->getTrackObjectManager();
// reorder in "podium order" (i.e. second player to the left, first player
// in the middle, last at the right)
std::string idents[3];
std::pair<std::string, float> idents[3];
idents[0] = idents_arg[1];
idents[1] = idents_arg[0];
idents[2] = idents_arg[2];
for (int i = 0; i < 3; i++)
{
const KartProperties* kp = kart_properties_manager->getKart(idents[i]);
const KartProperties* kp = kart_properties_manager->getKart(idents[i].first);
if (kp == NULL) continue;
KartModel* kart_model = kp->getKartModelCopy();
KartModel* kart_model = kp->getKartModelCopy(std::make_shared<RenderInfo>(idents[i].second));
m_all_kart_models.push_back(kart_model);
scene::ISceneNode* kart_main_node = kart_model->attachModel(true, false);
LODNode* lnode = dynamic_cast<LODNode*>(kart_main_node);

View File

@ -23,6 +23,7 @@
#include "guiengine/screen.hpp"
#include "karts/kart_model.hpp"
#include "states_screens/grand_prix_cutscene.hpp"
#include <utility>
namespace irr { namespace scene { class ISceneNode; class ICameraSceneNode; class ILightSceneNode; class IMeshSceneNode; } }
namespace GUIEngine { class LabelWidget; }
@ -74,7 +75,7 @@ public:
MusicInformation* getInGameMenuMusic() const OVERRIDE;
/** \pre must be called after pushing the screen, but before onUpdate had the chance to be invoked */
void setKarts(const std::string idents[3]);
void setKarts(const std::pair<std::string, float> karts[3]);
void setPlayerWon(bool some_player_won) { m_player_won = some_player_won; }
};

View File

@ -280,7 +280,12 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
race_manager->startSingleRace("gpwin", 999, false);
GrandPrixWin* scene = GrandPrixWin::getInstance();
scene->push();
const std::string winners[] = { "kiki", "nolok", "pidgin" };
const std::pair<std::string, float> winners[] =
{
{ "kiki", 0.6f },
{ "nolok", 1.0f },
{ "pidgin", 0.0f },
};
scene->setKarts(winners);
}
else if (selection == "test_gplose")
@ -293,9 +298,9 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
race_manager->startSingleRace("gplose", 999, false);
GrandPrixLose* scene = GrandPrixLose::getInstance();
scene->push();
std::vector<std::string> losers;
losers.push_back("nolok");
losers.push_back("kiki");
std::vector<std::pair<std::string, float> > losers;
losers.emplace_back("nolok", 1.0f);
losers.emplace_back("kiki", 0.6f);
//losers.push_back("wilber");
//losers.push_back("tux");
scene->setKarts(losers);