Expose NavigationObstacle2D/3D get_rid() and add config warning

Exposes get_rid() function for scripting.
Adds configuration warning when obstacle is used with not intended static body parent.

(cherry picked from commit 001d89223f)
This commit is contained in:
smix8 2022-05-14 23:33:09 +02:00 committed by Rémi Verschelde
parent 847fab6272
commit b11708c50d
4 changed files with 28 additions and 1 deletions

View File

@ -15,6 +15,12 @@
Returns the [Navigation] node that the obstacle is using for its navigation system.
</description>
</method>
<method name="get_rid" qualifiers="const">
<return type="RID" />
<description>
Returns the [RID] of this obstacle on the [NavigationServer].
</description>
</method>
<method name="set_navigation">
<return type="void" />
<argument index="0" name="navigation" type="Node" />

View File

@ -15,6 +15,12 @@
Returns the [Navigation2D] node that the obstacle is using for its navigation system.
</description>
</method>
<method name="get_rid" qualifiers="const">
<return type="RID" />
<description>
Returns the [RID] of this obstacle on the [Navigation2DServer].
</description>
</method>
<method name="set_navigation">
<return type="void" />
<argument index="0" name="navigation" type="Node" />

View File

@ -36,8 +36,11 @@
#include "servers/navigation_2d_server.h"
void NavigationObstacle2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_rid"), &NavigationObstacle2D::get_rid);
ClassDB::bind_method(D_METHOD("set_navigation", "navigation"), &NavigationObstacle2D::set_navigation_node);
ClassDB::bind_method(D_METHOD("get_navigation"), &NavigationObstacle2D::get_navigation_node);
ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle2D::set_estimate_radius);
ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle2D::is_radius_estimated);
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle2D::set_radius);
@ -136,6 +139,11 @@ String NavigationObstacle2D::get_configuration_warning() const {
return TTR("The NavigationObstacle2D only serves to provide collision avoidance to a Node2D object.");
}
if (Object::cast_to<StaticBody2D>(get_parent())) {
return TTR("The NavigationObstacle2D is intended for constantly moving bodies like KinematicBody2D or RigidBody2D as it creates only an RVO avoidance radius and does not follow scene geometry exactly."
"\nNot constantly moving or complete static objects should be captured with a refreshed NavigationPolygon so agents can not only avoid them but also move along those objects outline at high detail");
}
return String();
}

View File

@ -36,6 +36,8 @@
#include "servers/navigation_server.h"
void NavigationObstacle::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_rid"), &NavigationObstacle::get_rid);
ClassDB::bind_method(D_METHOD("set_navigation", "navigation"), &NavigationObstacle::set_navigation_node);
ClassDB::bind_method(D_METHOD("get_navigation"), &NavigationObstacle::get_navigation_node);
ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle::is_radius_estimated);
@ -140,7 +142,12 @@ Node *NavigationObstacle::get_navigation_node() const {
String NavigationObstacle::get_configuration_warning() const {
if (!Object::cast_to<Spatial>(get_parent())) {
return TTR("The NavigationObstacle only serves to provide collision avoidance to a spatial object.");
return TTR("The NavigationObstacle only serves to provide collision avoidance to a Spatial inheriting parent object.");
}
if (Object::cast_to<StaticBody>(get_parent())) {
return TTR("The NavigationObstacle is intended for constantly moving bodies like KinematicBody3D or RigidBody3D as it creates only an RVO avoidance radius and does not follow scene geometry exactly."
"\nNot constantly moving or complete static objects should be (re)baked to a NavigationMesh so agents can not only avoid them but also move along those objects outline at high detail");
}
return String();