// Luanti // SPDX-License-Identifier: LGPL-2.1-or-later // Copyright (C) 2010-2018 nerzhul, Loic BLOT #pragma once #include #include #include "../activeobjectmgr.h" #include "serveractiveobject.h" #include "util/k_d_tree.h" namespace server { class ActiveObjectMgr final : public ::ActiveObjectMgr { public: ~ActiveObjectMgr() override; // If cb returns true, the obj will be deleted void clearIf(const std::function &cb); void step(float dtime, const std::function &f) override; bool registerObject(std::unique_ptr obj) override; void removeObject(u16 id) override; void invalidateActiveObjectObserverCaches(); void updateObjectPos(u16 id, v3f pos); void getObjectsInsideRadius(v3f pos, float radius, std::vector &result, std::function include_obj_cb); void getObjectsInArea(const aabb3f &box, std::vector &result, std::function include_obj_cb); void getAddedActiveObjectsAroundPos( v3f player_pos, const std::string &player_name, f32 radius, f32 player_radius, const std::set ¤t_objects, std::vector &added_objects); private: k_d_tree::DynamicKdTrees<3, f32, u16> m_spatial_index; }; } // namespace server