2016-09-07 04:50:47 +01:00
|
|
|
#ifndef MAP_H
|
|
|
|
#define MAP_H
|
|
|
|
|
|
|
|
#include "tileset.h"
|
|
|
|
#include "blockdata.h"
|
|
|
|
#include "event.h"
|
|
|
|
|
|
|
|
#include <QPixmap>
|
|
|
|
#include <QObject>
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
class History {
|
|
|
|
public:
|
|
|
|
History() {
|
2017-11-28 04:46:27 +00:00
|
|
|
|
2016-09-07 04:50:47 +01:00
|
|
|
}
|
2018-02-12 01:21:33 +00:00
|
|
|
T back() {
|
2016-09-07 04:50:47 +01:00
|
|
|
if (head > 0) {
|
|
|
|
return history.at(--head);
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
T next() {
|
|
|
|
if (head + 1 < history.length()) {
|
|
|
|
return history.at(++head);
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
void push(T commit) {
|
|
|
|
while (head + 1 < history.length()) {
|
|
|
|
history.removeLast();
|
|
|
|
}
|
2017-11-28 04:46:27 +00:00
|
|
|
if (saved > head) {
|
|
|
|
saved = -1;
|
|
|
|
}
|
2016-09-07 04:50:47 +01:00
|
|
|
history.append(commit);
|
|
|
|
head++;
|
|
|
|
}
|
2018-02-12 01:21:33 +00:00
|
|
|
T current() {
|
|
|
|
if (head < 0 || history.length() == 0) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
return history.at(head);
|
|
|
|
}
|
2017-11-28 04:46:27 +00:00
|
|
|
void save() {
|
|
|
|
saved = head;
|
|
|
|
}
|
|
|
|
bool isSaved() {
|
|
|
|
return saved == head;
|
|
|
|
}
|
2018-02-12 01:21:33 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
QList<T> history;
|
|
|
|
int head = -1;
|
|
|
|
int saved = -1;
|
2016-09-07 04:50:47 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
class Connection {
|
|
|
|
public:
|
|
|
|
Connection() {
|
|
|
|
}
|
|
|
|
public:
|
|
|
|
QString direction;
|
|
|
|
QString offset;
|
|
|
|
QString map_name;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Map : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
explicit Map(QObject *parent = 0);
|
|
|
|
|
|
|
|
public:
|
|
|
|
QString name;
|
2018-02-12 16:42:01 +00:00
|
|
|
QString constantName;
|
2018-02-15 04:33:55 +00:00
|
|
|
QString group_num;
|
2016-09-07 04:50:47 +01:00
|
|
|
QString attributes_label;
|
|
|
|
QString events_label;
|
|
|
|
QString scripts_label;
|
|
|
|
QString connections_label;
|
|
|
|
QString song;
|
|
|
|
QString index;
|
|
|
|
QString location;
|
|
|
|
QString visibility;
|
|
|
|
QString weather;
|
|
|
|
QString type;
|
|
|
|
QString unknown;
|
|
|
|
QString show_location;
|
|
|
|
QString battle_scene;
|
|
|
|
|
|
|
|
QString width;
|
|
|
|
QString height;
|
|
|
|
QString border_label;
|
|
|
|
QString blockdata_label;
|
|
|
|
QString tileset_primary_label;
|
|
|
|
QString tileset_secondary_label;
|
|
|
|
|
2017-11-28 04:46:27 +00:00
|
|
|
Tileset *tileset_primary = NULL;
|
|
|
|
Tileset *tileset_secondary = NULL;
|
2016-09-07 04:50:47 +01:00
|
|
|
|
2017-11-28 04:46:27 +00:00
|
|
|
Blockdata* blockdata = NULL;
|
2016-09-07 04:50:47 +01:00
|
|
|
|
2018-02-16 04:15:25 +00:00
|
|
|
bool isPersistedToFile = true;
|
|
|
|
|
2016-09-07 04:50:47 +01:00
|
|
|
public:
|
2018-02-12 16:42:01 +00:00
|
|
|
void setName(QString mapName);
|
|
|
|
static QString mapConstantFromName(QString mapName);
|
2016-09-07 04:50:47 +01:00
|
|
|
int getWidth();
|
|
|
|
int getHeight();
|
2017-11-28 04:46:27 +00:00
|
|
|
Tileset* getBlockTileset(int);
|
|
|
|
int getBlockIndex(int index);
|
|
|
|
Metatile* getMetatile(int);
|
|
|
|
QImage getMetatileImage(int);
|
|
|
|
QImage getMetatileTile(int);
|
2016-09-07 04:50:47 +01:00
|
|
|
QPixmap render();
|
|
|
|
QPixmap renderMetatiles();
|
|
|
|
|
|
|
|
QPixmap renderCollision();
|
|
|
|
QImage collision_image;
|
|
|
|
QPixmap collision_pixmap;
|
|
|
|
QImage getCollisionMetatileImage(Block);
|
|
|
|
QImage getElevationMetatileImage(Block);
|
|
|
|
QImage getCollisionMetatileImage(int);
|
|
|
|
QImage getElevationMetatileImage(int);
|
|
|
|
|
|
|
|
QPixmap renderCollisionMetatiles();
|
|
|
|
QPixmap renderElevationMetatiles();
|
|
|
|
void drawSelection(int i, int w, QPainter *painter);
|
|
|
|
|
|
|
|
bool blockChanged(int, Blockdata*);
|
2017-11-28 04:46:27 +00:00
|
|
|
Blockdata* cached_blockdata = NULL;
|
2016-09-07 04:50:47 +01:00
|
|
|
void cacheBlockdata();
|
2017-11-28 04:46:27 +00:00
|
|
|
Blockdata* cached_collision = NULL;
|
2016-09-07 04:50:47 +01:00
|
|
|
void cacheCollision();
|
|
|
|
QImage image;
|
|
|
|
QPixmap pixmap;
|
|
|
|
QList<QImage> metatile_images;
|
|
|
|
int paint_tile;
|
|
|
|
int paint_collision;
|
|
|
|
int paint_elevation;
|
|
|
|
|
|
|
|
Block *getBlock(int x, int y);
|
|
|
|
void setBlock(int x, int y, Block block);
|
|
|
|
void _setBlock(int x, int y, Block block);
|
|
|
|
|
|
|
|
void floodFill(int x, int y, uint tile);
|
|
|
|
void _floodFill(int x, int y, uint tile);
|
|
|
|
void floodFillCollision(int x, int y, uint collision);
|
|
|
|
void _floodFillCollision(int x, int y, uint collision);
|
|
|
|
void floodFillElevation(int x, int y, uint elevation);
|
|
|
|
void _floodFillElevation(int x, int y, uint elevation);
|
|
|
|
void floodFillCollisionElevation(int x, int y, uint collision, uint elevation);
|
|
|
|
void _floodFillCollisionElevation(int x, int y, uint collision, uint elevation);
|
|
|
|
|
|
|
|
History<Blockdata*> history;
|
|
|
|
void undo();
|
|
|
|
void redo();
|
|
|
|
void commit();
|
|
|
|
|
|
|
|
QString object_events_label;
|
|
|
|
QString warps_label;
|
|
|
|
QString coord_events_label;
|
|
|
|
QString bg_events_label;
|
|
|
|
|
2017-11-28 04:46:27 +00:00
|
|
|
QList<Event*> getAllEvents();
|
|
|
|
QList<Event*> getEventsByType(QString type);
|
|
|
|
void removeEvent(Event *event);
|
|
|
|
void addEvent(Event *event);
|
|
|
|
QMap<QString, QList<Event*>> events;
|
2016-09-07 04:50:47 +01:00
|
|
|
|
|
|
|
QList<Connection*> connections;
|
|
|
|
QPixmap renderConnection(Connection);
|
|
|
|
|
|
|
|
QImage border_image;
|
|
|
|
QPixmap border_pixmap;
|
2017-11-28 04:46:27 +00:00
|
|
|
Blockdata *border = NULL;
|
|
|
|
Blockdata *cached_border = NULL;
|
2016-09-07 04:50:47 +01:00
|
|
|
QPixmap renderBorder();
|
|
|
|
void cacheBorder();
|
|
|
|
|
2017-11-28 04:46:27 +00:00
|
|
|
bool hasUnsavedChanges();
|
|
|
|
|
|
|
|
QList<QList<QRgb> > getBlockPalettes(int metatile_index);
|
|
|
|
|
2016-09-07 04:50:47 +01:00
|
|
|
signals:
|
2017-11-28 04:46:27 +00:00
|
|
|
void paintTileChanged(Map *map);
|
|
|
|
void paintCollisionChanged(Map *map);
|
|
|
|
void mapChanged(Map *map);
|
2016-09-07 04:50:47 +01:00
|
|
|
|
|
|
|
public slots:
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // MAP_H
|