Started implementing clicking on a challenge to start it

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4870 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2010-02-28 00:52:41 +00:00
parent fb35d4a390
commit 6f278f6d1e
9 changed files with 55 additions and 34 deletions

View File

@ -97,7 +97,10 @@ public:
// the feature remains locked. // the feature remains locked.
virtual bool raceFinished() {return false;} // end of a race virtual bool raceFinished() {return false;} // end of a race
virtual bool grandPrixFinished() {return false;} // end of a GP virtual bool grandPrixFinished() {return false;} // end of a GP
virtual void setRace() const = 0; // set race to use
/** sets the right parameters in RaceManager to try this challenge */
virtual void setRace() const = 0;
/** Checks if a challenge is valid. */ /** Checks if a challenge is valid. */
virtual void check() const = 0; virtual void check() const = 0;
}; };

View File

@ -54,7 +54,10 @@ public:
#else #else
ChallengeData(const std::string& filename) throw(std::runtime_error); ChallengeData(const std::string& filename) throw(std::runtime_error);
#endif #endif
/** sets the right parameters in RaceManager to try this challenge */
void setRace() const; void setRace() const;
virtual void check() const; virtual void check() const;
virtual bool raceFinished(); virtual bool raceFinished();
virtual bool grandPrixFinished(); virtual bool grandPrixFinished();

View File

@ -210,7 +210,7 @@ std::vector<const Challenge*> UnlockManager::getActiveChallenges()
} // getActiveChallenges } // getActiveChallenges
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Challenge* UnlockManager::getChallenge(const std::string& id) const Challenge* UnlockManager::getChallenge(const std::string& id)
{ {
if(m_all_challenges.find(id)==m_all_challenges.end()) return NULL; if(m_all_challenges.find(id)==m_all_challenges.end()) return NULL;
return m_all_challenges[id]; return m_all_challenges[id];

View File

@ -36,7 +36,6 @@ private:
AllChallengesType m_all_challenges; AllChallengesType m_all_challenges;
std::map<std::string, bool> m_locked_features; std::map<std::string, bool> m_locked_features;
std::vector<const Challenge*> m_unlocked_features; std::vector<const Challenge*> m_unlocked_features;
Challenge *getChallenge (const std::string& id);
void computeActive (); void computeActive ();
void load (); void load ();
@ -65,6 +64,8 @@ public:
/** Returns the list of currently inaccessible (locked) challenges */ /** Returns the list of currently inaccessible (locked) challenges */
const std::vector<const Challenge*> getLockedChallenges(); const std::vector<const Challenge*> getLockedChallenges();
const Challenge *getChallenge (const std::string& id);
void raceFinished (); void raceFinished ();
void grandPrixFinished (); void grandPrixFinished ();
void lockFeature (Challenge* challenge); void lockFeature (Challenge* challenge);

View File

@ -18,7 +18,15 @@
#include "states_screens/challenges.hpp" #include "states_screens/challenges.hpp"
#include "challenges/unlock_manager.hpp" #include "challenges/unlock_manager.hpp"
#include "config/user_config.hpp"
#include "guiengine/engine.hpp"
#include "input/device_manager.hpp"
#include "input/input_manager.hpp"
#include "io/file_manager.hpp"
#include "network/network_manager.hpp"
#include "race/race_manager.hpp"
#include "states_screens/state_manager.hpp" #include "states_screens/state_manager.hpp"
#include "utils/translation.hpp" #include "utils/translation.hpp"
@ -28,11 +36,6 @@
using irr::core::stringw; using irr::core::stringw;
using irr::core::stringc; using irr::core::stringc;
#include "config/user_config.hpp"
#include "guiengine/engine.hpp"
#include "io/file_manager.hpp"
namespace GUIEngine namespace GUIEngine
{ {
@ -62,28 +65,20 @@ namespace GUIEngine
const int solvedChallengeAmount = solvedChallenges.size(); const int solvedChallengeAmount = solvedChallenges.size();
const int lockedChallengeAmount = lockedChallenges.size(); const int lockedChallengeAmount = lockedChallenges.size();
char buffer[64];
for (int n=0; n<activeChallengeAmount; n++) for (int n=0; n<activeChallengeAmount; n++)
{ {
sprintf(buffer, "challenge%i", n);
std::cout << "// Adding challenge " << buffer << " : <" << activeChallenges[n]->getId().c_str() << ">\n";
w->addItem(activeChallenges[n]->getName() + L"\n" + activeChallenges[n]->getChallengeDescription(), w->addItem(activeChallenges[n]->getName() + L"\n" + activeChallenges[n]->getChallengeDescription(),
buffer, "/gui/challenge.png"); activeChallenges[n]->getId(), "/gui/challenge.png");
} }
for (int n=0; n<solvedChallengeAmount; n++) for (int n=0; n<solvedChallengeAmount; n++)
{ {
// TODO : add bronze/silver/gold difficulties to challenges // TODO : add bronze/silver/gold difficulties to challenges
sprintf(buffer, "solved%i", n); w->addItem(solvedChallenges[n]->getName(), solvedChallenges[n]->getId(), "/textures/cup_gold.png");
w->addItem(solvedChallenges[n]->getName(), buffer, "/textures/cup_gold.png");
std::cout << "// Adding challenge " << buffer << " : <" << solvedChallenges[n]->getId().c_str() << ">\n";
} }
for (int n=0; n<lockedChallengeAmount; n++) for (int n=0; n<lockedChallengeAmount; n++)
{ {
w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked",
"/gui/challenge.png", true); "/gui/challenge.png", true);
std::cout << "// Adding locked challenge <" << lockedChallenges[n]->getId().c_str() << ">\n";
} }
@ -114,6 +109,33 @@ namespace GUIEngine
{ {
unlock_manager->playLockSound(); unlock_manager->playLockSound();
} }
else
{
//FIXME: simplify and centralize race start sequence!!
// Use latest used device
InputDevice* device = input_manager->getDeviceList()->getLatestUsedDevice();
// Create player and associate player with device (FIXME: ask for player ident)
StateManager::get()->createActivePlayer( UserConfigParams::m_all_players.get(0), device );
// Set up race manager appropriately
race_manager->setNumLocalPlayers(1);
race_manager->setLocalKartInfo(0, UserConfigParams::m_default_kart);
// ASSIGN should make sure that only input from assigned devices is read.
input_manager->getDeviceList()->setAssignMode(ASSIGN);
// Go straight to the race
StateManager::get()->enterGameState();
network_manager->initCharacterDataStructures();
network_manager->setupPlayerKartInfo();
// Launch challenge
unlock_manager->getChallenge(selection)->setRace();
race_manager->startNew();
}
} }
} }

