From 64fc443e2416a9c27b15010e8e0bfeb424c5436c Mon Sep 17 00:00:00 2001 From: kobewi Date: Fri, 7 Oct 2022 22:27:31 +0200 Subject: [PATCH] Warn if isometric TileMap is not Y-sorted --- doc/classes/TileSet.xml | 1 + scene/2d/tile_map.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml index 7ced16d1afa..1cf3d4bf214 100644 --- a/doc/classes/TileSet.xml +++ b/doc/classes/TileSet.xml @@ -617,6 +617,7 @@ Diamond tile shape (for isometric look). + [b]Note:[/b] Isometric [TileSet] works best if [TileMap] and all its layers have Y-sort enabled. Rectangular tile shape with one row/column out of two offset by half a tile. diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index e865806a7f5..c3b6de985bb 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -755,6 +755,7 @@ void TileMap::set_y_sort_enabled(bool p_enable) { _clear_internals(); _recreate_internals(); emit_signal(SNAME("changed")); + update_configuration_warnings(); } Vector2i TileMap::_coords_to_quadrant_coords(int p_layer, const Vector2i &p_coords) const { @@ -3943,6 +3944,22 @@ PackedStringArray TileMap::get_configuration_warnings() const { } } + if (tile_set.is_valid() && tile_set->get_tile_shape() == TileSet::TILE_SHAPE_ISOMETRIC) { + bool warn = !is_y_sort_enabled(); + if (!warn) { + for (int layer = 0; layer < (int)layers.size(); layer++) { + if (!layers[layer].y_sort_enabled) { + warn = true; + break; + } + } + } + + if (warn) { + warnings.push_back(RTR("Isometric TileSet will likely not look as intended without Y-sort enabled for the TileMap and all of its layers.")); + } + } + return warnings; } @@ -4038,6 +4055,7 @@ void TileMap::_tile_set_changed() { emit_signal(SNAME("changed")); _tile_set_changed_deferred_update_needed = true; call_deferred(SNAME("_tile_set_changed_deferred_update")); + update_configuration_warnings(); } void TileMap::_tile_set_changed_deferred_update() {