Started implementing locking (follow-the-leader is now locked) + 3 strikes must not appear in single player
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@4024 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
0a84da2726
commit
73a925e3b6
@ -117,6 +117,7 @@ void SFXManager::loadSfx()
|
|||||||
}
|
}
|
||||||
loadSingleSfx(lisp, "ugh", SOUND_UGH );
|
loadSingleSfx(lisp, "ugh", SOUND_UGH );
|
||||||
loadSingleSfx(lisp, "skid", SOUND_SKID );
|
loadSingleSfx(lisp, "skid", SOUND_SKID );
|
||||||
|
loadSingleSfx(lisp, "locked", SOUND_LOCKED );
|
||||||
loadSingleSfx(lisp, "bowling_roll", SOUND_BOWLING_ROLL );
|
loadSingleSfx(lisp, "bowling_roll", SOUND_BOWLING_ROLL );
|
||||||
loadSingleSfx(lisp, "bowling_strike",SOUND_BOWLING_STRIKE );
|
loadSingleSfx(lisp, "bowling_strike",SOUND_BOWLING_STRIKE );
|
||||||
loadSingleSfx(lisp, "winner", SOUND_WINNER );
|
loadSingleSfx(lisp, "winner", SOUND_WINNER );
|
||||||
|
@ -45,7 +45,7 @@ public:
|
|||||||
{
|
{
|
||||||
SOUND_UGH, SOUND_SKID, SOUND_BOWLING_ROLL, SOUND_BOWLING_STRIKE, SOUND_WINNER, SOUND_CRASH, SOUND_GRAB,
|
SOUND_UGH, SOUND_SKID, SOUND_BOWLING_ROLL, SOUND_BOWLING_STRIKE, SOUND_WINNER, SOUND_CRASH, SOUND_GRAB,
|
||||||
SOUND_SHOT, SOUND_GOO, SOUND_WEE, SOUND_EXPLOSION, SOUND_BZZT, SOUND_BEEP, SOUND_BACK_MENU, SOUND_USE_ANVIL,
|
SOUND_SHOT, SOUND_GOO, SOUND_WEE, SOUND_EXPLOSION, SOUND_BZZT, SOUND_BEEP, SOUND_BACK_MENU, SOUND_USE_ANVIL,
|
||||||
SOUND_USE_PARACHUTE, SOUND_SELECT_MENU, SOUND_MOVE_MENU, SOUND_FULL,
|
SOUND_USE_PARACHUTE, SOUND_SELECT_MENU, SOUND_MOVE_MENU, SOUND_FULL, SOUND_LOCKED,
|
||||||
SOUND_PRESTART, SOUND_START, SOUND_ENGINE_SMALL, SOUND_ENGINE_LARGE,
|
SOUND_PRESTART, SOUND_START, SOUND_ENGINE_SMALL, SOUND_ENGINE_LARGE,
|
||||||
NUM_SOUNDS
|
NUM_SOUNDS
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "audio/sfx_base.hpp"
|
||||||
|
#include "audio/sfx_manager.hpp"
|
||||||
#include "config/user_config.hpp"
|
#include "config/user_config.hpp"
|
||||||
#include "challenges/challenge_data.hpp"
|
#include "challenges/challenge_data.hpp"
|
||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
@ -42,6 +44,8 @@ UnlockManager::UnlockManager()
|
|||||||
// in main).
|
// in main).
|
||||||
unlock_manager=this;
|
unlock_manager=this;
|
||||||
|
|
||||||
|
m_locked_sound = sfx_manager->newSFX(SFXManager::SOUND_LOCKED);
|
||||||
|
|
||||||
// Read challenges from .../data
|
// Read challenges from .../data
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
std::set<std::string> result;
|
std::set<std::string> result;
|
||||||
@ -220,6 +224,11 @@ void UnlockManager::save()
|
|||||||
challenge_file.close();
|
challenge_file.close();
|
||||||
} // save
|
} // save
|
||||||
|
|
||||||
|
void UnlockManager::playLockSound() const
|
||||||
|
{
|
||||||
|
m_locked_sound->play();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void UnlockManager::computeActive()
|
void UnlockManager::computeActive()
|
||||||
{
|
{
|
||||||
|
@ -26,10 +26,12 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
class XMLNode;
|
class XMLNode;
|
||||||
|
class SFXBase;
|
||||||
|
|
||||||
class UnlockManager
|
class UnlockManager
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
SFXBase *m_locked_sound;
|
||||||
typedef std::map<std::string, Challenge*> AllChallengesType;
|
typedef std::map<std::string, Challenge*> AllChallengesType;
|
||||||
AllChallengesType m_all_challenges;
|
AllChallengesType m_all_challenges;
|
||||||
std::map<std::string, bool> m_locked_features;
|
std::map<std::string, bool> m_locked_features;
|
||||||
@ -55,6 +57,10 @@ public:
|
|||||||
void lockFeature (Challenge* challenge);
|
void lockFeature (Challenge* challenge);
|
||||||
bool isLocked (const std::string& feature);
|
bool isLocked (const std::string& feature);
|
||||||
void check () const;
|
void check () const;
|
||||||
|
|
||||||
|
/** Eye- (or rather ear-) candy. Play a sound when user tries to access a locked area */
|
||||||
|
void playLockSound() const;
|
||||||
|
|
||||||
}; // UnlockManager
|
}; // UnlockManager
|
||||||
|
|
||||||
extern UnlockManager* unlock_manager;
|
extern UnlockManager* unlock_manager;
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "main_loop.hpp"
|
#include "main_loop.hpp"
|
||||||
#include "audio/sound_manager.hpp"
|
#include "audio/sound_manager.hpp"
|
||||||
|
#include "challenges/unlock_manager.hpp"
|
||||||
#include "config/player.hpp"
|
#include "config/player.hpp"
|
||||||
#include "config/user_config.hpp"
|
#include "config/user_config.hpp"
|
||||||
#include "graphics/irr_driver.hpp"
|
#include "graphics/irr_driver.hpp"
|
||||||
@ -182,15 +183,31 @@ void StateManager::menuEventRaceSetup(Widget* widget, const std::string& name)
|
|||||||
w2->addItem( _("Snaky Competition\nAll blows allowed, so catch weapons and make clever use of them!"),
|
w2->addItem( _("Snaky Competition\nAll blows allowed, so catch weapons and make clever use of them!"),
|
||||||
"normal",
|
"normal",
|
||||||
file_manager->getDataDir() + "/gui/mode_normal.png");
|
file_manager->getDataDir() + "/gui/mode_normal.png");
|
||||||
|
|
||||||
w2->addItem( _("Time Trial\nContains no powerups, so only your driving skills matter!"),
|
w2->addItem( _("Time Trial\nContains no powerups, so only your driving skills matter!"),
|
||||||
"timetrial",
|
"timetrial",
|
||||||
file_manager->getDataDir() + "/gui/mode_tt.png");
|
file_manager->getDataDir() + "/gui/mode_tt.png");
|
||||||
w2->addItem( _("Follow the Leader\nrun for second place, as the last kart will be disqualified every time the counter hits zero. Beware : going in front of the leader will get you eliminated too!"),
|
|
||||||
"ftl",
|
if (unlock_manager->isLocked("followtheleader"))
|
||||||
file_manager->getDataDir() + "/gui/mode_ftl.png");
|
{
|
||||||
w2->addItem( _("3-Strikes Battle\nonly in multiplayer games. Hit others with weapons until they lose all their lives."),
|
w2->addItem( _("Locked!\nFulfill challenges to gain access to locked areas"),
|
||||||
"3strikes",
|
"locked",
|
||||||
file_manager->getDataDir() + "/gui/mode_3strikes.png");
|
file_manager->getDataDir() + "textures/gui_lock.png");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w2->addItem( _("Follow the Leader\nrun for second place, as the last kart will be disqualified every time the counter hits zero. Beware : going in front of the leader will get you eliminated too!"),
|
||||||
|
"ftl",
|
||||||
|
file_manager->getDataDir() + "/gui/mode_ftl.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (race_manager->getNumPlayers() > 1)
|
||||||
|
{
|
||||||
|
w2->addItem( _("3-Strikes Battle\nonly in multiplayer games. Hit others with weapons until they lose all their lives."),
|
||||||
|
"3strikes",
|
||||||
|
file_manager->getDataDir() + "/gui/mode_3strikes.png");
|
||||||
|
}
|
||||||
|
|
||||||
getCurrentScreen()->m_inited = true;
|
getCurrentScreen()->m_inited = true;
|
||||||
}
|
}
|
||||||
w2->updateItemDisplay();
|
w2->updateItemDisplay();
|
||||||
@ -240,9 +257,14 @@ void StateManager::menuEventRaceSetup(Widget* widget, const std::string& name)
|
|||||||
}
|
}
|
||||||
else if (selectedMode == "3strikes")
|
else if (selectedMode == "3strikes")
|
||||||
{
|
{
|
||||||
// TODO - 3 strikes battle mode selection
|
// TODO - 3 strikes battle track selection
|
||||||
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
|
||||||
}
|
}
|
||||||
|
else if (selectedMode == "locked")
|
||||||
|
{
|
||||||
|
std::cout << "Requesting sound to be played\n";
|
||||||
|
unlock_manager->playLockSound();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(name == "aikartamount")
|
else if(name == "aikartamount")
|
||||||
{
|
{
|
||||||
@ -308,43 +330,33 @@ void StateManager::menuEventTracks(Widget* widget, const std::string& name)
|
|||||||
DynamicRibbonWidget* w = getCurrentScreen()->getWidget<DynamicRibbonWidget>("tracks");
|
DynamicRibbonWidget* w = getCurrentScreen()->getWidget<DynamicRibbonWidget>("tracks");
|
||||||
assert( w != NULL );
|
assert( w != NULL );
|
||||||
|
|
||||||
if(!getCurrentScreen()->m_inited)
|
if (!getCurrentScreen()->m_inited)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
const std::vector<std::string>&
|
|
||||||
getAllGroups() const { return m_all_groups; }
|
|
||||||
size_t getNumberOfTracks() const { return m_tracks.size(); }
|
|
||||||
Track *getTrack(size_t id) const { return m_tracks[id]; }
|
|
||||||
Track *getTrack(const std::string& ident) const;
|
|
||||||
void unavailable(const std::string &ident);
|
|
||||||
void setUnavailableTracks(const std::vector<std::string> &tracks);
|
|
||||||
bool isAvailable(unsigned int n) const {return m_track_avail[n];}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const int trackAmount = track_manager->getNumberOfTracks();
|
const int trackAmount = track_manager->getNumberOfTracks();
|
||||||
|
bool hasLockedTracks = false;
|
||||||
for (int n=0; n<trackAmount; n++)
|
for (int n=0; n<trackAmount; n++)
|
||||||
{
|
{
|
||||||
Track* curr = track_manager->getTrack(n);
|
Track* curr = track_manager->getTrack(n);
|
||||||
|
if (unlock_manager->isLocked(curr->getIdent()))
|
||||||
|
{
|
||||||
|
hasLockedTracks = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
w->addItem(curr->getName(), curr->getIdent(), curr->getScreenshotFile());
|
w->addItem(curr->getName(), curr->getIdent(), curr->getScreenshotFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (hasLockedTracks)
|
||||||
w->addItem("Track 1","t1","gui/track1.png");
|
{
|
||||||
w->addItem("Track 2","t2","gui/track2.png");
|
w->addItem(_("Locked Tracks"), "Lock", "textures/gui_lock.png");
|
||||||
w->addItem("Track 3","t3","gui/track3.png");
|
}
|
||||||
w->addItem("Track 4","t4","gui/track4.png");
|
|
||||||
w->addItem("Track 5","t5","gui/track5.png");
|
|
||||||
w->addItem("Track 6","t6","gui/track6.png");
|
|
||||||
w->addItem("Track 7","t7","gui/track7.png");
|
|
||||||
w->addItem("Track 8","t8","gui/track8.png");
|
|
||||||
*/
|
|
||||||
getCurrentScreen()->m_inited = true;
|
getCurrentScreen()->m_inited = true;
|
||||||
}
|
}
|
||||||
w->updateItemDisplay();
|
w->updateItemDisplay();
|
||||||
|
|
||||||
}
|
}
|
||||||
// -- track seelction screen
|
// -- track seelction screen
|
||||||
if(name == "tracks")
|
if (name == "tracks")
|
||||||
{
|
{
|
||||||
DynamicRibbonWidget* w2 = dynamic_cast<DynamicRibbonWidget*>(widget);
|
DynamicRibbonWidget* w2 = dynamic_cast<DynamicRibbonWidget*>(widget);
|
||||||
if(w2 != NULL)
|
if(w2 != NULL)
|
||||||
@ -360,7 +372,7 @@ void StateManager::menuEventTracks(Widget* widget, const std::string& name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(name == "gps")
|
else if (name == "gps")
|
||||||
{
|
{
|
||||||
RibbonWidget* w = dynamic_cast<RibbonWidget*>(widget);
|
RibbonWidget* w = dynamic_cast<RibbonWidget*>(widget);
|
||||||
if(w != NULL)
|
if(w != NULL)
|
||||||
@ -416,6 +428,11 @@ void StateManager::eventCallback(Widget* widget, const std::string& name)
|
|||||||
{
|
{
|
||||||
std::cout << "event!! " << name.c_str() << std::endl;
|
std::cout << "event!! " << name.c_str() << std::endl;
|
||||||
|
|
||||||
|
if (name == "lock")
|
||||||
|
{
|
||||||
|
unlock_manager->playLockSound();
|
||||||
|
}
|
||||||
|
|
||||||
Screen* topScreen = getCurrentScreen();
|
Screen* topScreen = getCurrentScreen();
|
||||||
if (topScreen == NULL) return;
|
if (topScreen == NULL) return;
|
||||||
const std::string& screen_name = topScreen->getName();
|
const std::string& screen_name = topScreen->getName();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user