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,12 +29,19 @@
|
|||
/**************************************************************************/
|
||||
|
||||
#include "navigation_server_3d.h"
|
||||
#include "navigation_server_3d.compat.inc"
|
||||
|
||||
#include "core/config/project_settings.h"
|
||||
#include "scene/main/node.h"
|
||||
#include "servers/navigation/navigation_globals.h"
|
||||
#include "servers/navigation_server_3d_dummy.h"
|
||||
|
||||
NavigationServer3D *NavigationServer3D::singleton = nullptr;
|
||||
|
||||
RWLock NavigationServer3D::geometry_parser_rwlock;
|
||||
RID_Owner<NavMeshGeometryParser3D> NavigationServer3D::geometry_parser_owner;
|
||||
LocalVector<NavMeshGeometryParser3D *> NavigationServer3D::generator_parsers;
|
||||
|
||||
void NavigationServer3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_maps"), &NavigationServer3D::get_maps);
|
||||
|
||||
|
|
@ -68,10 +75,12 @@ void NavigationServer3D::_bind_methods() {
|
|||
|
||||
ClassDB::bind_method(D_METHOD("map_force_update", "map"), &NavigationServer3D::map_force_update);
|
||||
ClassDB::bind_method(D_METHOD("map_get_iteration_id", "map"), &NavigationServer3D::map_get_iteration_id);
|
||||
ClassDB::bind_method(D_METHOD("map_set_use_async_iterations", "map", "enabled"), &NavigationServer3D::map_set_use_async_iterations);
|
||||
ClassDB::bind_method(D_METHOD("map_get_use_async_iterations", "map"), &NavigationServer3D::map_get_use_async_iterations);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("map_get_random_point", "map", "navigation_layers", "uniformly"), &NavigationServer3D::map_get_random_point);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("query_path", "parameters", "result"), &NavigationServer3D::query_path);
|
||||
ClassDB::bind_method(D_METHOD("query_path", "parameters", "result", "callback"), &NavigationServer3D::query_path, DEFVAL(Callable()));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("region_create"), &NavigationServer3D::region_create);
|
||||
ClassDB::bind_method(D_METHOD("region_set_enabled", "region", "enabled"), &NavigationServer3D::region_set_enabled);
|
||||
|
|
@ -98,7 +107,11 @@ void NavigationServer3D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("region_get_connections_count", "region"), &NavigationServer3D::region_get_connections_count);
|
||||
ClassDB::bind_method(D_METHOD("region_get_connection_pathway_start", "region", "connection"), &NavigationServer3D::region_get_connection_pathway_start);
|
||||
ClassDB::bind_method(D_METHOD("region_get_connection_pathway_end", "region", "connection"), &NavigationServer3D::region_get_connection_pathway_end);
|
||||
ClassDB::bind_method(D_METHOD("region_get_closest_point_to_segment", "region", "start", "end", "use_collision"), &NavigationServer3D::region_get_closest_point_to_segment, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("region_get_closest_point", "region", "to_point"), &NavigationServer3D::region_get_closest_point);
|
||||
ClassDB::bind_method(D_METHOD("region_get_closest_point_normal", "region", "to_point"), &NavigationServer3D::region_get_closest_point_normal);
|
||||
ClassDB::bind_method(D_METHOD("region_get_random_point", "region", "navigation_layers", "uniformly"), &NavigationServer3D::region_get_random_point);
|
||||
ClassDB::bind_method(D_METHOD("region_get_bounds", "region"), &NavigationServer3D::region_get_bounds);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("link_create"), &NavigationServer3D::link_create);
|
||||
ClassDB::bind_method(D_METHOD("link_set_map", "link", "map"), &NavigationServer3D::link_set_map);
|
||||
|
|
@ -216,6 +229,7 @@ void NavigationServer3D::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(INFO_EDGE_MERGE_COUNT);
|
||||
BIND_ENUM_CONSTANT(INFO_EDGE_CONNECTION_COUNT);
|
||||
BIND_ENUM_CONSTANT(INFO_EDGE_FREE_COUNT);
|
||||
BIND_ENUM_CONSTANT(INFO_OBSTACLE_COUNT);
|
||||
}
|
||||
|
||||
NavigationServer3D *NavigationServer3D::get_singleton() {
|
||||
|
|
@ -226,22 +240,26 @@ NavigationServer3D::NavigationServer3D() {
|
|||
ERR_FAIL_COND(singleton != nullptr);
|
||||
singleton = this;
|
||||
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_cell_size", PROPERTY_HINT_RANGE, "0.001,100,0.001,or_greater"), 1.0);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_cell_size", PROPERTY_HINT_RANGE, NavigationDefaults2D::navmesh_cell_size_hint), NavigationDefaults2D::navmesh_cell_size);
|
||||
GLOBAL_DEF("navigation/2d/use_edge_connections", true);
|
||||
GLOBAL_DEF_BASIC("navigation/2d/default_edge_connection_margin", 1.0);
|
||||
GLOBAL_DEF_BASIC("navigation/2d/default_link_connection_radius", 4.0);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_edge_connection_margin", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults2D::edge_connection_margin);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/2d/default_link_connection_radius", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults2D::link_connection_radius);
|
||||
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/3d/default_cell_size", PROPERTY_HINT_RANGE, "0.001,100,0.001,or_greater"), 0.25);
|
||||
GLOBAL_DEF_BASIC("navigation/3d/default_cell_height", 0.25);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/3d/default_cell_size", PROPERTY_HINT_RANGE, NavigationDefaults3D::navmesh_cell_size_hint), NavigationDefaults3D::navmesh_cell_size);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/3d/default_cell_height", PROPERTY_HINT_RANGE, "0.001,100,0.001,or_greater"), NavigationDefaults3D::navmesh_cell_height);
|
||||
GLOBAL_DEF("navigation/3d/default_up", Vector3(0, 1, 0));
|
||||
GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "navigation/3d/merge_rasterizer_cell_scale", PROPERTY_HINT_RANGE, "0.001,1,0.001,or_greater"), 1.0);
|
||||
GLOBAL_DEF("navigation/3d/use_edge_connections", true);
|
||||
GLOBAL_DEF_BASIC("navigation/3d/default_edge_connection_margin", 0.25);
|
||||
GLOBAL_DEF_BASIC("navigation/3d/default_link_connection_radius", 1.0);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/3d/default_edge_connection_margin", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults3D::edge_connection_margin);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "navigation/3d/default_link_connection_radius", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), NavigationDefaults3D::link_connection_radius);
|
||||
|
||||
GLOBAL_DEF("navigation/world/map_use_async_iterations", true);
|
||||
|
||||
GLOBAL_DEF("navigation/avoidance/thread_model/avoidance_use_multiple_threads", true);
|
||||
GLOBAL_DEF("navigation/avoidance/thread_model/avoidance_use_high_priority_threads", true);
|
||||
|
||||
GLOBAL_DEF("navigation/pathfinding/max_threads", 4);
|
||||
|
||||
GLOBAL_DEF("navigation/baking/use_crash_prevention_checks", true);
|
||||
GLOBAL_DEF("navigation/baking/thread_model/baking_use_multiple_threads", true);
|
||||
GLOBAL_DEF("navigation/baking/thread_model/baking_use_high_priority_threads", true);
|
||||
|
|
@ -266,7 +284,7 @@ NavigationServer3D::NavigationServer3D() {
|
|||
|
||||
debug_navigation_enable_agent_paths = GLOBAL_DEF("debug/shapes/navigation/enable_agent_paths", true);
|
||||
debug_navigation_enable_agent_paths_xray = GLOBAL_DEF("debug/shapes/navigation/enable_agent_paths_xray", true);
|
||||
debug_navigation_agent_path_point_size = GLOBAL_DEF("debug/shapes/navigation/agent_path_point_size", 4.0);
|
||||
debug_navigation_agent_path_point_size = GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "debug/shapes/navigation/agent_path_point_size", PROPERTY_HINT_RANGE, "0.01,10,0.001,or_greater"), 4.0);
|
||||
|
||||
debug_navigation_avoidance_agents_radius_color = GLOBAL_DEF("debug/shapes/avoidance/agents_radius_color", Color(1.0, 1.0, 0.0, 0.25));
|
||||
debug_navigation_avoidance_obstacles_radius_color = GLOBAL_DEF("debug/shapes/avoidance/obstacles_radius_color", Color(1.0, 0.5, 0.0, 0.25));
|
||||
|
|
@ -290,6 +308,47 @@ NavigationServer3D::NavigationServer3D() {
|
|||
|
||||
NavigationServer3D::~NavigationServer3D() {
|
||||
singleton = nullptr;
|
||||
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
for (NavMeshGeometryParser3D *parser : generator_parsers) {
|
||||
geometry_parser_owner.free(parser->self);
|
||||
}
|
||||
generator_parsers.clear();
|
||||
}
|
||||
|
||||
RID NavigationServer3D::source_geometry_parser_create() {
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
RID rid = geometry_parser_owner.make_rid();
|
||||
|
||||
NavMeshGeometryParser3D *parser = geometry_parser_owner.get_or_null(rid);
|
||||
parser->self = rid;
|
||||
|
||||
generator_parsers.push_back(parser);
|
||||
|
||||
return rid;
|
||||
}
|
||||
|
||||
void NavigationServer3D::free(RID p_object) {
|
||||
if (!geometry_parser_owner.owns(p_object)) {
|
||||
return;
|
||||
}
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
NavMeshGeometryParser3D *parser = geometry_parser_owner.get_or_null(p_object);
|
||||
ERR_FAIL_NULL(parser);
|
||||
|
||||
generator_parsers.erase(parser);
|
||||
geometry_parser_owner.free(parser->self);
|
||||
}
|
||||
|
||||
void NavigationServer3D::source_geometry_parser_set_callback(RID p_parser, const Callable &p_callback) {
|
||||
RWLockWrite write_lock(geometry_parser_rwlock);
|
||||
|
||||
NavMeshGeometryParser3D *parser = geometry_parser_owner.get_or_null(p_parser);
|
||||
ERR_FAIL_NULL(parser);
|
||||
|
||||
parser->callback = p_callback;
|
||||
}
|
||||
|
||||
void NavigationServer3D::set_debug_enabled(bool p_enabled) {
|
||||
|
|
@ -930,20 +989,10 @@ bool NavigationServer3D::get_debug_avoidance_enabled() const {
|
|||
|
||||
#endif // DEBUG_ENABLED
|
||||
|
||||
void NavigationServer3D::query_path(const Ref<NavigationPathQueryParameters3D> &p_query_parameters, Ref<NavigationPathQueryResult3D> p_query_result) const {
|
||||
ERR_FAIL_COND(!p_query_parameters.is_valid());
|
||||
ERR_FAIL_COND(!p_query_result.is_valid());
|
||||
|
||||
const NavigationUtilities::PathQueryResult _query_result = _query_path(p_query_parameters->get_parameters());
|
||||
|
||||
p_query_result->set_path(_query_result.path);
|
||||
p_query_result->set_path_types(_query_result.path_types);
|
||||
p_query_result->set_path_rids(_query_result.path_rids);
|
||||
p_query_result->set_path_owner_ids(_query_result.path_owner_ids);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
|
||||
static NavigationServer3D *navigation_server_3d = nullptr;
|
||||
|
||||
NavigationServer3DCallback NavigationServer3DManager::create_callback = nullptr;
|
||||
|
||||
void NavigationServer3DManager::set_default_server(NavigationServer3DCallback p_callback) {
|
||||
|
|
@ -957,3 +1006,27 @@ NavigationServer3D *NavigationServer3DManager::new_default_server() {
|
|||
|
||||
return create_callback();
|
||||
}
|
||||
|
||||
void NavigationServer3DManager::initialize_server() {
|
||||
ERR_FAIL_COND(navigation_server_3d != nullptr);
|
||||
|
||||
// Init 3D Navigation Server
|
||||
navigation_server_3d = NavigationServer3DManager::new_default_server();
|
||||
|
||||
// Fall back to dummy if no default server has been registered.
|
||||
if (!navigation_server_3d) {
|
||||
WARN_VERBOSE("Failed to initialize NavigationServer3D. Fall back to dummy server.");
|
||||
navigation_server_3d = memnew(NavigationServer3DDummy);
|
||||
}
|
||||
|
||||
// Should be impossible, but make sure it's not null.
|
||||
ERR_FAIL_NULL_MSG(navigation_server_3d, "Failed to initialize NavigationServer3D.");
|
||||
navigation_server_3d->init();
|
||||
}
|
||||
|
||||
void NavigationServer3DManager::finalize_server() {
|
||||
ERR_FAIL_NULL(navigation_server_3d);
|
||||
navigation_server_3d->finish();
|
||||
memdelete(navigation_server_3d);
|
||||
navigation_server_3d = nullptr;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue