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)) {