Add scripting api for metatile layer draw order

This commit is contained in:
Marcus Huderle 2020-07-01 20:19:08 -05:00
parent 08bc85dde0
commit dac4a0e8f7
16 changed files with 85 additions and 31 deletions

View file

@ -57,6 +57,7 @@ public:
History<HistoryItem*> metatileHistory; History<HistoryItem*> metatileHistory;
QMap<QString, QList<Event*>> events; QMap<QString, QList<Event*>> events;
QList<MapConnection*> connections; QList<MapConnection*> connections;
QList<int> metatileLayerOrder;
void setName(QString mapName); void setName(QString mapName);
static QString mapConstantFromName(QString mapName); static QString mapConstantFromName(QString mapName);
static QString objectEventsLabelFromName(QString mapName); static QString objectEventsLabelFromName(QString mapName);

View file

@ -104,6 +104,8 @@ public:
Q_INVOKABLE void setTimeout(QJSValue callback, int milliseconds); Q_INVOKABLE void setTimeout(QJSValue callback, int milliseconds);
void invokeCallback(QJSValue callback); void invokeCallback(QJSValue callback);
Q_INVOKABLE void log(QString message); Q_INVOKABLE void log(QString message);
Q_INVOKABLE QList<int> getMetatileLayerOrder();
Q_INVOKABLE void setMetatileLayerOrder(QList<int> order);
public slots: public slots:

View file

@ -8,7 +8,8 @@
QImage getCollisionMetatileImage(Block); QImage getCollisionMetatileImage(Block);
QImage getCollisionMetatileImage(int, int); QImage getCollisionMetatileImage(int, int);
QImage getMetatileImage(uint16_t, Tileset*, Tileset*, bool useTruePalettes = false); QImage getMetatileImage(uint16_t, Tileset*, Tileset*, QList<int>, bool useTruePalettes = false);
QImage getMetatileImage(uint16_t tile, Tileset*, Tileset*, bool useTruePalettes = false);
QImage getTileImage(uint16_t, Tileset*, Tileset*); QImage getTileImage(uint16_t, Tileset*, Tileset*);
QImage getPalettedTileImage(uint16_t, Tileset*, Tileset*, int, bool useTruePalettes = false); QImage getPalettedTileImage(uint16_t, Tileset*, Tileset*, int, bool useTruePalettes = false);
QImage getGreyscaleTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset); QImage getGreyscaleTileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset);

View file

@ -3,17 +3,19 @@
#include <QPair> #include <QPair>
#include "selectablepixmapitem.h" #include "selectablepixmapitem.h"
#include "map.h"
#include "tileset.h" #include "tileset.h"
#include "maplayout.h" #include "maplayout.h"
class MetatileSelector: public SelectablePixmapItem { class MetatileSelector: public SelectablePixmapItem {
Q_OBJECT Q_OBJECT
public: public:
MetatileSelector(int numMetatilesWide, Tileset *primaryTileset, Tileset *secondaryTileset): SelectablePixmapItem(16, 16) { MetatileSelector(int numMetatilesWide, Map *map): SelectablePixmapItem(16, 16) {
this->externalSelection = false; this->externalSelection = false;
this->numMetatilesWide = numMetatilesWide; this->numMetatilesWide = numMetatilesWide;
this->primaryTileset = primaryTileset; this->map = map;
this->secondaryTileset = secondaryTileset; this->primaryTileset = map->layout->tileset_primary;
this->secondaryTileset = map->layout->tileset_secondary;
this->selectedMetatiles = new QList<uint16_t>(); this->selectedMetatiles = new QList<uint16_t>();
this->selectedCollisions = new QList<QPair<uint16_t, uint16_t>>(); this->selectedCollisions = new QList<QPair<uint16_t, uint16_t>>();
this->externalSelectedMetatiles = new QList<uint16_t>(); this->externalSelectedMetatiles = new QList<uint16_t>();
@ -37,6 +39,7 @@ protected:
private: private:
bool externalSelection; bool externalSelection;
int numMetatilesWide; int numMetatilesWide;
Map *map;
Tileset *primaryTileset; Tileset *primaryTileset;
Tileset *secondaryTileset; Tileset *secondaryTileset;
QList<uint16_t> *selectedMetatiles; QList<uint16_t> *selectedMetatiles;

View file

@ -8,6 +8,7 @@
#include "tileseteditormetatileselector.h" #include "tileseteditormetatileselector.h"
#include "tileseteditortileselector.h" #include "tileseteditortileselector.h"
#include "metatilelayersitem.h" #include "metatilelayersitem.h"
#include "map.h"
namespace Ui { namespace Ui {
class TilesetEditor; class TilesetEditor;
@ -34,10 +35,10 @@ class TilesetEditor : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
explicit TilesetEditor(Project*, QString, QString, QWidget *parent = nullptr); explicit TilesetEditor(Project*, Map*, QWidget *parent = nullptr);
~TilesetEditor(); ~TilesetEditor();
void setMap(Map*);
void setTilesets(QString, QString); void setTilesets(QString, QString);
void init(Project*, QString, QString);
void selectMetatile(uint16_t metatileId); void selectMetatile(uint16_t metatileId);
private slots: private slots:
@ -91,8 +92,9 @@ private slots:
void on_actionImport_Secondary_Metatiles_triggered(); void on_actionImport_Secondary_Metatiles_triggered();
private: private:
void init(Project*, Map*);
void closeEvent(QCloseEvent*); void closeEvent(QCloseEvent*);
void initMetatileSelector(); void initMetatileSelector(Map*);
void initTileSelector(); void initTileSelector();
void initSelectedTileItem(); void initSelectedTileItem();
void initMetatileLayersItem(); void initMetatileLayersItem();

View file

@ -3,16 +3,19 @@
#include "selectablepixmapitem.h" #include "selectablepixmapitem.h"
#include "tileset.h" #include "tileset.h"
#include "map.h"
class TilesetEditorMetatileSelector: public SelectablePixmapItem { class TilesetEditorMetatileSelector: public SelectablePixmapItem {
Q_OBJECT Q_OBJECT
public: public:
TilesetEditorMetatileSelector(Tileset *primaryTileset, Tileset *secondaryTileset): SelectablePixmapItem(32, 32, 1, 1) { TilesetEditorMetatileSelector(Tileset *primaryTileset, Tileset *secondaryTileset, Map *map): SelectablePixmapItem(32, 32, 1, 1) {
this->primaryTileset = primaryTileset; this->primaryTileset = primaryTileset;
this->secondaryTileset = secondaryTileset; this->secondaryTileset = secondaryTileset;
this->numMetatilesWide = 8; this->numMetatilesWide = 8;
this->map = map;
setAcceptHoverEvents(true); setAcceptHoverEvents(true);
} }
Map *map = nullptr;
void draw(); void draw();
void select(uint16_t metatileId); void select(uint16_t metatileId);
void setTilesets(Tileset*, Tileset*); void setTilesets(Tileset*, Tileset*);

View file

@ -158,7 +158,7 @@ QPixmap Map::renderCollision(qreal opacity, bool ignoreCache) {
} }
changed_any = true; changed_any = true;
Block block = layout->blockdata->blocks->value(i); Block block = layout->blockdata->blocks->value(i);
QImage metatile_image = getMetatileImage(block.tile, layout->tileset_primary, layout->tileset_secondary); QImage metatile_image = getMetatileImage(block.tile, layout->tileset_primary, layout->tileset_secondary, metatileLayerOrder);
QImage collision_metatile_image = getCollisionMetatileImage(block); QImage collision_metatile_image = getCollisionMetatileImage(block);
int map_y = width_ ? i / width_ : 0; int map_y = width_ ? i / width_ : 0;
int map_x = width_ ? i % width_ : 0; int map_x = width_ ? i % width_ : 0;
@ -205,7 +205,8 @@ QPixmap Map::render(bool ignoreCache = false, MapLayout * fromLayout) {
QImage metatile_image = getMetatileImage( QImage metatile_image = getMetatileImage(
block.tile, block.tile,
fromLayout ? fromLayout->tileset_primary : layout->tileset_primary, fromLayout ? fromLayout->tileset_primary : layout->tileset_primary,
fromLayout ? fromLayout->tileset_secondary : layout->tileset_secondary fromLayout ? fromLayout->tileset_secondary : layout->tileset_secondary,
metatileLayerOrder
); );
int map_y = width_ ? i / width_ : 0; int map_y = width_ ? i / width_ : 0;
int map_x = width_ ? i % width_ : 0; int map_x = width_ ? i % width_ : 0;
@ -246,7 +247,7 @@ QPixmap Map::renderBorder(bool ignoreCache) {
changed_any = true; changed_any = true;
Block block = layout->border->blocks->value(i); Block block = layout->border->blocks->value(i);
uint16_t tile = block.tile; uint16_t tile = block.tile;
QImage metatile_image = getMetatileImage(tile, layout->tileset_primary, layout->tileset_secondary); QImage metatile_image = getMetatileImage(tile, layout->tileset_primary, layout->tileset_secondary, metatileLayerOrder);
int map_y = width_ ? i / width_ : 0; int map_y = width_ ? i / width_ : 0;
int map_x = width_ ? i % width_ : 0; int map_x = width_ ? i % width_ : 0;
painter.drawImage(QPoint(map_x * 16, map_y * 16), metatile_image); painter.drawImage(QPoint(map_x * 16, map_y * 16), metatile_image);

View file

@ -1212,7 +1212,7 @@ void Editor::displayMetatileSelector() {
scene_metatiles = new QGraphicsScene; scene_metatiles = new QGraphicsScene;
if (!metatile_selector_item) { if (!metatile_selector_item) {
metatile_selector_item = new MetatileSelector(8, map->layout->tileset_primary, map->layout->tileset_secondary); metatile_selector_item = new MetatileSelector(8, map);
connect(metatile_selector_item, SIGNAL(hoveredMetatileSelectionChanged(uint16_t)), connect(metatile_selector_item, SIGNAL(hoveredMetatileSelectionChanged(uint16_t)),
this, SLOT(onHoveredMetatileSelectionChanged(uint16_t))); this, SLOT(onHoveredMetatileSelectionChanged(uint16_t)));
connect(metatile_selector_item, SIGNAL(hoveredMetatileSelectionCleared()), connect(metatile_selector_item, SIGNAL(hoveredMetatileSelectionCleared()),

View file

@ -327,6 +327,7 @@ bool MainWindow::openProject(QString dir) {
this->closeSupplementaryWindows(); this->closeSupplementaryWindows();
this->setProjectSpecificUIVisibility(); this->setProjectSpecificUIVisibility();
Scripting::init(this);
bool already_open = isProjectOpen() && (editor->project->root == dir); bool already_open = isProjectOpen() && (editor->project->root == dir);
if (!already_open) { if (!already_open) {
editor->closeProject(); editor->closeProject();
@ -365,7 +366,6 @@ bool MainWindow::openProject(QString dir) {
for (auto action : this->registeredActions) { for (auto action : this->registeredActions) {
this->ui->menuTools->removeAction(action); this->ui->menuTools->removeAction(action);
} }
Scripting::init(this);
Scripting::cb_ProjectOpened(dir); Scripting::cb_ProjectOpened(dir);
} }
@ -470,9 +470,9 @@ bool MainWindow::setMap(QString map_name, bool scrollTreeView) {
setRecentMap(map_name); setRecentMap(map_name);
updateMapList(); updateMapList();
updateTilesetEditor();
Scripting::cb_MapOpened(map_name); Scripting::cb_MapOpened(map_name);
updateTilesetEditor();
return true; return true;
} }
@ -1140,6 +1140,7 @@ void MainWindow::on_actionNew_Tileset_triggered() {
void MainWindow::updateTilesetEditor() { void MainWindow::updateTilesetEditor() {
if (this->tilesetEditor) { if (this->tilesetEditor) {
this->tilesetEditor->setMap(this->editor->map);
this->tilesetEditor->setTilesets(editor->ui->comboBox_PrimaryTileset->currentText(), editor->ui->comboBox_SecondaryTileset->currentText()); this->tilesetEditor->setTilesets(editor->ui->comboBox_PrimaryTileset->currentText(), editor->ui->comboBox_SecondaryTileset->currentText());
} }
} }
@ -1693,7 +1694,7 @@ void MainWindow::updateSelectedObjects() {
combo->addItem(value); combo->addItem(value);
} }
connect(combo, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged), connect(combo, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, [this, item, frame](QString value){ this, [this, item](QString value){
item->event->setFrameFromMovement(editor->project->facingDirections.value(value)); item->event->setFrameFromMovement(editor->project->facingDirections.value(value));
item->updatePixmap(); item->updatePixmap();
}); });
@ -2439,7 +2440,8 @@ void MainWindow::on_checkBox_ToggleBorder_stateChanged(int selected)
void MainWindow::on_actionTileset_Editor_triggered() void MainWindow::on_actionTileset_Editor_triggered()
{ {
if (!this->tilesetEditor) { if (!this->tilesetEditor) {
this->tilesetEditor = new TilesetEditor(this->editor->project, this->editor->map->layout->tileset_primary_label, this->editor->map->layout->tileset_secondary_label, this); logInfo("new one");
this->tilesetEditor = new TilesetEditor(this->editor->project, this->editor->map, this);
connect(this->tilesetEditor, SIGNAL(tilesetsSaved(QString, QString)), this, SLOT(onTilesetsSaved(QString, QString))); connect(this->tilesetEditor, SIGNAL(tilesetsSaved(QString, QString)), this, SLOT(onTilesetsSaved(QString, QString)));
connect(this->tilesetEditor, &QObject::destroyed, [=](QObject *) { this->tilesetEditor = nullptr; }); connect(this->tilesetEditor, &QObject::destroyed, [=](QObject *) { this->tilesetEditor = nullptr; });
this->tilesetEditor->setAttribute(Qt::WA_DeleteOnClose); this->tilesetEditor->setAttribute(Qt::WA_DeleteOnClose);

View file

@ -507,3 +507,16 @@ void MainWindow::invokeCallback(QJSValue callback) {
void MainWindow::log(QString message) { void MainWindow::log(QString message) {
logInfo(message); logInfo(message);
} }
QList<int> MainWindow::getMetatileLayerOrder() {
if (!this->editor || !this->editor->map)
return QList<int>();
return this->editor->map->metatileLayerOrder;
}
void MainWindow::setMetatileLayerOrder(QList<int> order) {
if (!this->editor || !this->editor->map)
return;
this->editor->map->metatileLayerOrder = order;
this->refreshAfterPalettePreviewChange();
}

View file

@ -35,7 +35,7 @@ void BorderMetatilesPixmapItem::draw() {
int x = i * 16; int x = i * 16;
int y = j * 16; int y = j * 16;
int index = j * width + i; int index = j * width + i;
QImage metatile_image = getMetatileImage(blocks->value(index).tile, map->layout->tileset_primary, map->layout->tileset_secondary); QImage metatile_image = getMetatileImage(blocks->value(index).tile, map->layout->tileset_primary, map->layout->tileset_secondary, map->metatileLayerOrder);
QPoint metatile_origin = QPoint(x, y); QPoint metatile_origin = QPoint(x, y);
painter.drawImage(metatile_origin, metatile_image); painter.drawImage(metatile_origin, metatile_image);
} }

View file

@ -15,7 +15,11 @@ void CurrentSelectedMetatilesPixmapItem::draw() {
int x = i * 16; int x = i * 16;
int y = j * 16; int y = j * 16;
int index = j * selectionDimensions.x() + i; int index = j * selectionDimensions.x() + i;
QImage metatile_image = getMetatileImage(selectedMetatiles->at(index), map->layout->tileset_primary, map->layout->tileset_secondary); QImage metatile_image = getMetatileImage(
selectedMetatiles->at(index),
map->layout->tileset_primary,
map->layout->tileset_secondary,
map->metatileLayerOrder);
QPoint metatile_origin = QPoint(x, y); QPoint metatile_origin = QPoint(x, y);
painter.drawImage(metatile_origin, metatile_image); painter.drawImage(metatile_origin, metatile_image);
} }

View file

@ -14,7 +14,18 @@ QImage getCollisionMetatileImage(int collision, int elevation) {
return collisionImage.toImage(); return collisionImage.toImage();
} }
static QList<int> defaultLayerOrder = QList<int>({0, 1, 2});
QImage getMetatileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, bool useTruePalettes) { QImage getMetatileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, bool useTruePalettes) {
return getMetatileImage(
tile,
primaryTileset,
secondaryTileset,
defaultLayerOrder,
useTruePalettes);
}
QImage getMetatileImage(uint16_t tile, Tileset *primaryTileset, Tileset *secondaryTileset, QList<int> layerOrder, bool useTruePalettes) {
QImage metatile_image(16, 16, QImage::Format_RGBA8888); QImage metatile_image(16, 16, QImage::Format_RGBA8888);
Metatile* metatile = Tileset::getMetatile(tile, primaryTileset, secondaryTileset); Metatile* metatile = Tileset::getMetatile(tile, primaryTileset, secondaryTileset);
@ -36,14 +47,15 @@ QImage getMetatileImage(uint16_t tile, Tileset *primaryTileset, Tileset *seconda
for (int layer = 0; layer < numLayers; layer++) for (int layer = 0; layer < numLayers; layer++)
for (int y = 0; y < 2; y++) for (int y = 0; y < 2; y++)
for (int x = 0; x < 2; x++) { for (int x = 0; x < 2; x++) {
Tile tile_ = metatile->tiles->value((y * 2) + x + (layer * 4)); int l = layerOrder.size() >= numLayers ? layerOrder[layer] : layer;
Tile tile_ = metatile->tiles->value((y * 2) + x + (l * 4));
QImage tile_image = getTileImage(tile_.tile, primaryTileset, secondaryTileset); QImage tile_image = getTileImage(tile_.tile, primaryTileset, secondaryTileset);
if (tile_image.isNull()) { if (tile_image.isNull()) {
// Some metatiles specify tiles that are outside the valid range. // Some metatiles specify tiles that are outside the valid range.
// These are treated as completely transparent, so they can be skipped without // These are treated as completely transparent, so they can be skipped without
// being drawn unless they're on the bottom layer, in which case we need // being drawn unless they're on the bottom layer, in which case we need
// a placeholder because garbage will be drawn otherwise. // a placeholder because garbage will be drawn otherwise.
if (layer == 0) { if (l == 0) {
metatile_painter.fillRect(x * 8, y * 8, 8, 8, palettes.value(0).value(0)); metatile_painter.fillRect(x * 8, y * 8, 8, 8, palettes.value(0).value(0));
} }
continue; continue;
@ -60,7 +72,7 @@ QImage getMetatileImage(uint16_t tile, Tileset *primaryTileset, Tileset *seconda
} }
// The top layer of the metatile has its first color displayed at transparent. // The top layer of the metatile has its first color displayed at transparent.
if (layer > 0) { if (l > 0) {
QColor color(tile_image.color(0)); QColor color(tile_image.color(0));
color.setAlpha(0); color.setAlpha(0);
tile_image.setColor(0, color.rgba()); tile_image.setColor(0, color.rgba());

View file

@ -31,7 +31,7 @@ void MetatileSelector::draw() {
if (i >= primaryLength) { if (i >= primaryLength) {
tile += Project::getNumMetatilesPrimary() - primaryLength; tile += Project::getNumMetatilesPrimary() - primaryLength;
} }
QImage metatile_image = getMetatileImage(tile, this->primaryTileset, this->secondaryTileset); QImage metatile_image = getMetatileImage(tile, this->primaryTileset, this->secondaryTileset, map->metatileLayerOrder);
int map_y = i / this->numMetatilesWide; int map_y = i / this->numMetatilesWide;
int map_x = i % this->numMetatilesWide; int map_x = i % this->numMetatilesWide;
QPoint metatile_origin = QPoint(map_x * 16, map_y * 16); QPoint metatile_origin = QPoint(map_x * 16, map_y * 16);

View file

@ -12,11 +12,11 @@
#include <QCloseEvent> #include <QCloseEvent>
#include <QImageReader> #include <QImageReader>
TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel, QWidget *parent) : TilesetEditor::TilesetEditor(Project *project, Map *map, QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::TilesetEditor) ui(new Ui::TilesetEditor)
{ {
this->init(project, primaryTilesetLabel, secondaryTilesetLabel); this->init(project, map);
new QShortcut(QKeySequence("Ctrl+Shift+Z"), this, SLOT(on_actionRedo_triggered())); new QShortcut(QKeySequence("Ctrl+Shift+Z"), this, SLOT(on_actionRedo_triggered()));
} }
@ -37,7 +37,7 @@ TilesetEditor::~TilesetEditor()
delete metatileLayersScene; delete metatileLayersScene;
} }
void TilesetEditor::init(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel) { void TilesetEditor::init(Project *project, Map *map) {
ui->setupUi(this); ui->setupUi(this);
this->project = project; this->project = project;
@ -46,8 +46,8 @@ void TilesetEditor::init(Project *project, QString primaryTilesetLabel, QString
this->tileYFlip = ui->checkBox_yFlip->isChecked(); this->tileYFlip = ui->checkBox_yFlip->isChecked();
this->paletteId = ui->spinBox_paletteSelector->value(); this->paletteId = ui->spinBox_paletteSelector->value();
Tileset *primaryTileset = project->getTileset(primaryTilesetLabel); Tileset *primaryTileset = project->getTileset(map->layout->tileset_primary_label);
Tileset *secondaryTileset = project->getTileset(secondaryTilesetLabel); Tileset *secondaryTileset = project->getTileset(map->layout->tileset_secondary_label);
if (this->primaryTileset) delete this->primaryTileset; if (this->primaryTileset) delete this->primaryTileset;
if (this->secondaryTileset) delete this->secondaryTileset; if (this->secondaryTileset) delete this->secondaryTileset;
this->primaryTileset = primaryTileset->copy(); this->primaryTileset = primaryTileset->copy();
@ -95,7 +95,7 @@ void TilesetEditor::init(Project *project, QString primaryTilesetLabel, QString
QRegExpValidator *validator = new QRegExpValidator(expression); QRegExpValidator *validator = new QRegExpValidator(expression);
this->ui->lineEdit_metatileLabel->setValidator(validator); this->ui->lineEdit_metatileLabel->setValidator(validator);
this->initMetatileSelector(); this->initMetatileSelector(map);
this->initMetatileLayersItem(); this->initMetatileLayersItem();
this->initTileSelector(); this->initTileSelector();
this->initSelectedTileItem(); this->initSelectedTileItem();
@ -111,6 +111,10 @@ void TilesetEditor::selectMetatile(uint16_t metatileId) {
this->ui->scrollArea_Metatiles->ensureVisible(pos.x(), pos.y()); this->ui->scrollArea_Metatiles->ensureVisible(pos.x(), pos.y());
} }
void TilesetEditor::setMap(Map *map) {
this->metatileSelector->map = map;
}
void TilesetEditor::setTilesets(QString primaryTilesetLabel, QString secondaryTilesetLabel) { void TilesetEditor::setTilesets(QString primaryTilesetLabel, QString secondaryTilesetLabel) {
delete this->primaryTileset; delete this->primaryTileset;
delete this->secondaryTileset; delete this->secondaryTileset;
@ -135,9 +139,9 @@ void TilesetEditor::refresh() {
this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2); this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2);
} }
void TilesetEditor::initMetatileSelector() void TilesetEditor::initMetatileSelector(Map *map)
{ {
this->metatileSelector = new TilesetEditorMetatileSelector(this->primaryTileset, this->secondaryTileset); this->metatileSelector = new TilesetEditorMetatileSelector(this->primaryTileset, this->secondaryTileset, map);
connect(this->metatileSelector, SIGNAL(hoveredMetatileChanged(uint16_t)), connect(this->metatileSelector, SIGNAL(hoveredMetatileChanged(uint16_t)),
this, SLOT(onHoveredMetatileChanged(uint16_t))); this, SLOT(onHoveredMetatileChanged(uint16_t)));
connect(this->metatileSelector, SIGNAL(hoveredMetatileCleared()), connect(this->metatileSelector, SIGNAL(hoveredMetatileCleared()),

View file

@ -23,7 +23,13 @@ void TilesetEditorMetatileSelector::draw() {
if (i >= primaryLength) { if (i >= primaryLength) {
tile += Project::getNumMetatilesPrimary() - primaryLength; tile += Project::getNumMetatilesPrimary() - primaryLength;
} }
QImage metatile_image = getMetatileImage(tile, this->primaryTileset, this->secondaryTileset, true).scaled(32, 32); QImage metatile_image = getMetatileImage(
tile,
this->primaryTileset,
this->secondaryTileset,
map->metatileLayerOrder,
true)
.scaled(32, 32);
int map_y = i / this->numMetatilesWide; int map_y = i / this->numMetatilesWide;
int map_x = i % this->numMetatilesWide; int map_x = i % this->numMetatilesWide;
QPoint metatile_origin = QPoint(map_x * 32, map_y * 32); QPoint metatile_origin = QPoint(map_x * 32, map_y * 32);