The kart start order now depends on the ranking in the
grand prix. It can be set to 'lowest points first' or 'highest points first' in stk_config (patch by Paul Elms). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@1300 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
dc130b5a10
commit
7721c5dd1c
@ -5,6 +5,9 @@
|
||||
;; STK parameters
|
||||
;; --------------
|
||||
(max-karts 10 ) ;; maximum number of karts
|
||||
(grid-order 1 ) ;; order for grand prix, 1 is most
|
||||
;; points 1st, 0 is least points
|
||||
;; 1st
|
||||
|
||||
;; Attachment related parameters
|
||||
;; -----------------------------
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "world.hpp"
|
||||
#include "scene.hpp"
|
||||
#include "user_config.hpp"
|
||||
#include "stk_config.hpp"
|
||||
|
||||
RaceManager* race_manager= NULL;
|
||||
|
||||
@ -95,22 +96,43 @@ GrandPrixMode::start_race(int n)
|
||||
RaceSetup raceSetup;
|
||||
raceSetup.m_mode = RaceSetup::RM_GRAND_PRIX;
|
||||
raceSetup.m_difficulty = m_difficulty;
|
||||
raceSetup.m_num_laps = 2;
|
||||
raceSetup.m_num_laps = 1;
|
||||
raceSetup.m_track = m_cup.getTrack(n);
|
||||
raceSetup.m_karts.resize(m_karts.size());
|
||||
raceSetup.m_players.resize(m_players.size());
|
||||
raceSetup.setHerringStyle(m_cup.getHerringStyle());
|
||||
|
||||
|
||||
for(int i = 0; i < int(m_karts.size()); ++i)
|
||||
{
|
||||
raceSetup.m_karts[m_karts[i].prev_finish_pos] = m_karts[i].ident;
|
||||
if (m_karts[i].player < int(m_players.size()))
|
||||
if (n == 0) //The first race, Players start at the back
|
||||
{
|
||||
for(int i = 0; i < int(m_karts.size()); ++i)
|
||||
{
|
||||
raceSetup.m_players[m_karts[i].player] = i;
|
||||
raceSetup.m_karts[m_karts[i].prev_finish_pos] = m_karts[i].ident;
|
||||
if (m_karts[i].player < int(m_players.size()))
|
||||
{
|
||||
raceSetup.m_players[m_karts[i].player] = m_karts[i].prev_finish_pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else //subsequent races where order of grid is determined by score
|
||||
{
|
||||
std::sort(m_karts.begin(), m_karts.end());//sort karts by increasing score
|
||||
|
||||
//reverse kart order if flagged in stk_config
|
||||
if (stk_config->m_grid_order)
|
||||
{
|
||||
std::reverse(m_karts.begin(), m_karts.end());
|
||||
}
|
||||
|
||||
for(int i = 0;i < int(m_karts.size()); ++i)
|
||||
{
|
||||
raceSetup.m_karts[i] = m_karts[i].ident;
|
||||
if (m_karts[i].player < int(m_players.size()))
|
||||
{
|
||||
raceSetup.m_players[m_karts[i].player] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// the constructor assigns this object to the global
|
||||
// variable world. Admittedly a bit ugly, but simplifies
|
||||
// handling of objects which get created in the constructor
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
#include "race_setup.hpp"
|
||||
#include "cup_data.hpp"
|
||||
@ -47,7 +48,7 @@ private:
|
||||
|
||||
RaceDifficulty m_difficulty;
|
||||
int m_num_karts;
|
||||
|
||||
|
||||
struct KartStatus
|
||||
{
|
||||
std::string ident;//The .tkkf filename without the .tkkf
|
||||
@ -59,15 +60,16 @@ private:
|
||||
KartStatus(const std::string& ident_, const int& score_,
|
||||
const int& prev_finish_pos_, const int& player_) :
|
||||
ident(ident_), score(score_), prev_finish_pos(prev_finish_pos_),
|
||||
player(player_) {}}
|
||||
;
|
||||
|
||||
player(player_) {}
|
||||
|
||||
};
|
||||
|
||||
public:
|
||||
std::vector<std::string> m_players;
|
||||
CupData m_cup;
|
||||
std::vector<KartStatus> m_karts;
|
||||
int m_track;
|
||||
|
||||
|
||||
GrandPrixMode(const std::vector<std::string>& players_,
|
||||
const CupData& cup_,
|
||||
RaceDifficulty difficulty_,
|
||||
@ -77,7 +79,7 @@ public:
|
||||
void start();
|
||||
void next();
|
||||
void exit_race();
|
||||
|
||||
|
||||
int getKartScore (int kart) const { return m_karts[kart].score;}
|
||||
int getPositionScore(int pos) const { return pos>4 ? 0 : 4-pos;}
|
||||
std::string getKartName(int kart) const { return m_karts[kart].ident;}
|
||||
@ -86,8 +88,14 @@ public:
|
||||
m_karts[kart].score +=
|
||||
getPositionScore(pos);
|
||||
}
|
||||
friend bool operator< (const KartStatus& left, const KartStatus& right)
|
||||
{
|
||||
if (left.score < right.score) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
class QuickRaceMode : public RaceMode
|
||||
{
|
||||
public:
|
||||
|
@ -54,6 +54,7 @@ void STKConfig::load(const std::string filename)
|
||||
}
|
||||
#endif
|
||||
CHECK_NEG(m_max_karts, "max-karts" );
|
||||
CHECK_NEG(m_grid_order, "grid-order" );
|
||||
|
||||
CHECK_NEG(m_corn_r, "m_corn_r" );
|
||||
CHECK_NEG(m_corn_f, "m_corn_f" );
|
||||
@ -143,6 +144,7 @@ void STKConfig::init_defaults()
|
||||
m_max_speed_reverse_ratio = m_explosion_impulse = m_jump_velocity = -99.9f;
|
||||
|
||||
m_max_karts = -100;
|
||||
m_grid_order = -100;
|
||||
m_air_res_reduce[0] = 1.0f;
|
||||
} // init_defaults
|
||||
|
||||
@ -170,6 +172,7 @@ void STKConfig::getAllData(const lisp::Lisp* lisp)
|
||||
lisp->get("anvil-time", m_anvil_time );
|
||||
lisp->get("explosion-impulse", m_explosion_impulse );
|
||||
lisp->get("max-karts", m_max_karts );
|
||||
lisp->get("grid-order", m_grid_order );
|
||||
|
||||
// Get the default KartProperties
|
||||
// ------------------------------
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
// considered to be a shortcut
|
||||
float m_explosion_impulse; // impulse affecting each non-hit kart
|
||||
int m_max_karts; // maximum number of karts
|
||||
int m_grid_order; // whether grand prix grid is in point order or reverse point order
|
||||
|
||||
STKConfig() : KartProperties() {};
|
||||
void init_defaults ();
|
||||
|
Loading…
x
Reference in New Issue
Block a user