#pragma once #ifndef MAP_H #define MAP_H #include "blockdata.h" #include "mapconnection.h" #include "maplayout.h" #include "tileset.h" #include "events.h" #include #include #include #include #include #define DEFAULT_BORDER_WIDTH 2 #define DEFAULT_BORDER_HEIGHT 2 // Maximum based only on data type (u8) of map border width/height #define MAX_BORDER_WIDTH 255 #define MAX_BORDER_HEIGHT 255 // Number of metatiles to draw out from edge of map. Could allow modification of this in the future. // porymap will reflect changes to it, but the value is hard-coded in the projects at the moment #define BORDER_DISTANCE 7 class LayoutPixmapItem; class CollisionPixmapItem; class BorderMetatilesPixmapItem; class Map : public QObject { Q_OBJECT public: explicit Map(QObject *parent = nullptr); ~Map(); public: QString name; QString constantName; QString song; QString layoutId; QString location; bool requiresFlash; QString weather; QString type; bool show_location; bool allowRunning; bool allowBiking; bool allowEscaping; int floorNumber = 0; QString battle_scene; QString sharedEventsMap = ""; QString sharedScriptsMap = ""; QStringList scriptsFileLabels; QMap customHeaders; Layout *layout = nullptr; void setLayout(Layout *layout); bool isPersistedToFile = true; bool hasUnsavedDataChanges = false; bool needsLayoutDir = true; bool needsHealLocation = false; QMap> events; QList ownedEvents; // for memory management QList connections; QList metatileLayerOrder; QList metatileLayerOpacity; void setName(QString mapName); static QString mapConstantFromName(QString mapName, bool includePrefix = true); int getWidth(); int getHeight(); int getBorderWidth(); int getBorderHeight(); QList getAllEvents() const; QStringList getScriptLabels(Event::Group group = Event::Group::None) const; QString getScriptsFilePath() const; void openScript(QString label); void removeEvent(Event *); void addEvent(Event *); QUndoStack editHistory; void modify(); void clean(); bool hasUnsavedChanges(); QPixmap renderConnection(MapConnection, Layout *); signals: void mapChanged(Map *map); void modified(); void mapDimensionsChanged(const QSize &size); void mapNeedsRedrawing(); void openScriptRequested(QString label); }; #endif // MAP_H