summaryrefslogtreecommitdiffstats
path: root/modules/navigation/nav_region.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-09-10 09:51:27 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-09-10 09:51:27 +0200
commit5303688c01c96d13b33664f60d71443e8f46d0ce (patch)
treefe6a71a99ee36f85f7a0d300d561780dbc11abcf /modules/navigation/nav_region.cpp
parentbc4c60c933c8ced636be14dc34f0dffa65f4fa95 (diff)
parent287fdb16d53c38f6766f773bebbea33c5270b8f3 (diff)
downloadredot-engine-5303688c01c96d13b33664f60d71443e8f46d0ce.tar.gz
Merge pull request #96092 from smix8/region_point_query
Add navigation region point and segment queries
Diffstat (limited to 'modules/navigation/nav_region.cpp')
-rw-r--r--modules/navigation/nav_region.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/modules/navigation/nav_region.cpp b/modules/navigation/nav_region.cpp
index 7a44adecbc..2c91b80af2 100644
--- a/modules/navigation/nav_region.cpp
+++ b/modules/navigation/nav_region.cpp
@@ -105,7 +105,22 @@ void NavRegion::set_navigation_mesh(Ref<NavigationMesh> p_navigation_mesh) {
polygons_dirty = true;
}
+Vector3 NavRegion::get_closest_point_to_segment(const Vector3 &p_from, const Vector3 &p_to, bool p_use_collision) const {
+ RWLockRead read_lock(region_rwlock);
+
+ return NavMeshQueries3D::polygons_get_closest_point_to_segment(
+ get_polygons(), p_from, p_to, p_use_collision);
+}
+
+gd::ClosestPointQueryResult NavRegion::get_closest_point_info(const Vector3 &p_point) const {
+ RWLockRead read_lock(region_rwlock);
+
+ return NavMeshQueries3D::polygons_get_closest_point_info(get_polygons(), p_point);
+}
+
Vector3 NavRegion::get_random_point(uint32_t p_navigation_layers, bool p_uniformly) const {
+ RWLockRead read_lock(region_rwlock);
+
if (!get_enabled()) {
return Vector3();
}
@@ -114,6 +129,8 @@ Vector3 NavRegion::get_random_point(uint32_t p_navigation_layers, bool p_uniform
}
bool NavRegion::sync() {
+ RWLockWrite write_lock(region_rwlock);
+
bool something_changed = polygons_dirty /* || something_dirty? */;
update_polygons();