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
|
;; STK parameters
|
||||||
;; --------------
|
;; --------------
|
||||||
(max-karts 10 ) ;; maximum number of karts
|
(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
|
;; Attachment related parameters
|
||||||
;; -----------------------------
|
;; -----------------------------
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "world.hpp"
|
#include "world.hpp"
|
||||||
#include "scene.hpp"
|
#include "scene.hpp"
|
||||||
#include "user_config.hpp"
|
#include "user_config.hpp"
|
||||||
|
#include "stk_config.hpp"
|
||||||
|
|
||||||
RaceManager* race_manager= NULL;
|
RaceManager* race_manager= NULL;
|
||||||
|
|
||||||
@ -95,22 +96,43 @@ GrandPrixMode::start_race(int n)
|
|||||||
RaceSetup raceSetup;
|
RaceSetup raceSetup;
|
||||||
raceSetup.m_mode = RaceSetup::RM_GRAND_PRIX;
|
raceSetup.m_mode = RaceSetup::RM_GRAND_PRIX;
|
||||||
raceSetup.m_difficulty = m_difficulty;
|
raceSetup.m_difficulty = m_difficulty;
|
||||||
raceSetup.m_num_laps = 2;
|
raceSetup.m_num_laps = 1;
|
||||||
raceSetup.m_track = m_cup.getTrack(n);
|
raceSetup.m_track = m_cup.getTrack(n);
|
||||||
raceSetup.m_karts.resize(m_karts.size());
|
raceSetup.m_karts.resize(m_karts.size());
|
||||||
raceSetup.m_players.resize(m_players.size());
|
raceSetup.m_players.resize(m_players.size());
|
||||||
raceSetup.setHerringStyle(m_cup.getHerringStyle());
|
raceSetup.setHerringStyle(m_cup.getHerringStyle());
|
||||||
|
|
||||||
|
if (n == 0) //The first race, Players start at the back
|
||||||
for(int i = 0; i < int(m_karts.size()); ++i)
|
{
|
||||||
{
|
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()))
|
|
||||||
{
|
{
|
||||||
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
|
// the constructor assigns this object to the global
|
||||||
// variable world. Admittedly a bit ugly, but simplifies
|
// variable world. Admittedly a bit ugly, but simplifies
|
||||||
// handling of objects which get created in the constructor
|
// handling of objects which get created in the constructor
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "race_setup.hpp"
|
#include "race_setup.hpp"
|
||||||
#include "cup_data.hpp"
|
#include "cup_data.hpp"
|
||||||
@ -47,7 +48,7 @@ private:
|
|||||||
|
|
||||||
RaceDifficulty m_difficulty;
|
RaceDifficulty m_difficulty;
|
||||||
int m_num_karts;
|
int m_num_karts;
|
||||||
|
|
||||||
struct KartStatus
|
struct KartStatus
|
||||||
{
|
{
|
||||||
std::string ident;//The .tkkf filename without the .tkkf
|
std::string ident;//The .tkkf filename without the .tkkf
|
||||||
@ -59,15 +60,16 @@ private:
|
|||||||
KartStatus(const std::string& ident_, const int& score_,
|
KartStatus(const std::string& ident_, const int& score_,
|
||||||
const int& prev_finish_pos_, const int& player_) :
|
const int& prev_finish_pos_, const int& player_) :
|
||||||
ident(ident_), score(score_), prev_finish_pos(prev_finish_pos_),
|
ident(ident_), score(score_), prev_finish_pos(prev_finish_pos_),
|
||||||
player(player_) {}}
|
player(player_) {}
|
||||||
;
|
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<std::string> m_players;
|
std::vector<std::string> m_players;
|
||||||
CupData m_cup;
|
CupData m_cup;
|
||||||
std::vector<KartStatus> m_karts;
|
std::vector<KartStatus> m_karts;
|
||||||
int m_track;
|
int m_track;
|
||||||
|
|
||||||
GrandPrixMode(const std::vector<std::string>& players_,
|
GrandPrixMode(const std::vector<std::string>& players_,
|
||||||
const CupData& cup_,
|
const CupData& cup_,
|
||||||
RaceDifficulty difficulty_,
|
RaceDifficulty difficulty_,
|
||||||
@ -77,7 +79,7 @@ public:
|
|||||||
void start();
|
void start();
|
||||||
void next();
|
void next();
|
||||||
void exit_race();
|
void exit_race();
|
||||||
|
|
||||||
int getKartScore (int kart) const { return m_karts[kart].score;}
|
int getKartScore (int kart) const { return m_karts[kart].score;}
|
||||||
int getPositionScore(int pos) const { return pos>4 ? 0 : 4-pos;}
|
int getPositionScore(int pos) const { return pos>4 ? 0 : 4-pos;}
|
||||||
std::string getKartName(int kart) const { return m_karts[kart].ident;}
|
std::string getKartName(int kart) const { return m_karts[kart].ident;}
|
||||||
@ -86,8 +88,14 @@ public:
|
|||||||
m_karts[kart].score +=
|
m_karts[kart].score +=
|
||||||
getPositionScore(pos);
|
getPositionScore(pos);
|
||||||
}
|
}
|
||||||
|
friend bool operator< (const KartStatus& left, const KartStatus& right)
|
||||||
|
{
|
||||||
|
if (left.score < right.score) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class QuickRaceMode : public RaceMode
|
class QuickRaceMode : public RaceMode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -54,6 +54,7 @@ void STKConfig::load(const std::string filename)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
CHECK_NEG(m_max_karts, "max-karts" );
|
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_r, "m_corn_r" );
|
||||||
CHECK_NEG(m_corn_f, "m_corn_f" );
|
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_speed_reverse_ratio = m_explosion_impulse = m_jump_velocity = -99.9f;
|
||||||
|
|
||||||
m_max_karts = -100;
|
m_max_karts = -100;
|
||||||
|
m_grid_order = -100;
|
||||||
m_air_res_reduce[0] = 1.0f;
|
m_air_res_reduce[0] = 1.0f;
|
||||||
} // init_defaults
|
} // init_defaults
|
||||||
|
|
||||||
@ -170,6 +172,7 @@ void STKConfig::getAllData(const lisp::Lisp* lisp)
|
|||||||
lisp->get("anvil-time", m_anvil_time );
|
lisp->get("anvil-time", m_anvil_time );
|
||||||
lisp->get("explosion-impulse", m_explosion_impulse );
|
lisp->get("explosion-impulse", m_explosion_impulse );
|
||||||
lisp->get("max-karts", m_max_karts );
|
lisp->get("max-karts", m_max_karts );
|
||||||
|
lisp->get("grid-order", m_grid_order );
|
||||||
|
|
||||||
// Get the default KartProperties
|
// Get the default KartProperties
|
||||||
// ------------------------------
|
// ------------------------------
|
||||||
|
@ -44,6 +44,7 @@ public:
|
|||||||
// considered to be a shortcut
|
// considered to be a shortcut
|
||||||
float m_explosion_impulse; // impulse affecting each non-hit kart
|
float m_explosion_impulse; // impulse affecting each non-hit kart
|
||||||
int m_max_karts; // maximum number of karts
|
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() {};
|
STKConfig() : KartProperties() {};
|
||||||
void init_defaults ();
|
void init_defaults ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user