feat: updated engine version to 4.4-rc1
This commit is contained in:
parent
ee00efde1f
commit
21ba8e33af
5459 changed files with 1128836 additions and 198305 deletions
|
|
@ -29,11 +29,17 @@
|
|||
/**************************************************************************/
|
||||
|
||||
#include "navigation_server_2d.h"
|
||||
#include "navigation_server_2d.compat.inc"
|
||||
|
||||
#include "servers/navigation_server_2d_dummy.h"
|
||||
#include "servers/navigation_server_3d.h"
|
||||
|
||||
NavigationServer2D *NavigationServer2D::singleton = nullptr;
|
||||
|
||||
RWLock NavigationServer2D::geometry_parser_rwlock;
|
||||
RID_Owner<NavMeshGeometryParser2D> NavigationServer2D::geometry_parser_owner;
|
||||
LocalVector<NavMeshGeometryParser2D *> NavigationServer2D::generator_parsers;
|
||||
|
||||
void NavigationServer2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_maps"), &NavigationServer2D::get_maps);
|
||||
|
||||
|
|
@ -59,10 +65,12 @@ void NavigationServer2D::_bind_methods() {
|
|||
|
||||
ClassDB::bind_method(D_METHOD("map_force_update", "map"), &NavigationServer2D::map_force_update);
|
||||
ClassDB::bind_method(D_METHOD("map_get_iteration_id", "map"), &NavigationServer2D::map_get_iteration_id);
|
||||
ClassDB::bind_method(D_METHOD("map_set_use_async_iterations", "map", "enabled"), &NavigationServer2D::map_set_use_async_iterations);
|
||||
ClassDB::bind_method(D_METHOD("map_get_use_async_iterations", "map"), &NavigationServer2D::map_get_use_async_iterations);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("map_get_random_point", "map", "navigation_layers", "uniformly"), &NavigationServer2D::map_get_random_point);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("query_path", "parameters", "result"), &NavigationServer2D::query_path);
|
||||
ClassDB::bind_method(D_METHOD("query_path", "parameters", "result", "callback"), &NavigationServer2D::query_path, DEFVAL(Callable()));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("region_create"), &NavigationServer2D::region_create);
|
||||
ClassDB::bind_method(D_METHOD("region_set_enabled", "region", "enabled"), &NavigationServer2D::region_set_enabled);
|
||||
|
|
@ -86,7 +94,9 @@ void NavigationServer2D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("region_get_connections_count", "region"), &NavigationServer2D::region_get_connections_count);
|
||||
ClassDB::bind_method(D_METHOD("region_get_connection_pathway_start", "region", "connection"), &NavigationServer2D::region_get_connection_pathway_start);
|
||||
ClassDB::bind_method(D_METHOD("region_get_connection_pathway_end", "region", "connection"), &NavigationServer2D::region_get_connection_pathway_end);
|
||||
ClassDB::bind_method(D_METHOD("region_get_closest_point", "region", "to_point"), &NavigationServer2D::region_get_closest_point);
|
||||
ClassDB::bind_method(D_METHOD("region_get_random_point", "region", "navigation_layers", "uniformly"), &NavigationServer2D::region_get_random_point);
|
||||
ClassDB::bind_method(D_METHOD("region_get_bounds", "region"), &NavigationServer2D::region_get_bounds);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("link_create"), &NavigationServer2D::link_create);
|
||||
ClassDB::bind_method(D_METHOD("link_set_map", "link", "map"), &NavigationServer2D::link_set_map);
|
||||
|
|
@ -203,6 +213,47 @@ void NavigationServer2D::_emit_navigation_debug_changed_signal() {
|
|||
|
||||
NavigationServer2D::~NavigationServer2D() {
|
||||
singleton = nullptr;
|
||||
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
for (NavMeshGeometryParser2D *parser : generator_parsers) {
|
||||
geometry_parser_owner.free(parser->self);
|
||||
}
|
||||
generator_parsers.clear();
|
||||
}
|
||||
|
||||
RID NavigationServer2D::source_geometry_parser_create() {
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
RID rid = geometry_parser_owner.make_rid();
|
||||
|
||||
NavMeshGeometryParser2D *parser = geometry_parser_owner.get_or_null(rid);
|
||||
parser->self = rid;
|
||||
|
||||
generator_parsers.push_back(parser);
|
||||
|
||||
return rid;
|
||||
}
|
||||
|
||||
void NavigationServer2D::free(RID p_object) {
|
||||
if (!geometry_parser_owner.owns(p_object)) {
|
||||
return;
|
||||
}
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
NavMeshGeometryParser2D *parser = geometry_parser_owner.get_or_null(p_object);
|
||||
ERR_FAIL_NULL(parser);
|
||||
|
||||
generator_parsers.erase(parser);
|
||||
geometry_parser_owner.free(parser->self);
|
||||
}
|
||||
|
||||
void NavigationServer2D::source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) {
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
NavMeshGeometryParser2D *parser = geometry_parser_owner.get_or_null(p_parser);
|
||||
ERR_FAIL_NULL(parser);
|
||||
|
||||
parser->callback = p_callback;
|
||||
}
|
||||
|
||||
void NavigationServer2D::_emit_map_changed(RID p_map) {
|
||||
|
|
@ -413,6 +464,8 @@ bool NavigationServer2D::get_debug_navigation_avoidance_enable_obstacles_static(
|
|||
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
static NavigationServer2D *navigation_server_2d = nullptr;
|
||||
|
||||
NavigationServer2DCallback NavigationServer2DManager::create_callback = nullptr;
|
||||
|
||||
void NavigationServer2DManager::set_default_server(NavigationServer2DCallback p_callback) {
|
||||
|
|
@ -426,3 +479,26 @@ NavigationServer2D *NavigationServer2DManager::new_default_server() {
|
|||
|
||||
return create_callback();
|
||||
}
|
||||
|
||||
void NavigationServer2DManager::initialize_server() {
|
||||
// NavigationServer3D must be initialized before NavigationServer2D.
|
||||
ERR_FAIL_NULL(NavigationServer3D::get_singleton());
|
||||
ERR_FAIL_COND(navigation_server_2d != nullptr);
|
||||
|
||||
// Init 2D Navigation Server
|
||||
navigation_server_2d = NavigationServer2DManager::new_default_server();
|
||||
if (!navigation_server_2d) {
|
||||
WARN_VERBOSE("Failed to initialize NavigationServer2D. Fall back to dummy server.");
|
||||
navigation_server_2d = memnew(NavigationServer2DDummy);
|
||||
}
|
||||
|
||||
ERR_FAIL_NULL_MSG(navigation_server_2d, "Failed to initialize NavigationServer2D.");
|
||||
navigation_server_2d->init();
|
||||
}
|
||||
|
||||
void NavigationServer2DManager::finalize_server() {
|
||||
ERR_FAIL_NULL(navigation_server_2d);
|
||||
navigation_server_2d->finish();
|
||||
memdelete(navigation_server_2d);
|
||||
navigation_server_2d = nullptr;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue