Try to fix hangs when firstly spawn STA

This commit is contained in:
Benau
2016-10-07 15:29:36 +08:00
parent 91af45337f
commit b055fa573d
2 changed files with 21 additions and 8 deletions

View File

@@ -51,14 +51,14 @@ void SpareTireAI::reset()
//-----------------------------------------------------------------------------
void SpareTireAI::update(float dt)
{
assert(!m_fixed_target_nodes.empty());
if (m_fixed_target_nodes.empty()) return;
m_kart->setSlowdown(MaxSpeed::MS_DECREASE_AI, 0.5f, /*fade_in_time*/0.0f);
BattleAI::update(dt);
m_timer -= dt;
if (m_timer < 0.0f)
unspawn();
BattleAI::update(dt);
} // update
//-----------------------------------------------------------------------------

View File

@@ -106,22 +106,21 @@ void ThreeStrikesBattle::reset()
for(unsigned int n=0; n<kart_amount; n++)
{
// Eliminate all spare tire karts first, they will be spawned if needed
bool is_sta = false;
if (dynamic_cast<SpareTireAI*>(m_karts[n]->getController()) != NULL)
{
// STA has no life
m_kart_info[n].m_lives = 0;
m_karts[n]->setPosition(-1);
eliminateKart(n, /*notify_of_elimination*/ false);
is_sta = true;
}
else
{
m_kart_info[n].m_lives = 3;
// no positions in this mode
m_karts[n]->setPosition(-1);
}
// no positions in this mode
m_karts[n]->setPosition(-1);
scene::ISceneNode* kart_node = m_karts[n]->getNode();
// FIXME: sorry for this ugly const_cast, irrlicht doesn't seem to allow getting a writable list of children, wtf??
@@ -165,6 +164,8 @@ void ThreeStrikesBattle::reset()
for (unsigned int i = 0; i < m_spare_tire_karts.size(); i++)
{
m_spare_tire_karts[i]->finishedRace(0.0f);
m_spare_tire_karts[i]->getNode()->setVisible(false);
m_eliminated_karts++;
}
}
} // reset
@@ -349,6 +350,18 @@ void ThreeStrikesBattle::update(float dt)
WorldWithRank::update(dt);
WorldWithRank::updateTrack(dt);
if (getPhase() == World::GO_PHASE)
{
// Eliminate all spare tire karts first, they will be spawned if needed
for (unsigned int i = 0; i < m_spare_tire_karts.size(); i++)
{
if (!m_spare_tire_karts[i]->isEliminated())
{
m_spare_tire_karts[i]->eliminate();
}
}
}
const float period = 20.0f;
if (!m_spare_tire_karts.empty() &&
period < getTimeSinceStart() / float(m_sta_spawned_count))