diff --git a/forms/tileseteditor.ui b/forms/tileseteditor.ui
index 54919db6..bdbbae89 100644
--- a/forms/tileseteditor.ui
+++ b/forms/tileseteditor.ui
@@ -307,7 +307,7 @@
0
0
386
- 361
+ 359
@@ -397,10 +397,17 @@
+
+
+
@@ -421,6 +428,11 @@
Import Secondary Tiles
+
+
+ Change Number of Metatiles
+
+
diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h
index cb360d03..53755153 100644
--- a/include/ui/tileseteditor.h
+++ b/include/ui/tileseteditor.h
@@ -46,6 +46,8 @@ private slots:
void on_actionImport_Secondary_Tiles_triggered();
+ void on_actionChange_Metatiles_Count_triggered();
+
private:
void closeEvent(QCloseEvent*);
void initMetatileSelector();
diff --git a/include/ui/tileseteditortileselector.h b/include/ui/tileseteditortileselector.h
index 62a14e2b..fe8d6bc2 100644
--- a/include/ui/tileseteditortileselector.h
+++ b/include/ui/tileseteditortileselector.h
@@ -12,6 +12,8 @@ public:
this->secondaryTileset = secondaryTileset;
this->numTilesWide = 16;
this->paletteId = 0;
+ this->xFlip = false;
+ this->yFlip = false;
setAcceptHoverEvents(true);
}
void draw();
diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp
index 540c5bf4..b1d388c7 100644
--- a/src/ui/tileseteditor.cpp
+++ b/src/ui/tileseteditor.cpp
@@ -4,6 +4,7 @@
#include
#include
#include
+#include
TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel, QWidget *parent) :
QMainWindow(parent),
@@ -349,3 +350,72 @@ void TilesetEditor::closeEvent(QCloseEvent *event)
event->ignore();
}
}
+
+void TilesetEditor::on_actionChange_Metatiles_Count_triggered()
+{
+ QDialog dialog(this, Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
+ dialog.setWindowTitle("Change Number of Metatiles");
+ dialog.setWindowModality(Qt::NonModal);
+
+ QFormLayout form(&dialog);
+
+ QSpinBox *primarySpinBox = new QSpinBox();
+ QSpinBox *secondarySpinBox = new QSpinBox();
+ primarySpinBox->setMinimum(1);
+ secondarySpinBox->setMinimum(1);
+ primarySpinBox->setMaximum(Project::getNumMetatilesPrimary());
+ secondarySpinBox->setMaximum(Project::getNumMetatilesTotal() - Project::getNumMetatilesPrimary());
+ primarySpinBox->setValue(this->primaryTileset->metatiles->length());
+ secondarySpinBox->setValue(this->secondaryTileset->metatiles->length());
+ form.addRow(new QLabel("Primary Tileset"), primarySpinBox);
+ form.addRow(new QLabel("Secondary Tileset"), secondarySpinBox);
+
+ QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);
+ connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
+ connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
+ form.addRow(&buttonBox);
+
+ if (dialog.exec() == QDialog::Accepted) {
+ int numPrimaryMetatiles = primarySpinBox->value();
+ int numSecondaryMetatiles = secondarySpinBox->value();
+ while (this->primaryTileset->metatiles->length() > numPrimaryMetatiles) {
+ Metatile *metatile = this->primaryTileset->metatiles->takeLast();
+ delete metatile;
+ }
+ while (this->primaryTileset->metatiles->length() < numPrimaryMetatiles) {
+ Tile tile;
+ tile.palette = 0;
+ tile.tile = 0;
+ tile.xflip = 0;
+ tile.yflip = 0;
+ Metatile *metatile = new Metatile;
+ metatile->behavior = 0;
+ metatile->layerType = 0;
+ for (int i = 0; i < 8; i++) {
+ metatile->tiles->append(tile);
+ }
+ this->primaryTileset->metatiles->append(metatile);
+ }
+ while (this->secondaryTileset->metatiles->length() > numSecondaryMetatiles) {
+ Metatile *metatile = this->secondaryTileset->metatiles->takeLast();
+ delete metatile;
+ }
+ while (this->secondaryTileset->metatiles->length() < numSecondaryMetatiles) {
+ Tile tile;
+ tile.palette = 0;
+ tile.tile = 0;
+ tile.xflip = 0;
+ tile.yflip = 0;
+ Metatile *metatile = new Metatile;
+ metatile->behavior = 0;
+ metatile->layerType = 0;
+ for (int i = 0; i < 8; i++) {
+ metatile->tiles->append(tile);
+ }
+ this->secondaryTileset->metatiles->append(metatile);
+ }
+
+ this->refresh();
+ this->hasUnsavedChanges = true;
+ }
+}