From c9c37fb4003ba82f3814765f5f5ecdf7735734c2 Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 28 Apr 2016 11:17:20 +1000 Subject: [PATCH] Do not compute the battle graph in case of a single kart in debug mode in an arena: in debug mode computing the distance matrix takes a LONG time (approximately 12 minutes on my machine). In release mode it's fast enough for now. --- src/modes/three_strikes_battle.cpp | 16 ++++++++++++---- src/states_screens/race_gui.cpp | 8 ++++++++ src/tracks/track.cpp | 18 +++++++++++++++++- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/modes/three_strikes_battle.cpp b/src/modes/three_strikes_battle.cpp index a94270eeb..a82b8d525 100644 --- a/src/modes/three_strikes_battle.cpp +++ b/src/modes/three_strikes_battle.cpp @@ -453,10 +453,18 @@ void ThreeStrikesBattle::updateKartNodes() { if (m_karts[i]->isEliminated()) continue; - m_kart_info[i].m_on_node = BattleGraph::get() - ->pointToNode(m_kart_info[i].m_on_node, - m_karts[i]->getXYZ(), false/*ignore_vertical*/); - } +#ifdef DEBUG + // Battle map not loaded in debug mode with a single kart + // since the graph creation is very expensive. + if(race_manager->getNumberOfKarts()>1) +#endif + { + m_kart_info[i].m_on_node = BattleGraph::get() + ->pointToNode(m_kart_info[i].m_on_node, + m_karts[i]->getXYZ(), + false/*ignore_vertical*/); + } + } // for i < n } //----------------------------------------------------------------------------- diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp index fe7c0a7e0..dc080bd7b 100644 --- a/src/states_screens/race_gui.cpp +++ b/src/states_screens/race_gui.cpp @@ -335,6 +335,14 @@ void RaceGUI::drawGlobalTimer() */ void RaceGUI::drawGlobalMiniMap() { +#ifdef DEBUG + // Battle map not loaded in debug mode with a single kart due to slowness + if(race_manager->getNumberOfKarts()==1 && + ( World::getWorld()->getTrack()->isArena() || + World::getWorld()->getTrack()->isSoccer() ) ) + return; +#endif + World *world = World::getWorld(); // draw a map when arena has a navigation mesh. if ((world->getTrack()->isArena() || world->getTrack()->isSoccer()) && diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 6713f8f86..99b40754e 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -671,6 +671,14 @@ void Track::startMusic() const */ void Track::loadBattleGraph() { +#ifdef DEBUG + // This must be a testing race with just one player. Do not load the + // battle graph since it can be VERY slow in debug mode - temple + // needs in the order of minutes. + if(race_manager->getNumberOfKarts()==1) + return; +#endif + BattleGraph::create(m_root+"navmesh.xml"); if(BattleGraph::get()->getNumNodes()==0) @@ -1870,8 +1878,16 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) delete root; - if ((m_is_arena || m_is_soccer) && !m_is_cutscene && m_has_navmesh && !arena_random_item_created) +#ifdef DEBUG + // Don't use battle graph in debug mode with a single kart (i.e. testing + // only). Loading can be VERY slow. + if(race_manager->getNumberOfKarts()>1) +#endif + { + if ((m_is_arena || m_is_soccer) && !m_is_cutscene && m_has_navmesh && + !arena_random_item_created ) BattleGraph::get()->findItemsOnGraphNodes(); + } if (UserConfigParams::m_track_debug && race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES &&