From cc51a56827703ad55bdbdd0285d53b991bdc6dfe Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 1 May 2008 14:41:15 +0000 Subject: [PATCH] Locked skidding (which can now be selected as the hardest difficulty). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@1792 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/challenges/worlds_end_gp.cpp | 4 ++-- src/gui/race_options.cpp | 23 ++++++++++++++++++++--- src/kart.cpp | 4 ++-- src/race_manager.cpp | 15 +++++++++++++++ src/race_manager.hpp | 4 ++-- src/user_config.cpp | 1 + src/user_config.hpp | 1 + 7 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/challenges/worlds_end_gp.cpp b/src/challenges/worlds_end_gp.cpp index 2fba4feba..6069b2f71 100644 --- a/src/challenges/worlds_end_gp.cpp +++ b/src/challenges/worlds_end_gp.cpp @@ -24,9 +24,9 @@ WorldsEndGP::WorldsEndGP() : Challenge("worldsendgp","Win the At World's End Grand Prix") { setChallengeDescription("Come first in the At World's End\nGrand Prix with 3 'Racer' Level AI karts."); - setFeatureDescription("New Grand Prix: All Track's GP\nand Bonus Preview: Skidding\nnow available"); + setFeatureDescription("New Grand Prix: All Track's GP\nand Bonus Preview: Skidding\nnow available.\nSelect 'skidding' as difficulty."); setFeature("All tracks"); - //TODO setFeature(""); Add Skidding Preview + setFeature("skidding"); // Add Skidding Preview addDependency("islandfollow"); addDependency("racetracktime"); addDependency("tollwaytime"); diff --git a/src/gui/race_options.cpp b/src/gui/race_options.cpp index 681c0e725..7beb10c66 100644 --- a/src/gui/race_options.cpp +++ b/src/gui/race_options.cpp @@ -18,8 +18,10 @@ #include "race_manager.hpp" #include "race_options.hpp" #include "widget_manager.hpp" +#include "user_config.hpp" #include "menu_manager.hpp" #include "material_manager.hpp" +#include "unlock_manager.hpp" #include "translation.hpp" #if defined(WIN32) && !defined(__CYGWIN__) # define snprintf _snprintf @@ -133,7 +135,12 @@ void RaceOptions::select() switch ( widget_manager->getSelectedWgt() ) { case WTOK_DIFFICULTY_UP: - if( m_difficulty == RaceManager::RD_MEDIUM ) + if( m_difficulty == RaceManager::RD_HARD && !unlock_manager->isLocked("skidding")) + { + m_difficulty = RaceManager::RD_SKIDDING; + widget_manager->setWgtText( WTOK_DIFFICULTY, _("Skidding Preview") ); + } + else if( m_difficulty == RaceManager::RD_MEDIUM ) { m_difficulty = RaceManager::RD_HARD; widget_manager->setWgtText( WTOK_DIFFICULTY, _("Racer") ); @@ -146,7 +153,13 @@ void RaceOptions::select() break; case WTOK_DIFFICULTY_DOWN: - if( m_difficulty == RaceManager::RD_HARD ) + if( m_difficulty == RaceManager::RD_SKIDDING ) + { + m_difficulty = RaceManager::RD_HARD; + widget_manager->setWgtText( WTOK_DIFFICULTY, _("Racer") ); + } + + else if( m_difficulty == RaceManager::RD_HARD ) { m_difficulty = RaceManager::RD_MEDIUM; widget_manager->setWgtText( WTOK_DIFFICULTY, _("Driver") ); @@ -214,7 +227,11 @@ void RaceOptions::select() case WTOK_START: if( race_manager->getRaceMode() != RaceManager::RM_TIME_TRIAL ) { - if( m_difficulty == RaceManager::RD_HARD ) + if( m_difficulty == RaceManager::RD_SKIDDING ) + { + race_manager->setDifficulty( RaceManager::RD_SKIDDING ); + } + else if( m_difficulty == RaceManager::RD_HARD ) { race_manager->setDifficulty( RaceManager::RD_HARD ); } diff --git a/src/kart.cpp b/src/kart.cpp index d8ec18d1d..537333b02 100644 --- a/src/kart.cpp +++ b/src/kart.cpp @@ -598,7 +598,7 @@ void Kart::update(float dt) // track again) if (material->isReset() && isOnGround()) forceRescue(); else if(material->isZipper() && isOnGround()) handleZipper(); - else // neither zipper nor reset --> set friction + else if(user_config->m_skidding) // set friction otherwise if it's enabled { for(int i=0; igetNumWheels(); i++) { @@ -712,7 +712,7 @@ float Kart::handleWheelie(float dt) { // Disable the upright constraint, since it will otherwise // work against the wheelie - m_uprightConstraint->setLimit(m_kart_properties->getUprightTolerance()); + m_uprightConstraint->setLimit(M_PI); if ( m_wheelie_angle < getWheelieMaxPitch() ) m_wheelie_angle += getWheeliePitchRate() * dt; diff --git a/src/race_manager.cpp b/src/race_manager.cpp index b52cfcdc3..37f92ef8d 100644 --- a/src/race_manager.cpp +++ b/src/race_manager.cpp @@ -85,6 +85,21 @@ void RaceManager::setNumPlayers(int num) } } // setNumPlayers +//----------------------------------------------------------------------------- +void RaceManager::setDifficulty(Difficulty diff) +{ + if(diff==RD_SKIDDING) + { + m_difficulty = RD_HARD; + user_config->m_skidding = true; + } + else + { + m_difficulty = diff; + user_config->m_skidding = false; + } +} // setDifficulty + //----------------------------------------------------------------------------- void RaceManager::setTrack(const std::string& track) { diff --git a/src/race_manager.hpp b/src/race_manager.hpp index 4ace531f9..3b616bf4b 100644 --- a/src/race_manager.hpp +++ b/src/race_manager.hpp @@ -48,7 +48,7 @@ class RaceManager public: enum RaceModeType { RM_TIME_TRIAL, RM_QUICK_RACE, RM_GRAND_PRIX, RM_FOLLOW_LEADER }; - enum Difficulty { RD_EASY, RD_MEDIUM, RD_HARD }; + enum Difficulty { RD_EASY, RD_MEDIUM, RD_HARD, RD_SKIDDING }; private: struct KartStatus @@ -105,7 +105,7 @@ public: void setNumPlayers(int num); void reset(); void setGrandPrix(const CupData &cup) { m_cup = cup; } - void setDifficulty(Difficulty diff) { m_difficulty = diff; } + void setDifficulty(Difficulty diff); void setNumLaps(int num) { m_num_laps.clear(); m_num_laps.push_back(num); } void setTrack(const std::string& track); diff --git a/src/user_config.cpp b/src/user_config.cpp index dcdd6bb87..ca740730f 100644 --- a/src/user_config.cpp +++ b/src/user_config.cpp @@ -104,6 +104,7 @@ void UserConfig::setDefaults() m_herring_style = "new"; m_background_music = ""; m_profile = 0; + m_skidding = false; m_use_kph = false; m_replay_history = false; m_width = 800; diff --git a/src/user_config.hpp b/src/user_config.hpp index 57eb7586d..9cd6d928f 100644 --- a/src/user_config.hpp +++ b/src/user_config.hpp @@ -169,6 +169,7 @@ public: bool m_display_fps; int m_profile; // Positive number: time in seconds, neg: # laps // 0 if no profiling. Never saved in config file! + bool m_skidding; std::string m_herring_style; std::string m_username; std::string m_background_music;