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;
|
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");
|
const XMLNode* mode_node = root->getNode("mode");
|
||||||
@ -135,6 +105,49 @@ ChallengeData::ChallengeData(const std::string& filename)
|
|||||||
else
|
else
|
||||||
error("minor");
|
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];
|
const XMLNode* difficulties[RaceManager::DIFFICULTY_COUNT];
|
||||||
difficulties[0] = root->getNode("easy");
|
difficulties[0] = root->getNode("easy");
|
||||||
difficulties[1] = root->getNode("medium");
|
difficulties[1] = root->getNode("medium");
|
||||||
@ -229,11 +242,13 @@ ChallengeData::ChallengeData(const std::string& filename)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
core::stringw description;
|
core::stringw description;
|
||||||
|
if (track_node != NULL)
|
||||||
|
{
|
||||||
//I18N: number of laps to race in a challenge
|
//I18N: number of laps to race in a challenge
|
||||||
description += _("Laps : %i", m_num_laps);
|
description += _("Laps : %i", m_num_laps);
|
||||||
description += core::stringw(L"\n");
|
description += core::stringw(L"\n");
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: add this info in the difficulties dialog perhaps?
|
|
||||||
/*
|
/*
|
||||||
//I18N: number of AI karts in a challenge
|
//I18N: number of AI karts in a challenge
|
||||||
description += _("AI Karts : %i", m_num_karts - 1);
|
description += _("AI Karts : %i", m_num_karts - 1);
|
||||||
|
@ -112,6 +112,7 @@ public:
|
|||||||
void setId(const std::string& s) { m_id = s; }
|
void setId(const std::string& s) { m_id = s; }
|
||||||
|
|
||||||
const std::string& getTrackId() const { return m_track_id; }
|
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; }
|
int getNumLaps() const { return m_num_laps; }
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
#include "network/network_manager.hpp"
|
||||||
|
#include "race/grand_prix_manager.hpp"
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "states_screens/dialogs/select_challenge.hpp"
|
#include "states_screens/dialogs/select_challenge.hpp"
|
||||||
#include "tracks/track_manager.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 );
|
medium_label->setText( getLabel(RaceManager::RD_MEDIUM, c->getData()), false );
|
||||||
expert_label->setText( getLabel(RaceManager::RD_HARD, 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();
|
const wchar_t* track_name = track_manager->getTrack(c->getData()->getTrackId())->getName();
|
||||||
getWidget<LabelWidget>("title")->setText( track_name, true );
|
getWidget<LabelWidget>("title")->setText( track_name, true );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ using namespace irr;
|
|||||||
#include "karts/kart_properties.hpp"
|
#include "karts/kart_properties.hpp"
|
||||||
#include "karts/kart_properties_manager.hpp"
|
#include "karts/kart_properties_manager.hpp"
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
|
#include "race/grand_prix_manager.hpp"
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "tracks/track.hpp"
|
#include "tracks/track.hpp"
|
||||||
#include "tracks/track_manager.hpp"
|
#include "tracks/track_manager.hpp"
|
||||||
@ -422,6 +423,25 @@ void RaceGUIOverworld::drawGlobalMiniMap()
|
|||||||
break;
|
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());
|
Track* track = track_manager->getTrack(challenge->getTrackId());
|
||||||
if (track == NULL)
|
if (track == NULL)
|
||||||
{
|
{
|
||||||
@ -435,7 +455,7 @@ void RaceGUIOverworld::drawGlobalMiniMap()
|
|||||||
gui::ScalableFont* font = GUIEngine::getTitleFont();
|
gui::ScalableFont* font = GUIEngine::getTitleFont();
|
||||||
font->draw(track->getName(), pos, video::SColor(255,255,255,255),
|
font->draw(track->getName(), pos, video::SColor(255,255,255,255),
|
||||||
false, true /* vcenter */, NULL);
|
false, true /* vcenter */, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
pos.UpperLeftCorner.Y += GUIEngine::getTitleFontHeight();
|
pos.UpperLeftCorner.Y += GUIEngine::getTitleFontHeight();
|
||||||
pos.LowerRightCorner.Y = UserConfigParams::m_height;
|
pos.LowerRightCorner.Y = UserConfigParams::m_height;
|
||||||
|
@ -950,6 +950,12 @@ bool Track::loadMainTrack(const XMLNode &root)
|
|||||||
|
|
||||||
m_challenges.push_back( OverworldChallenge(xyz, challenge) );
|
m_challenges.push_back( OverworldChallenge(xyz, challenge) );
|
||||||
|
|
||||||
|
if (c->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Track* t = track_manager->getTrack(c->getTrackId());
|
Track* t = track_manager->getTrack(c->getTrackId());
|
||||||
if (t == NULL)
|
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());
|
fprintf(stderr, "[WARNING] Cannot find track screenshot <%s>\n", sshot.c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
scene_node->getMaterial(0).setTexture(0, screenshot);
|
scene_node->getMaterial(0).setTexture(0, screenshot);
|
||||||
|
}
|
||||||
|
|
||||||
// make transparent
|
// make transparent
|
||||||
for (unsigned int m=0; m<a_mesh->getMeshBufferCount(); m++)
|
for (unsigned int m=0; m<a_mesh->getMeshBufferCount(); m++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user