mirror of
https://github.com/huderlem/porymap.git
synced 2026-03-21 17:45:44 -05:00
Track metatile in MetatileLayersItem using ID instead of pointer
This commit is contained in:
parent
c7e417b044
commit
a20f14b93d
|
|
@ -18,6 +18,7 @@ and this project somewhat adheres to [Semantic Versioning](https://semver.org/sp
|
|||
### Fixed
|
||||
- Fix crash on older versions of Qt when reopening a project with certain windows open.
|
||||
- Fix potential crash when painting and the cursor leaves the map area.
|
||||
- Fix potential crash when changing maps with the Tileset Editor open.
|
||||
- Fix rare crash while quitting Porymap.
|
||||
- Fix `Edit > Clear Map Entries` in the Region Map Editor not saving the applied changes.
|
||||
- Fix `Edit > Undo/Redo` appearing enabled even when they don't do anything.
|
||||
|
|
|
|||
|
|
@ -9,14 +9,14 @@
|
|||
class MetatileLayersItem: public SelectablePixmapItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
MetatileLayersItem(Metatile *metatile,
|
||||
MetatileLayersItem(uint16_t metatileId,
|
||||
Tileset *primaryTileset,
|
||||
Tileset *secondaryTileset,
|
||||
Qt::Orientation orientation = Qt::Vertical);
|
||||
|
||||
void draw() override;
|
||||
void setTilesets(Tileset*, Tileset*);
|
||||
void setMetatile(Metatile*);
|
||||
void setMetatileId(uint16_t);
|
||||
|
||||
bool hasCursor() const { return this->cursorCellPos != QPoint(-1,-1); }
|
||||
Tile tileUnderCursor() const;
|
||||
|
|
@ -29,7 +29,7 @@ public:
|
|||
|
||||
bool showGrid;
|
||||
private:
|
||||
Metatile* metatile;
|
||||
uint16_t metatileId = 0;
|
||||
Tileset *primaryTileset;
|
||||
Tileset *secondaryTileset;
|
||||
Qt::Orientation orientation;
|
||||
|
|
@ -41,6 +41,7 @@ private:
|
|||
QPoint getBoundedPos(const QPointF &);
|
||||
void updateSelection();
|
||||
bool setCursorCellPos(const QPoint &pos);
|
||||
Metatile* getMetatile() const { return Tileset::getMetatile(this->metatileId, this->primaryTileset, this->secondaryTileset); }
|
||||
signals:
|
||||
void tileChanged(const QPoint &pos);
|
||||
void paletteChanged(const QPoint &pos);
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
#include "imageproviders.h"
|
||||
#include <QPainter>
|
||||
|
||||
MetatileLayersItem::MetatileLayersItem(Metatile *metatile, Tileset *primaryTileset, Tileset *secondaryTileset, Qt::Orientation orientation)
|
||||
MetatileLayersItem::MetatileLayersItem(uint16_t metatileId, Tileset *primaryTileset, Tileset *secondaryTileset, Qt::Orientation orientation)
|
||||
: SelectablePixmapItem(16, 16, Metatile::tileWidth(), Metatile::tileHeight()),
|
||||
metatile(metatile),
|
||||
metatileId(metatileId),
|
||||
primaryTileset(primaryTileset),
|
||||
secondaryTileset(secondaryTileset)
|
||||
{
|
||||
|
|
@ -60,9 +60,10 @@ void MetatileLayersItem::draw() {
|
|||
QPainter painter(&pixmap);
|
||||
|
||||
// Draw tile images
|
||||
int numTiles = qMin(projectConfig.getNumTilesInMetatile(), this->metatile ? this->metatile->tiles.length() : 0);
|
||||
const Metatile* metatile = getMetatile();
|
||||
int numTiles = qMin(projectConfig.getNumTilesInMetatile(), metatile ? metatile->tiles.length() : 0);
|
||||
for (int i = 0; i < numTiles; i++) {
|
||||
Tile tile = this->metatile->tiles.at(i);
|
||||
Tile tile = metatile->tiles.at(i);
|
||||
QImage tileImage = getPalettedTileImage(tile.tileId,
|
||||
this->primaryTileset,
|
||||
this->secondaryTileset,
|
||||
|
|
@ -92,8 +93,8 @@ void MetatileLayersItem::draw() {
|
|||
this->setPixmap(pixmap);
|
||||
}
|
||||
|
||||
void MetatileLayersItem::setMetatile(Metatile *metatile) {
|
||||
this->metatile = metatile;
|
||||
void MetatileLayersItem::setMetatileId(uint16_t metatileId) {
|
||||
this->metatileId = metatileId;
|
||||
draw();
|
||||
}
|
||||
|
||||
|
|
@ -167,10 +168,8 @@ void MetatileLayersItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
|
|||
|
||||
Tile MetatileLayersItem::tileUnderCursor() const {
|
||||
int tileIndex = posToTileIndex(this->cursorCellPos);
|
||||
if (tileIndex < 0 || !this->metatile || tileIndex >= this->metatile->tiles.length()) {
|
||||
return Tile();
|
||||
}
|
||||
return this->metatile->tiles.at(tileIndex);
|
||||
const Metatile* metatile = getMetatile();
|
||||
return metatile ? metatile->tiles.value(tileIndex) : Tile();
|
||||
}
|
||||
|
||||
QPoint MetatileLayersItem::getBoundedPos(const QPointF &pos) {
|
||||
|
|
|
|||
|
|
@ -309,8 +309,7 @@ void TilesetEditor::addWidgetToMetatileProperties(QWidget *w, int *row, int rowS
|
|||
}
|
||||
|
||||
void TilesetEditor::initMetatileLayersItem() {
|
||||
Metatile *metatile = Tileset::getMetatile(this->getSelectedMetatileId(), this->primaryTileset, this->secondaryTileset);
|
||||
this->metatileLayersItem = new MetatileLayersItem(metatile, this->primaryTileset, this->secondaryTileset);
|
||||
this->metatileLayersItem = new MetatileLayersItem(getSelectedMetatileId(), this->primaryTileset, this->secondaryTileset);
|
||||
connect(this->metatileLayersItem, &MetatileLayersItem::tileChanged, [this](const QPoint &pos) { paintSelectedLayerTiles(pos); });
|
||||
connect(this->metatileLayersItem, &MetatileLayersItem::paletteChanged, [this](const QPoint &pos) { paintSelectedLayerTiles(pos, true); });
|
||||
connect(this->metatileLayersItem, &MetatileLayersItem::selectedTilesChanged, this, &TilesetEditor::onMetatileLayerSelectionChanged);
|
||||
|
|
@ -504,7 +503,7 @@ void TilesetEditor::onSelectedMetatileChanged(uint16_t metatileId) {
|
|||
if (updatedMetatile) *this->metatile = *updatedMetatile;
|
||||
}
|
||||
|
||||
this->metatileLayersItem->setMetatile(metatile);
|
||||
this->metatileLayersItem->setMetatileId(metatileId);
|
||||
|
||||
MetatileLabelPair labels = Tileset::getMetatileLabelPair(metatileId, this->primaryTileset, this->secondaryTileset);
|
||||
this->ui->lineEdit_MetatileLabel->setText(labels.owned);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user