diff options
| -rw-r--r-- | scene/2d/tile_map.cpp | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index b602839b99..c126dd8f6b 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -265,12 +265,18 @@ void TileMap::_update_dirty_quadrants() {  	SceneTree *st = SceneTree::get_singleton();  	Color debug_collision_color; +	Color debug_navigation_color;  	bool debug_shapes = st && st->is_debugging_collisions_hint();  	if (debug_shapes) {  		debug_collision_color = st->get_debug_collisions_color();  	} +	bool debug_navigation = st && st->is_debugging_navigation_hint(); +	if (debug_navigation) { +		debug_navigation_color = st->get_debug_navigation_color(); +	} +  	while (dirty_quadrant_list.first()) {  		Quadrant &q = *dirty_quadrant_list.first()->self(); @@ -497,6 +503,55 @@ void TileMap::_update_dirty_quadrants() {  					np.id = pid;  					np.xform = xform;  					q.navpoly_ids[E->key()] = np; + +					if (debug_navigation) { +						RID debug_navigation_item = vs->canvas_item_create(); +						vs->canvas_item_set_parent(debug_navigation_item, canvas_item); +						vs->canvas_item_set_z_as_relative_to_parent(debug_navigation_item, false); +						vs->canvas_item_set_z_index(debug_navigation_item, VS::CANVAS_ITEM_Z_MAX - 2); // Display one below collision debug + +						if (debug_navigation_item.is_valid()) { +							PoolVector<Vector2> navigation_polygon_vertices = navpoly->get_vertices(); +							int vsize = navigation_polygon_vertices.size(); + +							if (vsize > 2) { +								Vector<Color> colors; +								Vector<Vector2> vertices; +								vertices.resize(vsize); +								colors.resize(vsize); +								{ +									PoolVector<Vector2>::Read vr = navigation_polygon_vertices.read(); +									for (int i = 0; i < vsize; i++) { +										vertices[i] = vr[i]; +										colors[i] = debug_navigation_color; +									} +								} + +								Vector<int> indices; + +								for (int i = 0; i < navpoly->get_polygon_count(); i++) { +									Vector<int> polygon = navpoly->get_polygon(i); + +									for (int j = 2; j < polygon.size(); j++) { + +										int kofs[3] = { 0, j - 1, j }; +										for (int k = 0; k < 3; k++) { + +											int idx = polygon[kofs[k]]; +											ERR_FAIL_INDEX(idx, vsize); +											indices.push_back(idx); +										} +									} +								} +								Transform2D navxform; +								navxform.set_origin(offset.floor()); +								_fix_cell_transform(navxform, c, npoly_ofs + center_ofs, s); + +								vs->canvas_item_set_transform(debug_navigation_item, navxform); +								vs->canvas_item_add_triangle_array(debug_navigation_item, indices, vertices, colors); +							} +						} +					}  				}  			}  |