1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Backport NavigationServer with RVO2 to 3.x

Change the entire navigation system.
Remove editor prefix from nav mesh generator class. It is now used for baking
at runtime as well.
Navigation supports obstacle avoidance now with the RVO2 library.
Nav system will also automatically link all nav meshes together to form one
overall complete nav map.
This commit is contained in:
Jake Young
2021-12-16 00:15:23 -05:00
committed by Rémi Verschelde
parent 571e05d3d3
commit 09bc9eb101
109 changed files with 7910 additions and 2002 deletions

View File

@@ -66,6 +66,8 @@
#include "servers/arvr_server.h"
#include "servers/audio_server.h"
#include "servers/camera_server.h"
#include "servers/navigation_2d_server.h"
#include "servers/navigation_server.h"
#include "servers/physics_2d_server.h"
#include "servers/physics_server.h"
#include "servers/register_server_types.h"
@@ -110,6 +112,8 @@ static ARVRServer *arvr_server = nullptr;
static PhysicsServer *physics_server = nullptr;
static Physics2DServer *physics_2d_server = nullptr;
static VisualServerCallbacks *visual_server_callbacks = nullptr;
static NavigationServer *navigation_server = nullptr;
static Navigation2DServer *navigation_2d_server = nullptr;
// We error out if setup2() doesn't turn this true
static bool _start_success = false;
@@ -214,6 +218,19 @@ void finalize_physics() {
memdelete(physics_2d_server);
}
void initialize_navigation_server() {
ERR_FAIL_COND(navigation_server != nullptr);
navigation_server = NavigationServerManager::new_default_server();
navigation_2d_server = memnew(Navigation2DServer);
}
void finalize_navigation_server() {
memdelete(navigation_server);
navigation_server = nullptr;
memdelete(navigation_2d_server);
navigation_2d_server = nullptr;
}
//#define DEBUG_INIT
#ifdef DEBUG_INIT
#define MAIN_PRINT(m_txt) print_line(m_txt)
@@ -1523,6 +1540,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
camera_server = CameraServer::create();
initialize_physics();
initialize_navigation_server();
register_server_singletons();
register_driver_types();
@@ -2230,6 +2248,7 @@ bool Main::iteration() {
break;
}
NavigationServer::get_singleton_mut()->process(frame_slice * time_scale);
message_queue->flush();
PhysicsServer::get_singleton()->step(frame_slice * time_scale);
@@ -2429,6 +2448,7 @@ void Main::cleanup(bool p_force) {
OS::get_singleton()->finalize();
finalize_physics();
finalize_navigation_server();
if (packed_data) {
memdelete(packed_data);