diff --git a/include/core/metatile.h b/include/core/metatile.h index 561a747e..5b9bb813 100644 --- a/include/core/metatile.h +++ b/include/core/metatile.h @@ -11,7 +11,9 @@ class Metatile { public: Metatile(); - Metatile(const Metatile &other); + Metatile(const Metatile &other) = default; + Metatile &operator=(const Metatile &other) = default; + public: QList tiles; uint16_t behavior; // 8 bits RSE, 9 bits FRLG @@ -20,8 +22,6 @@ public: uint8_t terrainType; // FRLG only QString label; - Metatile *copy(); - void copyInPlace(Metatile*); static int getBlockIndex(int); static QPoint coordFromPixmapCoord(const QPointF &pixelCoord); }; diff --git a/src/core/metatile.cpp b/src/core/metatile.cpp index 7301eb12..4c97418d 100644 --- a/src/core/metatile.cpp +++ b/src/core/metatile.cpp @@ -9,39 +9,6 @@ Metatile::Metatile() : terrainType(0) { } -Metatile::Metatile(const Metatile &other) : - tiles(other.tiles), - behavior(other.behavior), - layerType(other.layerType), - encounterType(other.encounterType), - terrainType(other.terrainType), - label(other.label) -{ } - -Metatile* Metatile::copy() { - Metatile *copy = new Metatile; - copy->behavior = this->behavior; - copy->layerType = this->layerType; - copy->encounterType = this->encounterType; - copy->terrainType = this->terrainType; - copy->label = this->label; - for (const Tile &tile : this->tiles) { - copy->tiles.append(tile); - } - return copy; -} - -void Metatile::copyInPlace(Metatile *other) { - this->behavior = other->behavior; - this->layerType = other->layerType; - this->encounterType = other->encounterType; - this->terrainType = other->terrainType; - this->label = other->label; - for (int i = 0; i < this->tiles.length(); i++) { - this->tiles[i] = other->tiles.at(i); - } -} - int Metatile::getBlockIndex(int index) { if (index < Project::getNumMetatilesPrimary()) { return index; diff --git a/src/core/tileset.cpp b/src/core/tileset.cpp index 0ec18e0b..03b0fb7c 100644 --- a/src/core/tileset.cpp +++ b/src/core/tileset.cpp @@ -36,7 +36,7 @@ Tileset* Tileset::copy() { } copy->metatiles = new QList; for (Metatile *metatile : *this->metatiles) { - copy->metatiles->append(metatile->copy()); + copy->metatiles->append(new Metatile(*metatile)); } copy->palettes = new QList>; for (QList palette : *this->palettes) { diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 9048f5a8..928087b5 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -262,7 +262,7 @@ void TilesetEditor::restoreWindowState() { } void TilesetEditor::initMetatileHistory() { - MetatileHistoryItem *commit = new MetatileHistoryItem(0, nullptr, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(0, nullptr, new Metatile(*metatile)); metatileHistory.push(commit); } @@ -375,7 +375,7 @@ void TilesetEditor::onMetatileLayerTileChanged(int x, int y) { QPoint(4, 1), QPoint(5, 1), }; - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); QPoint dimensions = this->tileSelector->getSelectionDimensions(); QList tiles = this->tileSelector->getSelectedTiles(); int selectedTileIndex = 0; @@ -401,7 +401,8 @@ void TilesetEditor::onMetatileLayerTileChanged(int x, int y) { this->metatileLayersItem->draw(); this->hasUnsavedChanges = true; - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); } @@ -465,9 +466,10 @@ void TilesetEditor::on_checkBox_yFlip_stateChanged(int checked) void TilesetEditor::on_comboBox_metatileBehaviors_activated(const QString &metatileBehavior) { if (this->metatile) { - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->behavior = static_cast(project->metatileBehaviorMap[metatileBehavior]); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } @@ -482,9 +484,10 @@ void TilesetEditor::saveMetatileLabel() { // Only commit if the field has changed. if (this->metatile && this->metatile->label != this->ui->lineEdit_metatileLabel->text()) { - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->label = this->ui->lineEdit_metatileLabel->text(); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } @@ -493,9 +496,10 @@ void TilesetEditor::saveMetatileLabel() void TilesetEditor::on_comboBox_layerType_activated(int layerType) { if (this->metatile) { - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->layerType = static_cast(layerType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } @@ -504,9 +508,10 @@ void TilesetEditor::on_comboBox_layerType_activated(int layerType) void TilesetEditor::on_comboBox_encounterType_activated(int encounterType) { if (this->metatile) { - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->encounterType = static_cast(encounterType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } @@ -515,9 +520,10 @@ void TilesetEditor::on_comboBox_encounterType_activated(int encounterType) void TilesetEditor::on_comboBox_terrainType_activated(int terrainType) { if (this->metatile) { - Metatile *prevMetatile = this->metatile->copy(); + Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->terrainType = static_cast(terrainType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), prevMetatile, this->metatile->copy()); + MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } @@ -811,7 +817,7 @@ void TilesetEditor::on_actionUndo_triggered() Metatile *temp = Tileset::getMetatile(commit->metatileId, this->primaryTileset, this->secondaryTileset); if (temp) { this->metatile = temp; - this->metatile->copyInPlace(prev); + *this->metatile = *prev; this->metatileSelector->select(commit->metatileId); this->metatileSelector->draw(); this->metatileLayersItem->draw(); @@ -828,8 +834,8 @@ void TilesetEditor::on_actionRedo_triggered() Metatile *temp = Tileset::getMetatile(commit->metatileId, this->primaryTileset, this->secondaryTileset); if (temp) { - this->metatile = Tileset::getMetatile(commit->metatileId, this->primaryTileset, this->secondaryTileset); - this->metatile->copyInPlace(next); + this->metatile = temp; + *this->metatile = *next; this->metatileSelector->select(commit->metatileId); this->metatileSelector->draw(); this->metatileLayersItem->draw(); @@ -905,8 +911,9 @@ void TilesetEditor::importTilesetMetatiles(Tileset *tileset, bool primary) break; } - Metatile *prevMetatile = tileset->metatiles->at(i)->copy(); - MetatileHistoryItem *commit = new MetatileHistoryItem(static_cast(metatileIdBase + i), prevMetatile, metatiles->at(i)->copy()); + Metatile *prevMetatile = new Metatile(*tileset->metatiles->at(i)); + MetatileHistoryItem *commit = new MetatileHistoryItem(static_cast(metatileIdBase + i), + prevMetatile, new Metatile(*metatiles->at(i))); metatileHistory.push(commit); }