Merge pull request #72228 from DarkKilauea/nav-agent-callable
Use Callable for Navigation Agent callbacks
This commit is contained in:
commit
3a25148b9b
12 changed files with 44 additions and 126 deletions
|
|
@ -205,9 +205,9 @@ NavigationAgent2D::~NavigationAgent2D() {
|
|||
void NavigationAgent2D::set_avoidance_enabled(bool p_enabled) {
|
||||
avoidance_enabled = p_enabled;
|
||||
if (avoidance_enabled) {
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, get_instance_id(), "_avoidance_done");
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, callable_mp(this, &NavigationAgent2D::_avoidance_done));
|
||||
} else {
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, ObjectID(), "_avoidance_done");
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, Callable());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -217,7 +217,8 @@ bool NavigationAgent2D::get_avoidance_enabled() const {
|
|||
|
||||
void NavigationAgent2D::set_agent_parent(Node *p_agent_parent) {
|
||||
// remove agent from any avoidance map before changing parent or there will be leftovers on the RVO map
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, ObjectID(), "_avoidance_done");
|
||||
NavigationServer2D::get_singleton()->agent_set_callback(agent, Callable());
|
||||
|
||||
if (Object::cast_to<Node2D>(p_agent_parent) != nullptr) {
|
||||
// place agent on navigation map first or else the RVO agent callback creation fails silently later
|
||||
agent_parent = Object::cast_to<Node2D>(p_agent_parent);
|
||||
|
|
@ -226,6 +227,7 @@ void NavigationAgent2D::set_agent_parent(Node *p_agent_parent) {
|
|||
} else {
|
||||
NavigationServer2D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_2d()->get_navigation_map());
|
||||
}
|
||||
|
||||
// create new avoidance callback if enabled
|
||||
set_avoidance_enabled(avoidance_enabled);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -212,9 +212,9 @@ NavigationAgent3D::~NavigationAgent3D() {
|
|||
void NavigationAgent3D::set_avoidance_enabled(bool p_enabled) {
|
||||
avoidance_enabled = p_enabled;
|
||||
if (avoidance_enabled) {
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, get_instance_id(), "_avoidance_done");
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, callable_mp(this, &NavigationAgent3D::_avoidance_done));
|
||||
} else {
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, ObjectID(), "_avoidance_done");
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, Callable());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +224,8 @@ bool NavigationAgent3D::get_avoidance_enabled() const {
|
|||
|
||||
void NavigationAgent3D::set_agent_parent(Node *p_agent_parent) {
|
||||
// remove agent from any avoidance map before changing parent or there will be leftovers on the RVO map
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, ObjectID(), "_avoidance_done");
|
||||
NavigationServer3D::get_singleton()->agent_set_callback(agent, Callable());
|
||||
|
||||
if (Object::cast_to<Node3D>(p_agent_parent) != nullptr) {
|
||||
// place agent on navigation map first or else the RVO agent callback creation fails silently later
|
||||
agent_parent = Object::cast_to<Node3D>(p_agent_parent);
|
||||
|
|
@ -233,6 +234,7 @@ void NavigationAgent3D::set_agent_parent(Node *p_agent_parent) {
|
|||
} else {
|
||||
NavigationServer3D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_3d()->get_navigation_map());
|
||||
}
|
||||
|
||||
// create new avoidance callback if enabled
|
||||
set_avoidance_enabled(avoidance_enabled);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue