This commit is contained in:
Benau 2016-02-07 10:20:37 +08:00
parent af5b23e5c6
commit b6b644ecb5
6 changed files with 25 additions and 13 deletions

View File

@ -226,8 +226,7 @@ void Flyable::getClosestKart(const AbstractKart **minKart,
// it is not considered a target anymore.
if(kart->isEliminated() || kart == m_owner ||
kart->isInvulnerable() ||
kart->getKartAnimation() ||
kart->isGhostKart() ) continue;
kart->getKartAnimation() ) continue;
const SoccerWorld* sw = dynamic_cast<SoccerWorld*>(World::getWorld());
if (sw)

View File

@ -243,7 +243,7 @@ void Swatter::chooseTarget()
{
AbstractKart *kart = world->getKart(i);
// TODO: isSwatterReady(), isSquashable()?
if(kart->isEliminated() || kart == m_kart || kart->isGhostKart())
if(kart->isEliminated() || kart==m_kart)
continue;
// don't squash an already hurt kart
if (kart->isInvulnerable() || kart->isSquashed())

View File

@ -75,6 +75,9 @@ public:
// ------------------------------------------------------------------------
/** Returns whether this kart is a ghost (replay) kart. */
virtual bool isGhostKart() const { return true; }
// ------------------------------------------------------------------------
/** Ghost can't be hunted. */
virtual bool isInvulnerable() const { return true; }
}; // GhostKart
#endif

View File

@ -1493,7 +1493,7 @@ void Kart::showZipperFire()
*/
void Kart::setSquash(float time, float slowdown)
{
if (isInvulnerable() || isGhostKart()) return;
if (isInvulnerable()) return;
if (isShielded())
{

View File

@ -102,17 +102,25 @@ void StandardRace::endRaceEarly()
continue;
}
if (!kart->isGhostKart())
if (kart->isGhostKart())
{
// Keep active players apart for now
if (kart->getController()->isPlayerController())
active_players.push_back(kartid);
// Ghost karts finish
setKartPosition(kartid, i - (unsigned int) active_players.size());
kart->finishedRace(estimateFinishTimeForKart(kart));
}
else
{
// AI karts finish
setKartPosition(kartid, i - (unsigned int) active_players.size());
kart->finishedRace(estimateFinishTimeForKart(kart));
if (kart->getController()->isPlayerController())
{
// Keep active players apart for now
active_players.push_back(kartid);
}
else
{
// AI karts finish
setKartPosition(kartid, i - (unsigned int) active_players.size());
kart->finishedRace(estimateFinishTimeForKart(kart));
}
}
} // i <= kart_amount
// Now make the active players finish

View File

@ -25,6 +25,7 @@
#include "race/race_manager.hpp"
#include "tracks/track.hpp"
#include <irrlicht.h>
#include <stdio.h>
#include <string>
@ -91,8 +92,9 @@ void ReplayPlay::loadKartInfo()
{
if (fgets(s, 1023, fd) == NULL)
Log::fatal("Replay", "Could not read '%s'.", getReplayFilename().c_str());
std::string is_end = std::string(s);
if (is_end == "kart_list_end\n" || is_end == "kart_list_end\r\n") break;
core::stringc is_end(s);
is_end.trim();
if (is_end == "kart_list_end") break;
char s1[1024];
if (sscanf(s,"kart: %s", s1) != 1)