diff --git a/src/world/Manager/NaviMgr.cpp b/src/world/Manager/NaviMgr.cpp index 5462af7f..c3490920 100644 --- a/src/world/Manager/NaviMgr.cpp +++ b/src/world/Manager/NaviMgr.cpp @@ -10,10 +10,11 @@ Sapphire::World::Manager::NaviMgr::NaviMgr( FrameworkPtr pFw ) : bool Sapphire::World::Manager::NaviMgr::setupTerritory( const std::string& bgPath ) { - std::string bg; - auto findPos = bgPath.find_last_of( "/" ); - if( findPos != std::string::npos ) - bg = bgPath.substr( findPos + 1 ); + std::string bg = getBgName( bgPath ); + + // check if a provider exists already + if( m_naviProviderTerritoryMap.find( bg ) != m_naviProviderTerritoryMap.end() ) + return true; auto provider = Navi::make_NaviProvider( bg, m_pFw ); @@ -28,13 +29,19 @@ bool Sapphire::World::Manager::NaviMgr::setupTerritory( const std::string& bgPat Sapphire::World::Navi::NaviProviderPtr Sapphire::World::Manager::NaviMgr::getNaviProvider( const std::string& bgPath ) { - std::string bg; - auto findPos = bgPath.find_last_of( "/" ); - if( findPos != std::string::npos ) - bg = bgPath.substr( findPos + 1 ); + std::string bg = getBgName( bgPath ); if( m_naviProviderTerritoryMap.find( bg ) != m_naviProviderTerritoryMap.end() ) return m_naviProviderTerritoryMap[ bg ]; return nullptr; } + +std::string Sapphire::World::Manager::NaviMgr::getBgName( const std::string& bgPath ) +{ + auto findPos = bgPath.find_last_of( "/" ); + if( findPos != std::string::npos ) + return bgPath.substr( findPos + 1 ); + + return ""; +} diff --git a/src/world/Manager/NaviMgr.h b/src/world/Manager/NaviMgr.h index 5a55ab0c..6aeac713 100644 --- a/src/world/Manager/NaviMgr.h +++ b/src/world/Manager/NaviMgr.h @@ -22,6 +22,8 @@ namespace Sapphire::World::Manager private: FrameworkPtr m_pFw; + std::string getBgName( const std::string& bgPath ); + std::unordered_map< std::string, Navi::NaviProviderPtr > m_naviProviderTerritoryMap; };