Ignore invalid metatiles in selection calls to metatile selectors

This commit is contained in:
GriffinR 2020-07-08 03:56:27 -04:00 committed by garak
parent 35af5557d3
commit 8b600fb59c
6 changed files with 19 additions and 14 deletions

View file

@ -23,8 +23,8 @@ public:
} }
QPoint getSelectionDimensions(); QPoint getSelectionDimensions();
void draw(); void draw();
void select(uint16_t metatile); bool select(uint16_t metatile);
void selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation); bool selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation);
void setTilesets(Tileset*, Tileset*); void setTilesets(Tileset*, Tileset*);
QList<uint16_t>* getSelectedMetatiles(); QList<uint16_t>* getSelectedMetatiles();
QList<QPair<uint16_t, uint16_t>>* getSelectedCollisions(); QList<QPair<uint16_t, uint16_t>>* getSelectedCollisions();

View file

@ -39,7 +39,7 @@ public:
~TilesetEditor(); ~TilesetEditor();
void setMap(Map*); void setMap(Map*);
void setTilesets(QString, QString); void setTilesets(QString, QString);
void selectMetatile(uint16_t metatileId); bool selectMetatile(uint16_t metatileId);
private slots: private slots:
void onHoveredMetatileChanged(uint16_t); void onHoveredMetatileChanged(uint16_t);

View file

@ -17,7 +17,7 @@ public:
} }
Map *map = nullptr; Map *map = nullptr;
void draw(); void draw();
void select(uint16_t metatileId); bool select(uint16_t metatileId);
void setTilesets(Tileset*, Tileset*); void setTilesets(Tileset*, Tileset*);
uint16_t getSelectedMetatile(); uint16_t getSelectedMetatile();
void updateSelectedMetatile(); void updateSelectedMetatile();

View file

@ -46,16 +46,20 @@ void MetatileSelector::draw() {
} }
} }
void MetatileSelector::select(uint16_t metatileId) { bool MetatileSelector::select(uint16_t metatileId) {
if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return false;
this->externalSelection = false; this->externalSelection = false;
QPoint coords = this->getMetatileIdCoords(metatileId); QPoint coords = this->getMetatileIdCoords(metatileId);
SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0); SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0);
this->updateSelectedMetatiles(); this->updateSelectedMetatiles();
return true;
} }
void MetatileSelector::selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation) { bool MetatileSelector::selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation) {
if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return false;
this->select(metatileId); this->select(metatileId);
this->selectedCollisions->append(QPair<uint16_t, uint16_t>(collision, elevation)); this->selectedCollisions->append(QPair<uint16_t, uint16_t>(collision, elevation));
return true;
} }
void MetatileSelector::setTilesets(Tileset *primaryTileset, Tileset *secondaryTileset) { void MetatileSelector::setTilesets(Tileset *primaryTileset, Tileset *secondaryTileset) {

View file

@ -105,12 +105,12 @@ void TilesetEditor::init(Project *project, Map *map) {
metatileHistory.push(commit); metatileHistory.push(commit);
} }
void TilesetEditor::selectMetatile(uint16_t metatileId) { bool TilesetEditor::selectMetatile(uint16_t metatileId) {
if (Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) { if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return false;
this->metatileSelector->select(metatileId); this->metatileSelector->select(metatileId);
QPoint pos = this->metatileSelector->getMetatileIdCoordsOnWidget(metatileId); QPoint pos = this->metatileSelector->getMetatileIdCoordsOnWidget(metatileId);
this->ui->scrollArea_Metatiles->ensureVisible(pos.x(), pos.y()); this->ui->scrollArea_Metatiles->ensureVisible(pos.x(), pos.y());
} return true;
} }
void TilesetEditor::setMap(Map *map) { void TilesetEditor::setMap(Map *map) {

View file

@ -42,12 +42,13 @@ void TilesetEditorMetatileSelector::draw() {
this->drawSelection(); this->drawSelection();
} }
void TilesetEditorMetatileSelector::select(uint16_t metatileId) { bool TilesetEditorMetatileSelector::select(uint16_t metatileId) {
if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return; if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return false;
QPoint coords = this->getMetatileIdCoords(metatileId); QPoint coords = this->getMetatileIdCoords(metatileId);
SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0); SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0);
this->selectedMetatile = metatileId; this->selectedMetatile = metatileId;
emit selectedMetatileChanged(metatileId); emit selectedMetatileChanged(metatileId);
return true;
} }
void TilesetEditorMetatileSelector::setTilesets(Tileset *primaryTileset, Tileset *secondaryTileset) { void TilesetEditorMetatileSelector::setTilesets(Tileset *primaryTileset, Tileset *secondaryTileset) {