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.
This commit is contained in:
parent
0841f72c38
commit
001d89223f
|
@ -8,6 +8,14 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
|
<methods>
|
||||||
|
<method name="get_rid" qualifiers="const">
|
||||||
|
<return type="RID" />
|
||||||
|
<description>
|
||||||
|
Returns the [RID] of this obstacle on the [NavigationServer2D].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
|
<member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
|
||||||
Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
|
Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
|
||||||
|
|
|
@ -8,6 +8,14 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
|
<methods>
|
||||||
|
<method name="get_rid" qualifiers="const">
|
||||||
|
<return type="RID" />
|
||||||
|
<description>
|
||||||
|
Returns the [RID] of this obstacle on the [NavigationServer3D].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
|
<member name="estimate_radius" type="bool" setter="set_estimate_radius" getter="is_radius_estimated" default="true">
|
||||||
Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
|
Enables radius estimation algorithm which uses parent's collision shapes to determine the obstacle radius.
|
||||||
|
|
|
@ -31,10 +31,13 @@
|
||||||
#include "navigation_obstacle_2d.h"
|
#include "navigation_obstacle_2d.h"
|
||||||
|
|
||||||
#include "scene/2d/collision_shape_2d.h"
|
#include "scene/2d/collision_shape_2d.h"
|
||||||
|
#include "scene/2d/physics_body_2d.h"
|
||||||
#include "scene/resources/world_2d.h"
|
#include "scene/resources/world_2d.h"
|
||||||
#include "servers/navigation_server_2d.h"
|
#include "servers/navigation_server_2d.h"
|
||||||
|
|
||||||
void NavigationObstacle2D::_bind_methods() {
|
void NavigationObstacle2D::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("get_rid"), &NavigationObstacle2D::get_rid);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle2D::set_estimate_radius);
|
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("is_radius_estimated"), &NavigationObstacle2D::is_radius_estimated);
|
||||||
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle2D::set_radius);
|
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle2D::set_radius);
|
||||||
|
@ -103,6 +106,11 @@ TypedArray<String> NavigationObstacle2D::get_configuration_warnings() const {
|
||||||
warnings.push_back(RTR("The NavigationObstacle2D only serves to provide collision avoidance to a Node2D object."));
|
warnings.push_back(RTR("The NavigationObstacle2D only serves to provide collision avoidance to a Node2D object."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Object::cast_to<StaticBody2D>(get_parent())) {
|
||||||
|
warnings.push_back(RTR("The NavigationObstacle2D is intended for constantly moving bodies like CharacterBody2D or RigidDynamicBody2D 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 warnings;
|
return warnings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
#include "servers/navigation_server_3d.h"
|
#include "servers/navigation_server_3d.h"
|
||||||
|
|
||||||
void NavigationObstacle3D::_bind_methods() {
|
void NavigationObstacle3D::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("get_rid"), &NavigationObstacle3D::get_rid);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle3D::set_estimate_radius);
|
ClassDB::bind_method(D_METHOD("set_estimate_radius", "estimate_radius"), &NavigationObstacle3D::set_estimate_radius);
|
||||||
ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle3D::is_radius_estimated);
|
ClassDB::bind_method(D_METHOD("is_radius_estimated"), &NavigationObstacle3D::is_radius_estimated);
|
||||||
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle3D::set_radius);
|
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &NavigationObstacle3D::set_radius);
|
||||||
|
@ -107,7 +109,12 @@ TypedArray<String> NavigationObstacle3D::get_configuration_warnings() const {
|
||||||
TypedArray<String> warnings = Node::get_configuration_warnings();
|
TypedArray<String> warnings = Node::get_configuration_warnings();
|
||||||
|
|
||||||
if (!Object::cast_to<Node3D>(get_parent())) {
|
if (!Object::cast_to<Node3D>(get_parent())) {
|
||||||
warnings.push_back(RTR("The NavigationObstacle3D only serves to provide collision avoidance to a spatial object."));
|
warnings.push_back(RTR("The NavigationObstacle3D only serves to provide collision avoidance to a Node3D inheriting parent object."));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object::cast_to<StaticBody3D>(get_parent())) {
|
||||||
|
warnings.push_back(RTR("The NavigationObstacle3D is intended for constantly moving bodies like CharacterBody3D or RigidDynamicBody3D 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 warnings;
|
return warnings;
|
||||||
|
|
Loading…
Reference in New Issue