Walls And Holes  1
tilemap.h
Go to the documentation of this file.
1 #ifndef TILEMAP_H
2 #define TILEMAP_H
3 
4 #include "array2d.h"
5 #include "tile.h"
6 #include "tiletemplate.h"
7 #include "tiletemplateset.h"
8 
9 #include <QObject>
10 #include <QSize>
11 #include <QSharedPointer>
12 #include <QMutex>
13 
14 class TileMap : public QObject
15 {
16  Q_OBJECT
17 
18 public:
19  TileMap(QSize mapSize,
20  bool isIndoors,
21  bool hasCeiling,
22  QObject *parent = nullptr);
23 
24  Tile &tileAt(int x, int y);
25  const Tile &cTileAt(int x, int y) const;
26 
35 
36  void setTile(int x, int y, TileTemplate *tileTemplate);
37 
38  //sets this tile to the default
39  void clearTile(int x, int y) { setTile(x, y, nullptr); }
40 
41  //sets the whole map to the default
42  void clear();
43 
44  QSize mapSize() const { return mMap.size(); }
45 
46  bool contains(int x, int y) const;
47 
48  int width() const { return mMap.size().width(); }
49  int height() const { return mMap.size().height(); }
50  bool isIndoor() const { return mIsIndoors; }
51  bool hasCeiling() const { return mHasCeiling; }
52 
60  void resizeMap(QSize newSize);
61 
62  const QString savePath() const { return mSavePath; }
63  void setSavePath(QString path){ mSavePath = path; }
64  const Array2D<QSharedPointer<Tile>> &cTiles() const { return mMap; }
65 
72  bool isTileTemplateUsed(TileTemplate *tileTemplate);
73 
81  bool isTileTemplateSetUsed(TileTemplateSet *tileTemplateSet);
82 
89  void removingTileTemplateSet(TileTemplateSet *tileTemplateSet);
90 
97  void removingTileTemplate(TileTemplate *tileTemplate);
98 
104  QVector<QPoint> tilePositionsUsingTemplate(TileTemplate *tileTemplate);
105 
111  QVector<QPoint> tilePositionsUsingTemplateSet(TileTemplateSet *tileTemplateSet);
112 
113  TileTemplateSet *defaultTileTemplateSet() { return mDefaultTileTemplateSet; }
114 
115 public slots:
116  void tilePinged(int x, int y);
117 
118 signals:
119  void tileChanged(int x, int y);
120  void resized();
121 
125  void mapChanged();
126 
127 private:
132  enum TilePingReceiveMode {
133  None, //No action taken on ping reception.
134  SetCheck, //Set mTilePinged to true on ping reception.
135  Collect //Add the pinded tile to mPingedTiles.
136  };
137 
138  //2D array of Tile*. If mMap[x][y]->isEmpty() then ground is shown
140 
141  //General Properties of the map:
142  bool mIsIndoors;
143  bool mHasCeiling;
144 
145  //default save path of this tilemap object, can be changed when using "save as" command.
146  QString mSavePath;
147 
148  TilePingReceiveMode mTilePingReceiveMode;
149  //set to true when mTilePingReceiveMode == SetCheck, and a tilePinged is received.
150  //Should be carefully be set to false elsewhere
151  bool mTilePinged;
152  QVector<QSharedPointer<Tile>> mPingedTiles;
153  QVector<QPoint> mPingedTilePositions;
154 
155  TileTemplateSet *mDefaultTileTemplateSet;
156 
157  QMutex mPingingMutex;
158 };
159 
160 #endif // TILEMAP_H
const Tile & cTileAt(int x, int y) const
Definition: tilemap.cpp:45
TileTemplateSet * defaultTileTemplateSet()
Definition: tilemap.h:113
bool contains(int x, int y) const
Definition: tilemap.cpp:77
void clear()
Definition: tilemap.cpp:70
QVector< QPoint > tilePositionsUsingTemplate(TileTemplate *tileTemplate)
tilePositionsUsingTemplate Finds the positions of all the tiles using a given TileTemplate.
Definition: tilemap.cpp:206
bool isTileTemplateSetUsed(TileTemplateSet *tileTemplateSet)
tileTemplateSetUsed Returns true if some tile in the map uses any of the tileTemplates of the given s...
Definition: tilemap.cpp:138
bool isTileTemplateUsed(TileTemplate *tileTemplate)
tileTemplateUsed Returns true if some tile in the map uses this tileTemplate
Definition: tilemap.cpp:118
bool isIndoor() const
Definition: tilemap.h:50
The TileTemplateSet class Stores a list of tile templates. Also implements the item model for them...
Definition: tiletemplateset.h:14
Class to represent each tile on the tileMap.
Definition: tile.h:13
void resized()
int height() const
Definition: tilemap.h:49
TileMap(QSize mapSize, bool isIndoors, bool hasCeiling, QObject *parent=nullptr)
Definition: tilemap.cpp:5
void removingTileTemplate(TileTemplate *tileTemplate)
removeTileTemplate Called when a tileTemplate is going to be removed. Any tiles using template will b...
Definition: tilemap.cpp:184
const Array2D< QSharedPointer< Tile > > & getArray2D() const
Returns a representation of this map as an Array2D.
Definition: tilemap.cpp:55
void resizeMap(QSize newSize)
resizeMap
Definition: tilemap.cpp:85
QVector< QPoint > tilePositionsUsingTemplateSet(TileTemplateSet *tileTemplateSet)
tilePositionsUsingTemplateSet Finds the positions of all the tiles using a given TileTemplateSet.
Definition: tilemap.cpp:225
void clearTile(int x, int y)
Definition: tilemap.h:39
void removingTileTemplateSet(TileTemplateSet *tileTemplateSet)
removingTileTemplateSet Called when a tileTemplateSet is going to be removed. Any tiles using templat...
Definition: tilemap.cpp:162
Tile & tileAt(int x, int y)
Definition: tilemap.cpp:35
The Array2D class is basically a 2D implementation of QVector.
Definition: array2d.h:35
void setTile(int x, int y, TileTemplate *tileTemplate)
Definition: tilemap.cpp:60
QSize mapSize() const
Definition: tilemap.h:44
void setSavePath(QString path)
Definition: tilemap.h:63
Definition: tiletemplate.h:13
QSize size() const
Definition: array2d.h:79
const Array2D< QSharedPointer< Tile > > & cTiles() const
Definition: tilemap.h:64
int width() const
Definition: tilemap.h:48
bool hasCeiling() const
Definition: tilemap.h:51
void mapChanged()
Sent out whenever the map is changed in any way. Happens after tileChanged() and resized() signals...
void tilePinged(int x, int y)
Definition: tilemap.cpp:247
Definition: tilemap.h:14
const QString savePath() const
Definition: tilemap.h:62
void tileChanged(int x, int y)