Merge pull request #17867 from beniwtv/tilemap-navigation-debug
Implement missing navigation polygon debugging in tilemap
This commit is contained in:
commit
d59c70d47e
1 changed files with 55 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue