From 88227a3647e88508d817af236b81aeb4d5e522d0 Mon Sep 17 00:00:00 2001 From: Jeremy Mickelson Date: Sat, 13 Aug 2016 12:13:41 -0600 Subject: [PATCH 1/2] Allow multiple objects with exactly the same distance to be returned by `radarall` --- src/object/object_manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp index 9c1126c7..0e6e28a3 100644 --- a/src/object/object_manager.cpp +++ b/src/object/object_manager.cpp @@ -282,7 +282,8 @@ std::vector CObjectManager::RadarAll(CObject* pThis, Math::Vector this RadarFilter filter_flying = static_cast(filter & (FILTER_ONLYLANDING | FILTER_ONLYFLYING)); RadarFilter filter_enemy = static_cast(filter & (FILTER_FRIENDLY | FILTER_ENEMY | FILTER_NEUTRAL)); - std::map best; + std::multimap best; + for ( auto it = m_objects.begin() ; it != m_objects.end() ; ++it ) { pObj = it->second.get(); @@ -357,7 +358,7 @@ std::vector CObjectManager::RadarAll(CObject* pThis, Math::Vector this a = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW ! if ( Math::TestAngle(a, iAngle-focus/2.0f, iAngle+focus/2.0f) || focus >= Math::PI*2.0f ) { - best[d] = pObj; + best.insert(std::make_pair(d, pObj)); } } From 859cec774a85e45141be3d32fcf788709cd8d13d Mon Sep 17 00:00:00 2001 From: Jeremy Mickelson Date: Sat, 13 Aug 2016 12:18:54 -0600 Subject: [PATCH 2/2] Added comment explaining container choice --- src/object/object_manager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp index 0e6e28a3..a903a3a4 100644 --- a/src/object/object_manager.cpp +++ b/src/object/object_manager.cpp @@ -282,6 +282,8 @@ std::vector CObjectManager::RadarAll(CObject* pThis, Math::Vector this RadarFilter filter_flying = static_cast(filter & (FILTER_ONLYLANDING | FILTER_ONLYFLYING)); RadarFilter filter_enemy = static_cast(filter & (FILTER_FRIENDLY | FILTER_ENEMY | FILTER_NEUTRAL)); + // Use a multimap to allow for multiple objects at exactly the same distance + // from the origin to be returned. std::multimap best; for ( auto it = m_objects.begin() ; it != m_objects.end() ; ++it )