made faster music a choice of the base class. various 'for' loop optimisations. replaced incorrect 'int' with 'bool'

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2299 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria
2008-09-24 00:43:45 +00:00
parent 03ae2ce6d4
commit e1df51b631
8 changed files with 31 additions and 19 deletions

View File

@@ -31,7 +31,7 @@ class AutoKart : public Kart
const btTransform& init_pos) :
Kart(kart_name, position, init_pos) {}
int isPlayerKart() const {return 0;}
bool isPlayerKart() const {return false;}
};
#endif

View File

@@ -219,7 +219,7 @@ public:
void handleExplosion (const Vec3& pos, bool direct_hit);
const std::string& getName () const {return m_kart_properties->getName();}
const std::string& getIdent () const {return m_kart_properties->getIdent();}
virtual int isPlayerKart () const {return 0; }
virtual bool isPlayerKart () const {return false; }
// addMessages gets called by world to add messages to the gui
virtual void addMessages () {};
virtual void collectedHerring (const Herring &herring, int random_attachment);

View File

@@ -80,17 +80,18 @@ void FollowTheLeaderRace::update(float delta)
// kart, otherwise remove the last kart.
int position_to_remove = m_kart[0]->getPosition()==1
? getCurrentNumKarts() : 1;
for (kart_number=0; kart_number<(int)m_kart.size(); kart_number++)
const int kart_amount = m_kart.size();
for (kart_number=0; kart_number<kart_amount; kart_number++)
{
if(m_kart[kart_number]->isEliminated()) continue;
if(m_kart[kart_number]->getPosition()==position_to_remove)
break;
}
if(kart_number==(int)m_kart.size())
if(kart_number==kart_amount)
{
fprintf(stderr,"Problem with removing leader: position %d not found\n",
position_to_remove);
for(int i=0; i<(int)m_kart.size(); i++)
for(int i=0; i<kart_amount; i++)
{
fprintf(stderr,"kart %d: eliminated %d position %d\n",
i,m_kart[i]->isEliminated(), m_kart[i]->getPosition());

View File

@@ -36,6 +36,7 @@ public:
virtual void update(float delta);
virtual void restartRace();
virtual std::string getInternalCode() const;
virtual bool useFastMusicNearEnd() const { return false; }
};

View File

@@ -20,6 +20,10 @@
#include "modes/world.hpp"
/**
* Represents a standard race, i.e. with a start, end and laps.
* Used in Grand Prix, Quick Race and Time Trial.
*/
class StandardRace : public World, public Clock::ClockListener
{
public:

View File

@@ -268,7 +268,8 @@ void World::update(float dt)
if(!user_config->m_replay_history) history->StoreDelta(dt);
if(network_manager->getMode()!=NetworkManager::NW_CLIENT) m_physics->update(dt);
for (int i = 0 ; i <(int) m_kart.size(); ++i)
const int kart_amount = m_kart.size();
for (int i = 0 ; i < kart_amount; ++i)
{
// Update all karts that are not eliminated
if(!m_kart[i]->isEliminated()) m_kart[i]->update(dt) ;
@@ -277,7 +278,7 @@ void World::update(float dt)
projectile_manager->update(dt);
herring_manager->update(dt);
for ( Karts::size_type i = 0 ; i < m_kart.size(); ++i)
for ( Karts::size_type i = 0 ; i < kart_amount; ++i)
{
if(m_kart[i]->isEliminated()) continue; // ignore eliminated kart
if(!m_kart[i]->hasFinishedRace()) updateRacePosition((int)i);
@@ -318,12 +319,13 @@ void World::updateHighscores()
// again by a faster kart in the same race), which might be confusing
// if we ever decide to display a message (e.g. during a race)
unsigned int *index = new unsigned int[m_kart.size()];
for (unsigned int i=0; i<m_kart.size(); i++ )
const int kart_amount = m_kart.size();
for (unsigned int i=0; i<kart_amount; i++ )
{
index[m_kart[i]->getPosition()-1] = i;
}
for(unsigned int pos=0; pos<m_kart.size(); pos++)
for(unsigned int pos=0; pos<kart_amount; pos++)
{
#ifdef DEBUG
// FIXME begin: triggered if the positions of the karts are incorrect:
@@ -358,7 +360,8 @@ void World::updateHighscores()
//-----------------------------------------------------------------------------
void World::estimateFinishTimes()
{
for ( Karts::size_type i = 0; i < m_kart.size(); ++i)
const int kart_amount = m_kart.size();
for ( Karts::size_type i = 0; i < kart_amount; ++i)
{
if(!m_kart[i]->hasFinishedRace())
{
@@ -439,7 +442,8 @@ void World::updateRacePosition ( int k )
/* Find position of kart 'k' */
for ( Karts::size_type j = 0 ; j < m_kart.size() ; ++j )
const unsigned int kart_amount = m_kart.size();
for ( Karts::size_type j = 0 ; j < kart_amount ; ++j )
{
if(int(j) == k) continue;
if(m_kart[j]->isEliminated()) continue; // eliminated karts
@@ -455,14 +459,14 @@ void World::updateRacePosition ( int k )
}
m_kart[k]->setPosition(p);
// Switch on faster music (except in follow leader mode) if not already
// done so, and the first kart is doing its last lap, and the estimated
// Switch on faster music if not already done so, if the
// first kart is doing its last lap, and if the estimated
// remaining time is less than 30 seconds.
if(!m_faster_music_active &&
m_kart[k]->getLap()==race_manager->getNumLaps()-1 &&
p==1 &&
race_manager->getMinorMode()!=RaceManager::MINOR_MODE_FOLLOW_LEADER &&
m_kart[k]->estimateFinishTime()-getTime()<30.0f )
if(!m_faster_music_active &&
m_kart[k]->getLap()==race_manager->getNumLaps()-1 &&
p==1 &&
useFastMusicNearEnd() &&
m_kart[k]->estimateFinishTime()-getTime()<30.0f )
{
sound_manager->switchToFastMusic();
m_faster_music_active=true;

View File

@@ -173,6 +173,8 @@ public:
*/
virtual std::string getInternalCode() const = 0;
virtual bool useFastMusicNearEnd() const { return true; }
void pause();
void unpause();

View File

@@ -65,7 +65,7 @@ public:
virtual void crashed (Kart *k);
virtual void setPosition (int p);
virtual void raceFinished (float time);
int isPlayerKart () const {return 1;}
bool isPlayerKart () const {return true;}
Camera* getCamera () {return m_camera;}
void reset();
};