Remove Navigation2D/3D nodes, and move the navigation map to the world resource
This commit is contained in:
parent
469ac1e415
commit
a9dc53d152
39 changed files with 233 additions and 1012 deletions
|
|
@ -34,6 +34,7 @@
|
|||
#include "scene/2d/camera_2d.h"
|
||||
#include "scene/2d/visibility_notifier_2d.h"
|
||||
#include "scene/main/window.h"
|
||||
#include "servers/navigation_server_2d.h"
|
||||
#include "servers/physics_server_2d.h"
|
||||
#include "servers/rendering_server.h"
|
||||
|
||||
|
|
@ -315,14 +316,18 @@ void World2D::_update() {
|
|||
indexer->_update();
|
||||
}
|
||||
|
||||
RID World2D::get_canvas() {
|
||||
RID World2D::get_canvas() const {
|
||||
return canvas;
|
||||
}
|
||||
|
||||
RID World2D::get_space() {
|
||||
RID World2D::get_space() const {
|
||||
return space;
|
||||
}
|
||||
|
||||
RID World2D::get_navigation_map() const {
|
||||
return navigation_map;
|
||||
}
|
||||
|
||||
void World2D::get_viewport_list(List<Viewport *> *r_viewports) {
|
||||
for (Map<Viewport *, SpatialIndexer2D::ViewportData>::Element *E = indexer->viewports.front(); E; E = E->next()) {
|
||||
r_viewports->push_back(E->key());
|
||||
|
|
@ -332,11 +337,13 @@ void World2D::get_viewport_list(List<Viewport *> *r_viewports) {
|
|||
void World2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_canvas"), &World2D::get_canvas);
|
||||
ClassDB::bind_method(D_METHOD("get_space"), &World2D::get_space);
|
||||
ClassDB::bind_method(D_METHOD("get_navigation_map"), &World2D::get_navigation_map);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_direct_space_state"), &World2D::get_direct_space_state);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::RID, "canvas", PROPERTY_HINT_NONE, "", 0), "", "get_canvas");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::RID, "space", PROPERTY_HINT_NONE, "", 0), "", "get_space");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::RID, "navigation_map", PROPERTY_HINT_NONE, "", 0), "", "get_navigation_map");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "direct_space_state", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsDirectSpaceState2D", 0), "", "get_direct_space_state");
|
||||
}
|
||||
|
||||
|
|
@ -346,9 +353,9 @@ PhysicsDirectSpaceState2D *World2D::get_direct_space_state() {
|
|||
|
||||
World2D::World2D() {
|
||||
canvas = RenderingServer::get_singleton()->canvas_create();
|
||||
space = PhysicsServer2D::get_singleton()->space_create();
|
||||
|
||||
//set space2D to be more friendly with pixels than meters, by adjusting some constants
|
||||
// Create and configure space2D to be more friendly with pixels than meters
|
||||
space = PhysicsServer2D::get_singleton()->space_create();
|
||||
PhysicsServer2D::get_singleton()->space_set_active(space, true);
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/2d/default_gravity", 98));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/2d/default_gravity_vector", Vector2(0, 1)));
|
||||
|
|
@ -356,11 +363,19 @@ World2D::World2D() {
|
|||
ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/default_linear_damp", PropertyInfo(Variant::FLOAT, "physics/2d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/2d/default_angular_damp", 1.0));
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/default_angular_damp", PropertyInfo(Variant::FLOAT, "physics/2d/default_angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"));
|
||||
|
||||
// Create and configure the navigation_map to be more friendly with pixels than meters.
|
||||
navigation_map = NavigationServer2D::get_singleton()->map_create();
|
||||
NavigationServer2D::get_singleton()->map_set_active(navigation_map, true);
|
||||
NavigationServer2D::get_singleton()->map_set_cell_size(navigation_map, GLOBAL_DEF("navigation/2d/default_cell_size", 10));
|
||||
NavigationServer2D::get_singleton()->map_set_edge_connection_margin(navigation_map, GLOBAL_DEF("navigation/2d/default_edge_connection_margin", 100));
|
||||
|
||||
indexer = memnew(SpatialIndexer2D);
|
||||
}
|
||||
|
||||
World2D::~World2D() {
|
||||
RenderingServer::get_singleton()->free(canvas);
|
||||
PhysicsServer2D::get_singleton()->free(space);
|
||||
NavigationServer2D::get_singleton()->free(navigation_map);
|
||||
memdelete(indexer);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue