mirror of
https://github.com/huderlem/porymap.git
synced 2026-09-10 09:55:41 -05:00
Add palette and flip selectors to tileset editor
This commit is contained in:
@@ -39,3 +39,14 @@ QList<QList<QRgb>> Tileset::getBlockPalettes(Tileset *primaryTileset, Tileset *s
|
||||
}
|
||||
return palettes;
|
||||
}
|
||||
|
||||
QList<QRgb> Tileset::getPalette(int paletteId, Tileset *primaryTileset, Tileset *secondaryTileset) {
|
||||
QList<QRgb> 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;
|
||||
}
|
||||
|
||||
@@ -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<QRgb> palette) {
|
||||
QImage getColoredTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, int paletteId) {
|
||||
QList<QRgb> 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));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "tileseteditor.h"
|
||||
#include "ui_tileseteditor.h"
|
||||
#include "imageproviders.h"
|
||||
#include <QDebug>
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -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<QRgb> palette = this->getCurPaletteTable();
|
||||
QList<QRgb> 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<QRgb> TilesetEditorTileSelector::getCurPaletteTable() {
|
||||
QList<QRgb> 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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user