summaryrefslogtreecommitdiff
path: root/src/serverenvironment.cpp
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2020-04-16 08:25:48 +0200
committerGitHub <noreply@github.com>2020-04-16 08:25:48 +0200
commite8ac5a31cf12afcfddf8e3ed31e8038930edb06f (patch)
tree5bdc776c5bbe190e32e42899b455e6d16179e3b5 /src/serverenvironment.cpp
parent62ae7adab2bebde04864c12543caefbffab24963 (diff)
downloadminetest-e8ac5a31cf12afcfddf8e3ed31e8038930edb06f.tar.gz
minetest-e8ac5a31cf12afcfddf8e3ed31e8038930edb06f.tar.bz2
minetest-e8ac5a31cf12afcfddf8e3ed31e8038930edb06f.zip
Optimize get_objects_inside_radius calls (#9671)
* Optimize getObjectsInsideRadius calls our previous implementation calls the ActiveObjectMgr to return ids and then lookup those ids in the same map and test each object Instead now we call the global map to return the pointers directly and we ask filtering when building the list using lamba. This drop double looping over ranges of active objects (and then filtered one) and drop x lookups on the map regarding the first call results
Diffstat (limited to 'src/serverenvironment.cpp')
-rw-r--r--src/serverenvironment.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index 739384673..27f0c1e3d 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -1608,14 +1608,12 @@ void ServerEnvironment::getSelectedActiveObjects(
const core::line3d<f32> &shootline_on_map,
std::vector<PointedThing> &objects)
{
- std::vector<u16> objectIds;
- getObjectsInsideRadius(objectIds, shootline_on_map.start,
- shootline_on_map.getLength() + 10.0f);
+ std::vector<ServerActiveObject *> objs;
+ getObjectsInsideRadius(objs, shootline_on_map.start,
+ shootline_on_map.getLength() + 10.0f, nullptr);
const v3f line_vector = shootline_on_map.getVector();
- for (u16 objectId : objectIds) {
- ServerActiveObject* obj = getActiveObject(objectId);
-
+ for (auto obj : objs) {
aabb3f selection_box;
if (!obj->getSelectionBox(&selection_box))
continue;
@@ -1630,7 +1628,7 @@ void ServerEnvironment::getSelectedActiveObjects(
if (boxLineCollision(offsetted_box, shootline_on_map.start, line_vector,
&current_intersection, &current_normal)) {
objects.emplace_back(
- (s16) objectId, current_intersection, current_normal,
+ (s16) obj->getId(), current_intersection, current_normal,
(current_intersection - shootline_on_map.start).getLengthSQ());
}
}