Sfoglia il codice sorgente

Warn if isometric TileMap is not Y-sorted

kobewi 3 anni fa
parent
commit
64fc443e24
2 ha cambiato i file con 19 aggiunte e 0 eliminazioni
  1. 1 0
      doc/classes/TileSet.xml
  2. 18 0
      scene/2d/tile_map.cpp

+ 1 - 0
doc/classes/TileSet.xml

@@ -617,6 +617,7 @@
 		</constant>
 		<constant name="TILE_SHAPE_ISOMETRIC" value="1" enum="TileShape">
 			Diamond tile shape (for isometric look).
+			[b]Note:[/b] Isometric [TileSet] works best if [TileMap] and all its layers have Y-sort enabled.
 		</constant>
 		<constant name="TILE_SHAPE_HALF_OFFSET_SQUARE" value="2" enum="TileShape">
 			Rectangular tile shape with one row/column out of two offset by half a tile.

+ 18 - 0
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() {