/** Update the world and the track. * \param dt Time step size. */ void SoccerWorld::update(float dt) { updateBallPosition(dt); if (m_track->hasNavMesh()) { updateKartNodes(); updateAIData(); } WorldWithRank::update(dt); WorldWithRank::updateTrack(dt); if (getPhase() == World::GOAL_PHASE) { if (m_goal_timer == 0.0f) { // Stop all karts for (unsigned int i = 0; i < m_karts.size(); i++) m_karts[i]->setVelocity(btVector3(0, 0, 0)); } m_goal_timer += dt; if (m_goal_timer > 3.0f) { setPhase(WorldStatus::RACE_PHASE); m_goal_timer = 0.0f; if (!isRaceOver()) { // Reset all karts for (unsigned int i = 0; i < m_karts.size(); i++) moveKartAfterRescue(m_karts[i]); if (UserConfigParams::m_arena_ai_stats) getKart(8)->flyUp(); } } } if (UserConfigParams::m_arena_ai_stats) m_frame_count++; } // update
/** Update the world and the track. * \param ticks Physics time steps - should be 1. */ void SoccerWorld::update(int ticks) { updateBallPosition(ticks); if (Track::getCurrentTrack()->hasNavMesh()) { updateSectorForKarts(); updateAIData(); } WorldWithRank::update(ticks); WorldWithRank::updateTrack(ticks); if (getPhase() == World::GOAL_PHASE) { if (m_goal_timer == 0) { // Stop all karts for (unsigned int i = 0; i < m_karts.size(); i++) m_karts[i]->setVelocity(btVector3(0, 0, 0)); } m_goal_timer += ticks; if (m_goal_timer > stk_config->time2Ticks(3.0f)) { setPhase(WorldStatus::RACE_PHASE); m_goal_timer = 0; if (!isRaceOver()) { // Reset all karts for (unsigned int i = 0; i < m_karts.size(); i++) moveKartAfterRescue(m_karts[i]); if (UserConfigParams::m_arena_ai_stats) getKart(8)->flyUp(); } } } if (UserConfigParams::m_arena_ai_stats) m_frame_count++; } // update