Add metatile selector in tileset editor window

This commit is contained in:
Marcus Huderle
2018-09-29 15:24:35 -05:00
parent 9abda07c48
commit 990a4aafb7
7 changed files with 350 additions and 13 deletions

View File

@@ -3,6 +3,7 @@
#include <QMainWindow>
#include "project.h"
#include "tileseteditormetatileselector.h"
namespace Ui {
class TilesetEditor;
@@ -13,14 +14,22 @@ class TilesetEditor : public QMainWindow
Q_OBJECT
public:
explicit TilesetEditor(QWidget *parent = nullptr, Project *project = nullptr);
explicit TilesetEditor(Project*, QString, QString, QWidget *parent = nullptr);
~TilesetEditor();
private slots:
void onHoveredMetatileChanged(uint16_t);
void onHoveredMetatileCleared();
void onSelectedMetatileChanged(uint16_t);
private:
void displayPrimaryTilesetTiles();
void initMetatilesSelector();
Ui::TilesetEditor *ui;
TilesetEditorMetatileSelector *metatileSelector;
Project *project;
QString primaryTilesetLabel;
QString secondaryTilesetLabel;
QGraphicsScene *metatilesScene;
};
#endif // TILESETEDITOR_H

View File

@@ -0,0 +1,43 @@
#ifndef TILESETEDITORMETATILESELECTOR_H
#define TILESETEDITORMETATILESELECTOR_H
#include "selectablepixmapitem.h"
#include "tileset.h"
class TilesetEditorMetatileSelector: public SelectablePixmapItem {
Q_OBJECT
public:
TilesetEditorMetatileSelector(Tileset *primaryTileset, Tileset *secondaryTileset): SelectablePixmapItem(32, 32, 1, 1) {
this->primaryTileset = primaryTileset;
this->secondaryTileset = secondaryTileset;
this->numMetatilesWide = 8;
setAcceptHoverEvents(true);
}
void draw();
void select(uint16_t metatileId);
void setTilesets(Tileset*, Tileset*);
uint16_t getSelectedMetatile();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*);
void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
void hoverMoveEvent(QGraphicsSceneHoverEvent*);
void hoverLeaveEvent(QGraphicsSceneHoverEvent*);
private:
Tileset *primaryTileset;
Tileset *secondaryTileset;
uint16_t selectedMetatile;
int numMetatilesWide;
void updateSelectedMetatile();
uint16_t getMetatileId(int x, int y);
QPoint getMetatileIdCoords(uint16_t);
signals:
void hoveredMetatileChanged(uint16_t);
void hoveredMetatileCleared();
void selectedMetatileChanged(uint16_t);
};
#endif // TILESETEDITORMETATILESELECTOR_H