summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
authorsmix8 <52464204+smix8@users.noreply.github.com>2024-04-18 22:47:28 +0200
committersmix8 <52464204+smix8@users.noreply.github.com>2024-04-19 12:10:57 +0200
commit58593d1bb706410bbdbd265ed8b698eb95b7b61f (patch)
treebe1f02b1551b58723201b308228546febb81bb77 /servers
parent9bc49a66bae5e9e506f12df3b3e141c8da13f983 (diff)
downloadredot-engine-58593d1bb706410bbdbd265ed8b698eb95b7b61f.tar.gz
Add navigation source geometry parser callbacks
Adds navigation source geometry parser callbacks so that externals can hook their own geometry into the navigation mesh baking process.
Diffstat (limited to 'servers')
-rw-r--r--servers/navigation_server_2d.cpp3
-rw-r--r--servers/navigation_server_2d.h3
-rw-r--r--servers/navigation_server_2d_dummy.h3
-rw-r--r--servers/navigation_server_3d.cpp3
-rw-r--r--servers/navigation_server_3d.h3
-rw-r--r--servers/navigation_server_3d_dummy.h3
6 files changed, 18 insertions, 0 deletions
diff --git a/servers/navigation_server_2d.cpp b/servers/navigation_server_2d.cpp
index 625ae8abde..c5ce82265b 100644
--- a/servers/navigation_server_2d.cpp
+++ b/servers/navigation_server_2d.cpp
@@ -165,6 +165,9 @@ void NavigationServer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("bake_from_source_geometry_data_async", "navigation_polygon", "source_geometry_data", "callback"), &NavigationServer2D::bake_from_source_geometry_data_async, DEFVAL(Callable()));
ClassDB::bind_method(D_METHOD("is_baking_navigation_polygon", "navigation_polygon"), &NavigationServer2D::is_baking_navigation_polygon);
+ ClassDB::bind_method(D_METHOD("source_geometry_parser_create"), &NavigationServer2D::source_geometry_parser_create);
+ ClassDB::bind_method(D_METHOD("source_geometry_parser_set_callback", "parser", "callback"), &NavigationServer2D::source_geometry_parser_set_callback);
+
ClassDB::bind_method(D_METHOD("simplify_path", "path", "epsilon"), &NavigationServer2D::simplify_path);
ClassDB::bind_method(D_METHOD("free_rid", "rid"), &NavigationServer2D::free);
diff --git a/servers/navigation_server_2d.h b/servers/navigation_server_2d.h
index 39d4c19064..a8d9678a6f 100644
--- a/servers/navigation_server_2d.h
+++ b/servers/navigation_server_2d.h
@@ -306,6 +306,9 @@ public:
virtual void bake_from_source_geometry_data_async(const Ref<NavigationPolygon> &p_navigation_mesh, const Ref<NavigationMeshSourceGeometryData2D> &p_source_geometry_data, const Callable &p_callback = Callable()) = 0;
virtual bool is_baking_navigation_polygon(Ref<NavigationPolygon> p_navigation_polygon) const = 0;
+ virtual RID source_geometry_parser_create() = 0;
+ virtual void source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) = 0;
+
virtual Vector<Vector2> simplify_path(const Vector<Vector2> &p_path, real_t p_epsilon) = 0;
NavigationServer2D();
diff --git a/servers/navigation_server_2d_dummy.h b/servers/navigation_server_2d_dummy.h
index 5d4cfbf91b..465cfcca98 100644
--- a/servers/navigation_server_2d_dummy.h
+++ b/servers/navigation_server_2d_dummy.h
@@ -170,6 +170,9 @@ public:
void bake_from_source_geometry_data_async(const Ref<NavigationPolygon> &p_navigation_mesh, const Ref<NavigationMeshSourceGeometryData2D> &p_source_geometry_data, const Callable &p_callback = Callable()) override {}
bool is_baking_navigation_polygon(Ref<NavigationPolygon> p_navigation_polygon) const override { return false; }
+ RID source_geometry_parser_create() override { return RID(); }
+ void source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) override {}
+
Vector<Vector2> simplify_path(const Vector<Vector2> &p_path, real_t p_epsilon) override { return Vector<Vector2>(); }
void set_debug_enabled(bool p_enabled) {}
diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_server_3d.cpp
index fda26aacc1..b21c6b60f0 100644
--- a/servers/navigation_server_3d.cpp
+++ b/servers/navigation_server_3d.cpp
@@ -188,6 +188,9 @@ void NavigationServer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_baking_navigation_mesh", "navigation_mesh"), &NavigationServer3D::is_baking_navigation_mesh);
#endif // _3D_DISABLED
+ ClassDB::bind_method(D_METHOD("source_geometry_parser_create"), &NavigationServer3D::source_geometry_parser_create);
+ ClassDB::bind_method(D_METHOD("source_geometry_parser_set_callback", "parser", "callback"), &NavigationServer3D::source_geometry_parser_set_callback);
+
ClassDB::bind_method(D_METHOD("simplify_path", "path", "epsilon"), &NavigationServer3D::simplify_path);
ClassDB::bind_method(D_METHOD("free_rid", "rid"), &NavigationServer3D::free);
diff --git a/servers/navigation_server_3d.h b/servers/navigation_server_3d.h
index 5a93c662b2..17c0771732 100644
--- a/servers/navigation_server_3d.h
+++ b/servers/navigation_server_3d.h
@@ -351,6 +351,9 @@ public:
virtual bool is_baking_navigation_mesh(Ref<NavigationMesh> p_navigation_mesh) const = 0;
#endif // _3D_DISABLED
+ virtual RID source_geometry_parser_create() = 0;
+ virtual void source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) = 0;
+
virtual Vector<Vector3> simplify_path(const Vector<Vector3> &p_path, real_t p_epsilon) = 0;
NavigationServer3D();
diff --git a/servers/navigation_server_3d_dummy.h b/servers/navigation_server_3d_dummy.h
index 7079aa66be..5c9e97d226 100644
--- a/servers/navigation_server_3d_dummy.h
+++ b/servers/navigation_server_3d_dummy.h
@@ -182,6 +182,9 @@ public:
bool is_baking_navigation_mesh(Ref<NavigationMesh> p_navigation_mesh) const override { return false; }
#endif // _3D_DISABLED
+ RID source_geometry_parser_create() override { return RID(); }
+ void source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) override {}
+
Vector<Vector3> simplify_path(const Vector<Vector3> &p_path, real_t p_epsilon) override { return Vector<Vector3>(); }
void free(RID p_object) override {}