porymap/include/core/mapconnection.h
2024-08-20 13:23:46 -04:00

63 lines
1.9 KiB
C++

#pragma once
#ifndef MAPCONNECTION_H
#define MAPCONNECTION_H
#include <QString>
#include <QObject>
#include <QMap>
class Project;
class Map;
class MapConnection : public QObject
{
Q_OBJECT
public:
MapConnection(const QString &targetMapName, const QString &direction, int offset = 0);
Map* parentMap() const { return m_parentMap; }
QString parentMapName() const;
void setParentMap(Map* map, bool mirror = true);
Map* targetMap() const;
QString targetMapName() const { return m_targetMapName; }
void setTargetMapName(const QString &targetMapName, bool mirror = true);
QString direction() const { return m_direction; }
void setDirection(const QString &direction, bool mirror = true);
int offset() const { return m_offset; }
void setOffset(int offset, bool mirror = true);
MapConnection* findMirror();
MapConnection* createMirror();
QPixmap getPixmap();
static QPointer<Project> project;
static const QMap<QString, QString> oppositeDirections;
static const QStringList cardinalDirections;
static bool isCardinal(const QString &direction);
static bool isHorizontal(const QString &direction);
static bool isVertical(const QString &direction);
static bool isDiving(const QString &direction);
static QString oppositeDirection(const QString &direction) { return oppositeDirections.value(direction, direction); }
static bool areMirrored(const MapConnection*, const MapConnection*);
private:
Map* m_parentMap;
QString m_targetMapName;
QString m_direction;
int m_offset;
void markMapEdited();
Map* getMap(const QString& mapName) const;
signals:
void parentMapChanged(Map* before, Map* after);
void targetMapNameChanged(QString before, QString after);
void directionChanged(QString before, QString after);
void offsetChanged(int before, int after);
};
#endif // MAPCONNECTION_H