View File

@ -185,13 +185,7 @@ void startGPGame(const GrandPrixData* gp)
assert(gp != NULL); assert(gp != NULL);
ModalDialog::dismiss(); ModalDialog::dismiss();
IVideoDriver* driver = GUIEngine::getDriver(); //FIXME: simplify and centralize race start sequence!!
//TODO?: draw a loading screen
driver->endScene();
driver->beginScene(true, false);
driver->endScene();
StateManager::get()->enterGameState(); StateManager::get()->enterGameState();
//race_manager->setDifficulty(RaceManager::RD_HARD); //race_manager->setDifficulty(RaceManager::RD_HARD);

View File

@ -274,16 +274,10 @@ void TrackInfoDialog::updateHighScores()
*/ */
void startGame(const std::string trackIdent, const int num_laps) void startGame(const std::string trackIdent, const int num_laps)
{ {
//FIXME: simplify and centralize race start sequence!!
ModalDialog::dismiss(); ModalDialog::dismiss();
IVideoDriver* driver = GUIEngine::getDriver();
//TODO?: draw a loading screen
driver->endScene();
driver->beginScene(true, false);
driver->endScene();
StateManager::get()->enterGameState(); StateManager::get()->enterGameState();
//race_manager->setDifficulty(RaceManager::RD_HARD); //race_manager->setDifficulty(RaceManager::RD_HARD);
race_manager->setTrack(trackIdent.c_str()); race_manager->setTrack(trackIdent.c_str());

View File

@ -128,7 +128,11 @@ void RaceGUI::createMarkerTexture()
for(unsigned int i=0; i<num_karts; i++) for(unsigned int i=0; i<num_karts; i++)
{ {
const std::string& kart_ident = race_manager->getKartIdent(i); const std::string& kart_ident = race_manager->getKartIdent(i);
assert(kart_ident.size() > 0);
const KartProperties *kp = kart_properties_manager->getKart(kart_ident); const KartProperties *kp = kart_properties_manager->getKart(kart_ident);
assert(kp != NULL);
core::vector2df center((float)((m_marker_rendered_size>>1)+i*m_marker_rendered_size), core::vector2df center((float)((m_marker_rendered_size>>1)+i*m_marker_rendered_size),
(float)(m_marker_rendered_size>>1) ); (float)(m_marker_rendered_size>>1) );
int count = kp->getShape(); int count = kp->getShape();