diff --git a/.sconsign.dblite b/.sconsign.dblite index dcd2883..0597586 100644 Binary files a/.sconsign.dblite and b/.sconsign.dblite differ diff --git a/demo/assets/scripts/environment/destructable/destructable_wall.gd b/demo/assets/scripts/environment/destructable/destructable_wall.gd index 8a22a0d..d2ddb2a 100644 --- a/demo/assets/scripts/environment/destructable/destructable_wall.gd +++ b/demo/assets/scripts/environment/destructable/destructable_wall.gd @@ -102,7 +102,6 @@ func _draw(): var meshGenerator = GeoPolyMesh.new(vector_indexes, vectors, extrusion_direction, depth) var commited_mesh = meshGenerator.commit_mesh(meshInstance3d.get_active_material(0)) meshGenerator.free() - meshInstance3d.mesh = commited_mesh meshInstance3d.position += depth_position_offset @@ -111,10 +110,11 @@ func _draw(): func _re_draw(): var vector_indexes = GeoPolyTriangulization.triangulate(outer_polygon, inner_polygons.get_holes()) - var vectors = [] + var vectors = [] vectors.append_array(outer_polygon) vectors.append_array(inner_polygons.get_hole_verticies()) + WorkerThreadPool.add_task(_generate_mesh.bind(vector_indexes, vectors)) func _deffered_draw(mesh: Mesh, task_id: int): diff --git a/demo/bin/libgtriangulation.linux.template_debug.x86_64.so b/demo/bin/libgtriangulation.linux.template_debug.x86_64.so index 5816240..24135a0 100755 Binary files a/demo/bin/libgtriangulation.linux.template_debug.x86_64.so and b/demo/bin/libgtriangulation.linux.template_debug.x86_64.so differ diff --git a/src/rectangletree.cpp b/src/rectangletree.cpp index e257f25..9fc9277 100644 --- a/src/rectangletree.cpp +++ b/src/rectangletree.cpp @@ -2,7 +2,7 @@ #include "godot_cpp/core/class_db.hpp" #include "godot_cpp/variant/packed_int32_array.hpp" #include "godot_cpp/variant/packed_vector2_array.hpp" -#include "godot_cpp/variant/typed_array.hpp" +#include "godot_cpp/variant/vector2.hpp" RectangleTree::RectangleTree() {} @@ -14,6 +14,8 @@ void RectangleTree::_bind_methods() { &RectangleTree::remove); ClassDB::bind_method(godot::D_METHOD("query", "point"), &RectangleTree::query); + ClassDB::bind_method(godot::D_METHOD("nearest", "point", "number"), + &RectangleTree::nearest); } void RectangleTree::add(const Vector2 &min_bound, const Vector2 &max_bound, @@ -41,3 +43,18 @@ PackedInt32Array RectangleTree::query(const Vector2 &point) { return return_value; } + +PackedInt32Array RectangleTree::nearest(const Vector2 &point, + const int &number) { + Rect rect = Rect(point.x, point.y, point.x, point.y); + + PackedInt32Array return_value; + auto callbackLambda = [&return_value, &number](int index, float) { + return_value.push_back(index); + return return_value.size() < number; + }; + + tree.NNSearch(rect.min, rect.max, callbackLambda); + + return return_value; +} diff --git a/src/rectangletree.hpp b/src/rectangletree.hpp index b76a3a2..13fd85a 100644 --- a/src/rectangletree.hpp +++ b/src/rectangletree.hpp @@ -50,4 +50,5 @@ public: const int &polgon_index); void remove(const int &polygon_index); PackedInt32Array query(const Vector2 &point); + PackedInt32Array nearest(const Vector2 &point, const int &number); }; diff --git a/src/rectangletree.os b/src/rectangletree.os index 84dc24a..04fa3e5 100644 Binary files a/src/rectangletree.os and b/src/rectangletree.os differ