/** Localize each kart on the graph using its center xyz. */ void WorldWithRank::updateSectorForKarts() { if (isRaceOver()) return; const unsigned int n = getNumKarts(); assert(n == m_kart_track_sector.size()); for (unsigned int i = 0; i < n; i++) { SpareTireAI* sta = dynamic_cast<SpareTireAI*>(m_karts[i]->getController()); if (!m_karts[i]->isEliminated() || (sta && sta->isMoving())) getTrackSector(i)->update(m_karts[i]->getXYZ()); } } // updateSectorForKarts
/** Updates the physics, all karts, the track, and projectile manager. * \param dt Time step size. */ void World::update(float dt) { #ifdef DEBUG assert(m_magic_number == 0xB01D6543); #endif PROFILER_PUSH_CPU_MARKER("World::update()", 0x00, 0x7F, 0x00); #if MEASURE_FPS static float time = 0.0f; time += dt; if (time > 5.0f) { time -= 5.0f; printf("%i\n",irr_driver->getVideoDriver()->getFPS()); } #endif PROFILER_PUSH_CPU_MARKER("World::update (sub-updates)", 0x20, 0x7F, 0x00); WorldStatus::update(dt); RewindManager::get()->saveStates(); PROFILER_POP_CPU_MARKER(); PROFILER_PUSH_CPU_MARKER("World::update (Kart::upate)", 0x40, 0x7F, 0x00); // Update all the karts. This in turn will also update the controller, // which causes all AI steering commands set. So in the following // physics update the new steering is taken into account. const int kart_amount = (int)m_karts.size(); for (int i = 0 ; i < kart_amount; ++i) { SpareTireAI* sta = dynamic_cast<SpareTireAI*>(m_karts[i]->getController()); // Update all karts that are not eliminated if(!m_karts[i]->isEliminated() || (sta && sta->isMoving())) m_karts[i]->update(dt); } PROFILER_POP_CPU_MARKER(); PROFILER_PUSH_CPU_MARKER("World::update (camera)", 0x60, 0x7F, 0x00); for(unsigned int i=0; i<Camera::getNumCameras(); i++) { Camera::getCamera(i)->update(dt); } PROFILER_POP_CPU_MARKER(); if(race_manager->isRecordingRace()) ReplayRecorder::get()->update(dt); Scripting::ScriptEngine *script_engine = Scripting::ScriptEngine::getInstance(); if (script_engine) script_engine->update(dt); if (!history->dontDoPhysics()) { Physics::getInstance()->update(dt); } PROFILER_PUSH_CPU_MARKER("World::update (weather)", 0x80, 0x7F, 0x00); if (UserConfigParams::m_graphical_effects && Weather::getInstance()) { Weather::getInstance()->update(dt); } PROFILER_POP_CPU_MARKER(); PROFILER_PUSH_CPU_MARKER("World::update (projectiles)", 0xa0, 0x7F, 0x00); projectile_manager->update(dt); PROFILER_POP_CPU_MARKER(); PROFILER_POP_CPU_MARKER(); #ifdef DEBUG assert(m_magic_number == 0xB01D6543); #endif } // update