Don't early return but update the active query when having no position or when outOfWorld

Based on Patch By: fatherbushido
Patch By: temple
Differential Revision: https://code.wildfiregames.com/D1219
Differential Revision: https://code.wildfiregames.com/D704
fixes #4658

This was SVN commit r20845.
This commit is contained in:
bb
2018-01-12 21:01:17 +00:00
parent fbc5877d67
commit 5729b49610
@@ -1101,14 +1101,13 @@ public:
if (!query.enabled)
continue;
CmpPtr<ICmpPosition> cmpSourcePosition(query.source);
if (!cmpSourcePosition || !cmpSourcePosition->IsInWorld())
continue;
results.clear();
results.reserve(query.lastMatch.size());
CFixedVector2D pos = cmpSourcePosition->GetPosition2D();
PerformQuery(query, results, pos);
CmpPtr<ICmpPosition> cmpSourcePosition(query.source);
if (cmpSourcePosition && cmpSourcePosition->IsInWorld())
{
results.reserve(query.lastMatch.size());
PerformQuery(query, results, cmpSourcePosition->GetPosition2D());
}
// Compute the changes vs the last match
added.clear();
@@ -1122,7 +1121,8 @@ public:
if (added.empty() && removed.empty())
continue;
std::stable_sort(added.begin(), added.end(), EntityDistanceOrdering(m_EntityData, cmpSourcePosition->GetPosition2D()));
if (cmpSourcePosition && cmpSourcePosition->IsInWorld())
std::stable_sort(added.begin(), added.end(), EntityDistanceOrdering(m_EntityData, cmpSourcePosition->GetPosition2D()));
messages.resize(messages.size() + 1);
std::pair<entity_id_t, CMessageRangeUpdate>& back = messages.back();
@@ -1130,7 +1130,7 @@ public:
back.second.tag = it->first;
back.second.added.swap(added);
back.second.removed.swap(removed);
it->second.lastMatch.swap(results);
query.lastMatch.swap(results);
}
CComponentManager& cmpMgr = GetSimContext().GetComponentManager();