Add minimal support for GP challenges in the overworld. More to come
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11566 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
80786003c3
commit
f74f945558
@ -77,36 +77,6 @@ ChallengeData::ChallengeData(const std::string& filename)
|
||||
return;
|
||||
}
|
||||
|
||||
const XMLNode* track_node = root->getNode("track");
|
||||
|
||||
// TODO: add GP support
|
||||
if (track_node == NULL)
|
||||
{
|
||||
throw std::runtime_error("Challenge file " + filename + " has no <track> node!");
|
||||
}
|
||||
|
||||
|
||||
if (!track_node->get("id", &m_track_id ))
|
||||
{
|
||||
error("track");
|
||||
}
|
||||
if (track_manager->getTrack(m_track_id) == NULL)
|
||||
{
|
||||
error("track");
|
||||
}
|
||||
|
||||
if (!track_node->get("laps", &m_num_laps) && m_minor != RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
||||
{
|
||||
error("laps");
|
||||
}
|
||||
|
||||
|
||||
const XMLNode* requirements_node = root->getNode("requirements");
|
||||
if (requirements_node == NULL)
|
||||
{
|
||||
throw std::runtime_error("Challenge file " + filename + " has no <requirements> node!");
|
||||
}
|
||||
requirements_node->get("trophies", &m_num_trophies);
|
||||
|
||||
|
||||
const XMLNode* mode_node = root->getNode("mode");
|
||||
@ -135,6 +105,49 @@ ChallengeData::ChallengeData(const std::string& filename)
|
||||
else
|
||||
error("minor");
|
||||
|
||||
const XMLNode* track_node = root->getNode("track");
|
||||
const XMLNode* gp_node = root->getNode("grandprix");
|
||||
|
||||
if (m_major == RaceManager::MAJOR_MODE_SINGLE && track_node == NULL)
|
||||
{
|
||||
throw std::runtime_error("Challenge file " + filename + " has no <track> node!");
|
||||
}
|
||||
if (m_major == RaceManager::MAJOR_MODE_GRAND_PRIX && gp_node == NULL)
|
||||
{
|
||||
throw std::runtime_error("Challenge file " + filename + " has no <grandprix> node!");
|
||||
}
|
||||
|
||||
if (track_node != NULL)
|
||||
{
|
||||
if (!track_node->get("id", &m_track_id ))
|
||||
{
|
||||
error("track");
|
||||
}
|
||||
if (track_manager->getTrack(m_track_id) == NULL)
|
||||
{
|
||||
error("track");
|
||||
}
|
||||
|
||||
if (!track_node->get("laps", &m_num_laps) && m_minor != RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
||||
{
|
||||
error("laps");
|
||||
}
|
||||
}
|
||||
else if (gp_node != NULL)
|
||||
{
|
||||
if (!gp_node->get("id", &m_gp_id ))
|
||||
{
|
||||
error("grandprix");
|
||||
}
|
||||
}
|
||||
|
||||
const XMLNode* requirements_node = root->getNode("requirements");
|
||||
if (requirements_node == NULL)
|
||||
{
|
||||
throw std::runtime_error("Challenge file " + filename + " has no <requirements> node!");
|
||||
}
|
||||
requirements_node->get("trophies", &m_num_trophies);
|
||||
|
||||
const XMLNode* difficulties[RaceManager::DIFFICULTY_COUNT];
|
||||
difficulties[0] = root->getNode("easy");
|
||||
difficulties[1] = root->getNode("medium");
|
||||
@ -229,11 +242,13 @@ ChallengeData::ChallengeData(const std::string& filename)
|
||||
*/
|
||||
|
||||
core::stringw description;
|
||||
if (track_node != NULL)
|
||||
{
|
||||
//I18N: number of laps to race in a challenge
|
||||
description += _("Laps : %i", m_num_laps);
|
||||
description += core::stringw(L"\n");
|
||||
}
|
||||
|
||||
// TODO: add this info in the difficulties dialog perhaps?
|
||||
/*
|
||||
//I18N: number of AI karts in a challenge
|
||||
description += _("AI Karts : %i", m_num_karts - 1);
|
||||
|
@ -112,6 +112,7 @@ public:
|
||||
void setId(const std::string& s) { m_id = s; }
|
||||
|
||||
const std::string& getTrackId() const { return m_track_id; }
|
||||
const std::string& getGPId() const { return m_gp_id; }
|
||||
|
||||
int getNumLaps() const { return m_num_laps; }
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "io/file_manager.hpp"
|
||||
#include "modes/world.hpp"
|
||||
#include "network/network_manager.hpp"
|
||||
#include "race/grand_prix_manager.hpp"
|
||||
#include "race/race_manager.hpp"
|
||||
#include "states_screens/dialogs/select_challenge.hpp"
|
||||
#include "tracks/track_manager.hpp"
|
||||
@ -116,9 +117,17 @@ SelectChallengeDialog::SelectChallengeDialog(const float percentWidth,
|
||||
medium_label->setText( getLabel(RaceManager::RD_MEDIUM, c->getData()), false );
|
||||
expert_label->setText( getLabel(RaceManager::RD_HARD, c->getData()), false );
|
||||
|
||||
if (c->getData()->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||
{
|
||||
const GrandPrixData* gp = grand_prix_manager->getGrandPrix(c->getData()->getGPId());
|
||||
getWidget<LabelWidget>("title")->setText( gp->getName(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
const wchar_t* track_name = track_manager->getTrack(c->getData()->getTrackId())->getName();
|
||||
getWidget<LabelWidget>("title")->setText( track_name, true );
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
@ -42,6 +42,7 @@ using namespace irr;
|
||||
#include "karts/kart_properties.hpp"
|
||||
#include "karts/kart_properties_manager.hpp"
|
||||
#include "modes/world.hpp"
|
||||
#include "race/grand_prix_manager.hpp"
|
||||
#include "race/race_manager.hpp"
|
||||
#include "tracks/track.hpp"
|
||||
#include "tracks/track_manager.hpp"
|
||||
@ -422,6 +423,25 @@ void RaceGUIOverworld::drawGlobalMiniMap()
|
||||
break;
|
||||
}
|
||||
|
||||
if (challenge->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||
{
|
||||
const GrandPrixData* gp = grand_prix_manager->getGrandPrix(challenge->getGPId());
|
||||
|
||||
if (gp == NULL)
|
||||
{
|
||||
fprintf(stderr, "[RaceGUIOverworld] ERROR: Cannot find GP <%s>, "
|
||||
"referenced from challenge <%s>\n",
|
||||
challenge->getGPId().c_str(),
|
||||
challenges[n].m_challenge_id.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
gui::ScalableFont* font = GUIEngine::getTitleFont();
|
||||
font->draw(gp->getName(), pos, video::SColor(255,255,255,255),
|
||||
false, true /* vcenter */, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
Track* track = track_manager->getTrack(challenge->getTrackId());
|
||||
if (track == NULL)
|
||||
{
|
||||
@ -435,7 +455,7 @@ void RaceGUIOverworld::drawGlobalMiniMap()
|
||||
gui::ScalableFont* font = GUIEngine::getTitleFont();
|
||||
font->draw(track->getName(), pos, video::SColor(255,255,255,255),
|
||||
false, true /* vcenter */, NULL);
|
||||
|
||||
}
|
||||
|
||||
pos.UpperLeftCorner.Y += GUIEngine::getTitleFontHeight();
|
||||
pos.LowerRightCorner.Y = UserConfigParams::m_height;
|
||||
|
@ -950,6 +950,12 @@ bool Track::loadMainTrack(const XMLNode &root)
|
||||
|
||||
m_challenges.push_back( OverworldChallenge(xyz, challenge) );
|
||||
|
||||
if (c->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Track* t = track_manager->getTrack(c->getTrackId());
|
||||
if (t == NULL)
|
||||
{
|
||||
@ -965,8 +971,8 @@ bool Track::loadMainTrack(const XMLNode &root)
|
||||
fprintf(stderr, "[WARNING] Cannot find track screenshot <%s>\n", sshot.c_str());
|
||||
continue;
|
||||
}
|
||||
|
||||
scene_node->getMaterial(0).setTexture(0, screenshot);
|
||||
}
|
||||
|
||||
// make transparent
|
||||
for (unsigned int m=0; m<a_mesh->getMeshBufferCount(); m++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user