diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-09-10 09:51:27 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-09-10 09:51:27 +0200 |
commit | 5303688c01c96d13b33664f60d71443e8f46d0ce (patch) | |
tree | fe6a71a99ee36f85f7a0d300d561780dbc11abcf /modules/navigation/nav_region.cpp | |
parent | bc4c60c933c8ced636be14dc34f0dffa65f4fa95 (diff) | |
parent | 287fdb16d53c38f6766f773bebbea33c5270b8f3 (diff) | |
download | redot-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.cpp | 17 |
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(); |