In 3 strikes you now have only 2 spare tires, to be more logical. And when you lose you actually lose your wheels.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@9763 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
@@ -81,16 +81,26 @@ void EmergencyAnimation::reset()
|
||||
/** Eliminates a kart from the race. It removes the kart from the physics
|
||||
* world, and makes the scene node invisible.
|
||||
*/
|
||||
void EmergencyAnimation::eliminate()
|
||||
void EmergencyAnimation::eliminate(bool remove)
|
||||
{
|
||||
if (!playingEmergencyAnimation())
|
||||
if (!playingEmergencyAnimation() && remove)
|
||||
{
|
||||
World::getWorld()->getPhysics()->removeKart(m_kart);
|
||||
}
|
||||
|
||||
if (m_stars_effect)
|
||||
{
|
||||
m_stars_effect->reset();
|
||||
m_stars_effect->update(1);
|
||||
}
|
||||
|
||||
m_eliminated = true;
|
||||
m_kart_mode = EA_NONE;
|
||||
|
||||
m_kart->getNode()->setVisible(false);
|
||||
if (remove)
|
||||
{
|
||||
m_kart->getNode()->setVisible(false);
|
||||
}
|
||||
} // eliminate
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -98,7 +98,7 @@ public:
|
||||
bool isEliminated () const {return m_eliminated;}
|
||||
/** Returns a pointer to the stars effect. */
|
||||
const Stars *getStarEffect () const {return m_stars_effect; }
|
||||
void eliminate ();
|
||||
void eliminate (bool remove);
|
||||
|
||||
}; // EmergencyAnimation
|
||||
#endif
|
||||
|
||||
@@ -577,6 +577,13 @@ void Kart::reset()
|
||||
if(m_controller)
|
||||
m_controller->reset();
|
||||
|
||||
// 3 strikes mode can hide the wheels
|
||||
scene::ISceneNode** wheels = getKartModel()->getWheelNodes();
|
||||
wheels[0]->setVisible(true);
|
||||
wheels[1]->setVisible(true);
|
||||
wheels[2]->setVisible(true);
|
||||
wheels[3]->setVisible(true);
|
||||
|
||||
} // reset
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -757,7 +764,8 @@ void Kart::update(float dt)
|
||||
{
|
||||
if (m_eliminated)
|
||||
{
|
||||
getNode()->setVisible(false);
|
||||
printf("a\n");
|
||||
EmergencyAnimation::update(dt);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ void FollowTheLeaderRace::countdownReachedZero()
|
||||
printf("[ftl] Eliminiating kart '%s' at position %d.\n",
|
||||
kart->getIdent().c_str(), position_to_remove);
|
||||
}
|
||||
removeKart(kart->getWorldKartId());
|
||||
eliminateKart(kart->getWorldKartId());
|
||||
|
||||
// In case that the kart on position 1 was removed, we have
|
||||
// to set the correct position (which equals the remaining
|
||||
|
||||
@@ -97,22 +97,16 @@ void ThreeStrikesBattle::kartAdded(Kart* kart, scene::ISceneNode* node)
|
||||
float coord = -kart->getKartLength()*0.5f;
|
||||
|
||||
scene::IMeshSceneNode* tire_node = irr_driver->addMesh(m_tire, node);
|
||||
tire_node->setPosition(core::vector3df(0.0f, 0.55f, coord - 0.25f));
|
||||
tire_node->setPosition(core::vector3df(-0.15f, 0.3f, coord - 0.21f));
|
||||
tire_node->setScale(core::vector3df(0.4f, 0.4f, 0.4f));
|
||||
tire_node->setRotation(core::vector3df(90.0f, 0.0f, 0.0f));
|
||||
tire_node->setName("tire1");
|
||||
|
||||
|
||||
tire_node = irr_driver->addMesh(m_tire, node);
|
||||
tire_node->setPosition(core::vector3df(-0.2f, 0.3f, coord - 0.3f));
|
||||
tire_node->setPosition(core::vector3df(0.15f, 0.3f, coord - 0.21f));
|
||||
tire_node->setScale(core::vector3df(0.4f, 0.4f, 0.4f));
|
||||
tire_node->setRotation(core::vector3df(90.0f, 0.0f, 0.0f));
|
||||
tire_node->setName("tire2");
|
||||
|
||||
tire_node = irr_driver->addMesh(m_tire, node);
|
||||
tire_node->setPosition(core::vector3df(0.2f, 0.3f, coord - 0.3f));
|
||||
tire_node->setScale(core::vector3df(0.4f, 0.4f, 0.4f));
|
||||
tire_node->setRotation(core::vector3df(90.0f, 0.0f, 0.0f));
|
||||
tire_node->setName("tire3");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -136,7 +130,12 @@ void ThreeStrikesBattle::kartHit(const int kart_id)
|
||||
if (m_kart_info[kart_id].m_lives < 1)
|
||||
{
|
||||
m_karts[kart_id]->finishedRace(WorldStatus::getTime());
|
||||
removeKart(kart_id);
|
||||
scene::ISceneNode** wheels = m_karts[kart_id]->getKartModel()->getWheelNodes();
|
||||
wheels[0]->setVisible(false);
|
||||
wheels[1]->setVisible(false);
|
||||
wheels[2]->setVisible(false);
|
||||
wheels[3]->setVisible(false);
|
||||
eliminateKart(kart_id, true, false);
|
||||
}
|
||||
|
||||
const unsigned int NUM_KARTS = getNumKarts();
|
||||
@@ -170,10 +169,6 @@ void ThreeStrikesBattle::kartHit(const int kart_id)
|
||||
{
|
||||
curr->setVisible(m_kart_info[kart_id].m_lives >= 2);
|
||||
}
|
||||
else if (core::stringc(curr->getName()) == "tire3")
|
||||
{
|
||||
curr->setVisible(m_kart_info[kart_id].m_lives >= 1);
|
||||
}
|
||||
}
|
||||
|
||||
// schedule a tire to be thrown away (but can't do it in this callback
|
||||
@@ -326,10 +321,6 @@ void ThreeStrikesBattle::restartRace()
|
||||
{
|
||||
curr->setVisible(true);
|
||||
}
|
||||
else if (core::stringc(curr->getName()) == "tire3")
|
||||
{
|
||||
curr->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
}// next kart
|
||||
|
||||
@@ -778,7 +778,7 @@ Kart *World::getLocalPlayerKart(unsigned int n) const
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** Remove (eliminate) a kart from the race */
|
||||
void World::removeKart(int kart_number, bool notifyOfElimination)
|
||||
void World::eliminateKart(int kart_number, bool notifyOfElimination, bool remove)
|
||||
{
|
||||
Kart *kart = m_karts[kart_number];
|
||||
|
||||
@@ -814,7 +814,7 @@ void World::removeKart(int kart_number, bool notifyOfElimination)
|
||||
// ignored in all loops). Important:world->getCurrentNumKarts() returns
|
||||
// the number of karts still racing. This value can not be used for loops
|
||||
// over all karts, use race_manager->getNumKarts() instead!
|
||||
kart->eliminate();
|
||||
kart->eliminate(remove);
|
||||
m_eliminated_karts++;
|
||||
|
||||
} // removeKart
|
||||
|
||||
@@ -86,7 +86,7 @@ protected:
|
||||
void updateHighscores (int* best_highscore_rank, int* best_finish_time, std::string* highscore_who,
|
||||
StateManager::ActivePlayer** best_player);
|
||||
void resetAllKarts ();
|
||||
void removeKart (int kart_number, bool notifyOfElimination=true);
|
||||
void eliminateKart (int kart_number, bool notifyOfElimination=true, bool remove=true);
|
||||
Controller*
|
||||
loadAIController (Kart *kart);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user