diff --git a/forms/tileseteditor.ui b/forms/tileseteditor.ui
index dbc84d15..0eeffd04 100644
--- a/forms/tileseteditor.ui
+++ b/forms/tileseteditor.ui
@@ -25,7 +25,7 @@
0
0
- 386
+ 363
539
@@ -90,77 +90,199 @@
-
-
-
- true
+
+
+ QFrame::StyledPanel
-
-
-
- 0
- 0
- 386
- 539
-
-
-
-
-
-
-
- Qt::Horizontal
+
+ QFrame::Raised
+
+
+
-
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
-
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
-
+
+
+ Y Flip
+
+
+
+ -
+
+
+ Palette
+
+
+
+ -
+
+
+ -
+
+
+ X Flip
+
+
+
+ -
+
+
+ Qt::LeftToRight
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
-
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+
+
+
+
+
+
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 363
+ 415
+
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
-
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
diff --git a/include/core/tileset.h b/include/core/tileset.h
index d18ab5e0..82113e4b 100644
--- a/include/core/tileset.h
+++ b/include/core/tileset.h
@@ -27,6 +27,7 @@ public:
static Tileset* getBlockTileset(int, Tileset*, Tileset*);
static Metatile* getMetatile(int, Tileset*, Tileset*);
static QList> getBlockPalettes(Tileset*, Tileset*);
+ static QList getPalette(int, Tileset*, Tileset*);
};
#endif // TILESET_H
diff --git a/include/ui/imageproviders.h b/include/ui/imageproviders.h
index c48f920f..96896e78 100644
--- a/include/ui/imageproviders.h
+++ b/include/ui/imageproviders.h
@@ -10,6 +10,6 @@ QImage getCollisionMetatileImage(Block);
QImage getCollisionMetatileImage(int, int);
QImage getMetatileImage(uint16_t, Tileset*, Tileset*);
QImage getTileImage(uint16_t, Tileset*, Tileset*);
-QImage getColoredTileImage(uint16_t, Tileset*, Tileset*, QList);
+QImage getColoredTileImage(uint16_t, Tileset*, Tileset*, int);
#endif // IMAGEPROVIDERS_H
diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h
index 43370ab0..989fb717 100644
--- a/include/ui/tileseteditor.h
+++ b/include/ui/tileseteditor.h
@@ -26,18 +26,30 @@ private slots:
void onHoveredTileCleared();
void onSelectedTileChanged(uint16_t);
+ void on_spinBox_paletteSelector_valueChanged(int arg1);
+
+ void on_checkBox_xFlip_stateChanged(int arg1);
+
+ void on_checkBox_yFlip_stateChanged(int arg1);
+
private:
void initMetatileSelector();
void initTileSelector();
+ void initSelectedTileItem();
+ void drawSelectedTile();
Ui::TilesetEditor *ui;
TilesetEditorMetatileSelector *metatileSelector;
TilesetEditorTileSelector *tileSelector;
Project *project;
- uint paletteNum;
+ int paletteId;
+ bool tileXFlip;
+ bool tileYFlip;
QString primaryTilesetLabel;
QString secondaryTilesetLabel;
- QGraphicsScene *metatilesScene;
- QGraphicsScene *tilesScene;
+ QGraphicsScene *metatilesScene = nullptr;
+ QGraphicsScene *tilesScene = nullptr;
+ QGraphicsScene *selectedTileScene = nullptr;
+ QGraphicsPixmapItem *selectedTilePixmapItem = nullptr;
};
#endif // TILESETEDITOR_H
diff --git a/include/ui/tileseteditortileselector.h b/include/ui/tileseteditortileselector.h
index d13aa19e..7369babb 100644
--- a/include/ui/tileseteditortileselector.h
+++ b/include/ui/tileseteditortileselector.h
@@ -11,13 +11,13 @@ public:
this->primaryTileset = primaryTileset;
this->secondaryTileset = secondaryTileset;
this->numTilesWide = 16;
- this->paletteNum = 0;
+ this->paletteId = 0;
setAcceptHoverEvents(true);
}
void draw();
void select(uint16_t metatileId);
void setTilesets(Tileset*, Tileset*);
- void setPaletteNum(int);
+ void setPaletteId(int);
uint16_t getSelectedTile();
protected:
@@ -32,7 +32,7 @@ private:
Tileset *secondaryTileset;
uint16_t selectedTile;
int numTilesWide;
- int paletteNum;
+ int paletteId;
void updateSelectedTile();
uint16_t getTileId(int x, int y);
QPoint getTileCoords(uint16_t);
diff --git a/src/core/tileset.cpp b/src/core/tileset.cpp
index 772e4d7b..36187c02 100644
--- a/src/core/tileset.cpp
+++ b/src/core/tileset.cpp
@@ -39,3 +39,14 @@ QList> Tileset::getBlockPalettes(Tileset *primaryTileset, Tileset *s
}
return palettes;
}
+
+QList Tileset::getPalette(int paletteId, Tileset *primaryTileset, Tileset *secondaryTileset) {
+ QList paletteTable;
+ Tileset *tileset = paletteId < Project::getNumPalettesPrimary()
+ ? primaryTileset
+ : secondaryTileset;
+ for (int i = 0; i < tileset->palettes->at(paletteId).length(); i++) {
+ paletteTable.append(tileset->palettes->at(paletteId).at(i));
+ }
+ return paletteTable;
+}
diff --git a/src/ui/imageproviders.cpp b/src/ui/imageproviders.cpp
index bda02cc0..2a1bc5ef 100644
--- a/src/ui/imageproviders.cpp
+++ b/src/ui/imageproviders.cpp
@@ -80,7 +80,8 @@ QImage getTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTi
return tileset->tiles->value(local_index, QImage());
}
-QImage getColoredTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, QList palette) {
+QImage getColoredTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, int paletteId) {
+ QList palette = Tileset::getPalette(paletteId, primaryTileset, secondaryTileset);
QImage tileImage = getTileImage(tile, primaryTileset, secondaryTileset);
for (int i = 0; i < 16; i++) {
tileImage.setColor(i, palette.at(i));
diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp
index 63c90ff1..f9774eed 100644
--- a/src/ui/tileseteditor.cpp
+++ b/src/ui/tileseteditor.cpp
@@ -1,5 +1,6 @@
#include "tileseteditor.h"
#include "ui_tileseteditor.h"
+#include "imageproviders.h"
#include
TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel, QWidget *parent) :
@@ -9,11 +10,17 @@ TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QStr
ui->setupUi(this);
this->project = project;
+ this->tileXFlip = ui->checkBox_xFlip->isChecked();
+ this->tileYFlip = ui->checkBox_yFlip->isChecked();
+ this->paletteId = ui->spinBox_paletteSelector->value();
this->primaryTilesetLabel = primaryTilesetLabel;
this->secondaryTilesetLabel = secondaryTilesetLabel;
- initMetatileSelector();
- initTileSelector();
+ ui->spinBox_paletteSelector->setMinimum(0);
+ ui->spinBox_paletteSelector->setMaximum(Project::getNumPalettesTotal() - 1);
+ this->initMetatileSelector();
+ this->initTileSelector();
+ this->initSelectedTileItem();
}
TilesetEditor::~TilesetEditor()
@@ -63,6 +70,25 @@ void TilesetEditor::initTileSelector()
this->ui->graphicsView_Tiles->setFixedSize(this->tileSelector->pixmap().width() + 2, this->tileSelector->pixmap().height() + 2);
}
+void TilesetEditor::initSelectedTileItem() {
+ this->selectedTileScene = new QGraphicsScene;
+ this->drawSelectedTile();
+ this->ui->graphicsView_selectedTile->setScene(this->selectedTileScene);
+}
+
+void TilesetEditor::drawSelectedTile() {
+ if (!this->selectedTileScene) {
+ return;
+ }
+
+ Tileset *primaryTileset = this->project->getTileset(this->primaryTilesetLabel);
+ Tileset *secondaryTileset = this->project->getTileset(this->secondaryTilesetLabel);
+ QImage tileImage = getColoredTileImage(this->tileSelector->getSelectedTile(), primaryTileset, secondaryTileset, this->paletteId)
+ .mirrored(this->tileXFlip, this->tileYFlip);
+ this->selectedTilePixmapItem = new QGraphicsPixmapItem(QPixmap::fromImage(tileImage).scaled(32, 32));
+ this->selectedTileScene->addItem(this->selectedTilePixmapItem);
+}
+
void TilesetEditor::onHoveredMetatileChanged(uint16_t metatileId) {
QString message = QString("Metatile: 0x%1")
.arg(QString("%1").arg(metatileId, 3, 16, QChar('0')).toUpper());
@@ -88,5 +114,24 @@ void TilesetEditor::onHoveredTileCleared() {
}
void TilesetEditor::onSelectedTileChanged(uint16_t) {
-
+ this->drawSelectedTile();
+}
+
+void TilesetEditor::on_spinBox_paletteSelector_valueChanged(int paletteId)
+{
+ this->paletteId = paletteId;
+ this->tileSelector->setPaletteId(paletteId);
+ this->drawSelectedTile();
+}
+
+void TilesetEditor::on_checkBox_xFlip_stateChanged(int checked)
+{
+ this->tileXFlip = checked;
+ this->drawSelectedTile();
+}
+
+void TilesetEditor::on_checkBox_yFlip_stateChanged(int checked)
+{
+ this->tileYFlip = checked;
+ this->drawSelectedTile();
}
diff --git a/src/ui/tileseteditortileselector.cpp b/src/ui/tileseteditortileselector.cpp
index 367af1b4..09bc2d60 100644
--- a/src/ui/tileseteditortileselector.cpp
+++ b/src/ui/tileseteditortileselector.cpp
@@ -13,19 +13,19 @@ void TilesetEditorTileSelector::draw() {
int primaryLength = this->primaryTileset->tiles->length();
int secondaryLength = this->secondaryTileset->tiles->length();
int height = totalTiles / this->numTilesWide;
- QList palette = this->getCurPaletteTable();
+ QList palette = Tileset::getPalette(this->paletteId, this->primaryTileset, this->secondaryTileset);
QImage image(this->numTilesWide * 16, height * 16, QImage::Format_RGBA8888);
QPainter painter(&image);
for (uint16_t tile = 0; tile < totalTiles; tile++) {
QImage tileImage;
if (tile < primaryLength) {
- tileImage = getColoredTileImage(tile, this->primaryTileset, this->secondaryTileset, palette).scaled(16, 16);
+ tileImage = getColoredTileImage(tile, this->primaryTileset, this->secondaryTileset, this->paletteId).scaled(16, 16);
} else if (tile < Project::getNumTilesPrimary()) {
tileImage = QImage(16, 16, QImage::Format_RGBA8888);
tileImage.fill(palette.at(0));
} else if (tile < Project::getNumTilesPrimary() + secondaryLength) {
- tileImage = getColoredTileImage(tile, this->primaryTileset, this->secondaryTileset, palette).scaled(16, 16);
+ tileImage = getColoredTileImage(tile, this->primaryTileset, this->secondaryTileset, this->paletteId).scaled(16, 16);
} else {
tileImage = QImage(16, 16, QImage::Format_RGBA8888);
QPainter painter(&tileImage);
@@ -43,15 +43,6 @@ void TilesetEditorTileSelector::draw() {
this->drawSelection();
}
-QList TilesetEditorTileSelector::getCurPaletteTable() {
- QList paletteTable;
- for (int i = 0; i < this->primaryTileset->palettes->at(this->paletteNum).length(); i++) {
- paletteTable.append(this->primaryTileset->palettes->at(this->paletteNum).at(i));
- }
-
- return paletteTable;
-}
-
void TilesetEditorTileSelector::select(uint16_t tile) {
QPoint coords = this->getTileCoords(tile);
SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0);
@@ -65,8 +56,8 @@ void TilesetEditorTileSelector::setTilesets(Tileset *primaryTileset, Tileset *se
this->draw();
}
-void TilesetEditorTileSelector::setPaletteNum(int paletteNum) {
- this->paletteNum = paletteNum;
+void TilesetEditorTileSelector::setPaletteId(int paletteId) {
+ this->paletteId = paletteId;
this->draw();
}