From b537375b15ddae4fca6b91ee0ab60805c95acbc1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 7 Aug 2025 23:46:34 -0400 Subject: [PATCH] Fix regressions to tile usage count --- include/core/tileset.h | 2 +- src/ui/tileseteditor.cpp | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/core/tileset.h b/include/core/tileset.h index c804a0f9..dcf55ec1 100644 --- a/include/core/tileset.h +++ b/include/core/tileset.h @@ -94,7 +94,7 @@ public: uint16_t firstTileId() const; uint16_t lastTileId() const; - bool containsTileId(uint16_t tileId) const { return tileId > firstTileId() && tileId <= lastTileId(); } + bool containsTileId(uint16_t tileId) const { return tileId >= firstTileId() && tileId <= lastTileId(); } int numTiles() const { return m_tiles.length(); } int maxTiles() const; diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 50189112..980f74c8 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -1234,17 +1234,26 @@ void TilesetEditor::countMetatileUsage() { } void TilesetEditor::countTileUsage() { - // check primary tiles this->tileSelector->usedTiles.resize(Project::getNumTilesTotal()); this->tileSelector->usedTiles.fill(0); auto countTilesetTileUsage = [this](Tileset *searchTileset) { // Count usage of our search tileset's tiles (in itself, and in any tilesets it gets paired with). QSet tilesetNames = this->project->getPairedTilesetLabels(searchTileset); - tilesetNames.insert(searchTileset->name); + QSet tilesets; + + // For the currently-loaded tilesets, make sure we use the Tileset Editor's versions + // (which may contain unsaved changes) and not the versions from the project. + tilesetNames.remove(this->primaryTileset->name); + tilesetNames.remove(this->secondaryTileset->name); + tilesets.insert(this->primaryTileset); + tilesets.insert(this->secondaryTileset); + for (const auto &tilesetName : tilesetNames) { Tileset *tileset = this->project->getTileset(tilesetName); - if (!tileset) continue; + if (tileset) tilesets.insert(tileset); + } + for (const auto &tileset : tilesets) { for (const auto &metatile : tileset->metatiles()) { for (const auto &tile : metatile->tiles) { if (searchTileset->containsTileId(tile.tileId)) {