1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
#include "player.h"
#include "capositiontable.h"
#include "catrophy.h"
CAPositionTable* CAPositionTable::theOneAndOnlyInstance = 0;
/** Returns the one and only instance of position table.
If it doesn't exist yet, it gets created here.
*/
CAPositionTable*
CAPositionTable::getPositionTable() {
if( theOneAndOnlyInstance==0 ) {
theOneAndOnlyInstance = new CAPositionTable();
}
return theOneAndOnlyInstance;
}
/** Constructor.
*/
CAPositionTable::CAPositionTable() {
resetRace();
}
/** Destructor.
*/
CAPositionTable::~CAPositionTable() {}
/** Resets the lap information (rank list).
*/
void
CAPositionTable::resetRace() {
m_raceRankList.clear();
m_diedPlayers.clear();
m_lappedPlayers.clear();
}
bool CAPositionTable::isPossibleWin() const
{
if (m_raceRankList.size()==0)
return true;
else
return false;
}
/** Registers a player in the current lap rank list.
The first player who calls this function is the lap winner.
*/
void
CAPositionTable::playerFinishedRace( Player* player )
{
m_raceRankList.push_back(player);
player->setRaceRank( m_raceRankList.size() );
int points = ((CA_RACEMAXPLAYERS+1)-player->getRaceRank()) * (m_raceLevel +1);
if( points>0 )
{
player->setRacePoints( points );
}
float priceMoney;
if (m_raceLevel == Easy)
priceMoney = CA_PRIZE;
else if (m_raceLevel == Medium)
priceMoney = CA_PRIZE_MEDIUM;
else
priceMoney = CA_PRIZE_HARD;
player->addRaceMoney((float)priceMoney/CA_RACEMAXPLAYERS*(CA_RACEMAXPLAYERS-player->getRaceRank()+1));
}
/** Registers a player in the current lap rank list if he finish the race lapped
No point or money for lapped player
*/
void
CAPositionTable::playerFinishedLapped( Player* player )
{
player->setRaceRank(CA_RACEMAXPLAYERS-m_diedPlayers.size()-m_lappedPlayers.size());
m_lappedPlayers.push_back(player);
}
/** Registers a player in the current lap rank list if he died.
The first player who calls this function is the lap looser.
*/
void
CAPositionTable::playerDied( Player* player )
{
player->setRaceRank(CA_RACEMAXPLAYERS-m_diedPlayers.size()-m_lappedPlayers.size());
m_diedPlayers.push_back(player);
}
// EOF
|