Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MapNode.hxx
Go to the documentation of this file.
1 #ifndef MAPNODE_HXX_
2 #define MAPNODE_HXX_
3 
4 #include <SDL.h>
5 
6 #include <memory>
7 #include <string>
8 #include <algorithm>
9 #include <vector>
10 
11 #include "../Sprite.hxx"
12 #include "../common/enums.hxx"
13 #include "../basics/Point.hxx"
14 
15 #include "../TileManager.hxx"
16 
18 {
20  TileData *tileData = nullptr;
21  int32_t tileIndex = 0;
23  TileMap tileMap = TileMap::DEFAULT; // store information whether we use normal, slope or shore tiles
24 };
25 
30 class MapNode
31 {
32 public:
33  MapNode(Point isoCoordinates, const std::string &terrainID, const std::string &newTileID = "");
34 
37  MapNode(MapNode &&mn) noexcept
38  : m_isoCoordinates(std::move(mn.m_isoCoordinates)), m_sprite(std::move(mn.m_sprite)),
39  m_previousTileID(std::move(mn.m_previousTileID)), m_autotileOrientation(std::move(mn.m_autotileOrientation)),
40  m_elevationOrientation(mn.m_elevationOrientation), m_clippingWidth(mn.m_clippingWidth),
41  m_mapNodeData(std::move(mn.m_mapNodeData)), m_autotileBitmask(std::move(mn.m_autotileBitmask)),
42  m_elevationBitmask(mn.m_elevationBitmask){};
43 
47  ~MapNode() = default;
48 
54  Sprite *getSprite() const { return m_sprite.get(); };
55 
59  const Point &getCoordinates() const { return m_isoCoordinates; };
60 
64  void setCoordinates(const Point &newIsoCoordinates);
65 
73  bool changeHeight(const bool higher);
74 
78  void render() const;
79 
80  void setBitmask(unsigned char elevationBitmask, std::vector<uint8_t> tileTypeBitmask);
81 
82  unsigned char getElevationBitmask() const { return m_elevationBitmask; };
83 
84  const TileData *getTileData(Layer layer) const { return m_mapNodeData[layer].tileData; };
85 
89  const std::string &getTileID(Layer layer) const { return m_mapNodeData[layer].tileID; };
90 
91  bool isPlacementAllowed(const std::string &newTileID) const;
92 
94  void setMapNodeData(std::vector<MapNodeData> &&mapNodeData);
95 
96  const std::vector<MapNodeData> &getMapNodeData() const { return m_mapNodeData; };
97  const MapNodeData &getMapNodeDataForLayer(Layer layer) const { return m_mapNodeData[layer]; };
98 
99  const MapNodeData &getActiveMapNodeData() const;
100 
104  bool isPlacableOnSlope(const std::string &tileID) const;
105 
108  bool isSlopeNode(void) const;
109 
113  const bool isConductive() const;
114 
121  void demolishNode(const Layer &layer = Layer::NONE);
122 
126  void demolishLayer(const Layer &layer);
127 
128  void setTileID(const std::string &tileType, const Point &origPoint);
129 
136  const Point &getOrigCornerPoint(Layer layer) const { return getMapNodeDataForLayer(layer).origCornerPoint; }
137 
144  bool isOriginNode(Layer layer = Layer::BUILDINGS) const
145  {
146  return (m_isoCoordinates == getMapNodeDataForLayer(layer).origCornerPoint);
147  }
148 
154 
155  bool isLayerOccupied(const Layer &layer) const { return m_mapNodeData[layer].tileData != nullptr; }
156 
160  inline void setElevationBitMask(const unsigned char bitMask) { m_elevationBitmask = bitMask; }
161 
165  inline void setAutotileBitMask(std::vector<unsigned char> &&bitMask) { m_autotileBitmask = std::move(bitMask); }
166 
170  void updateTexture(const Layer &layer = Layer::NONE);
171 
177  void setNodeTransparency(const float transparencyFactor, const Layer &layer) const;
178 
183  void setZIndex(int zIndex) { m_isoCoordinates.z = zIndex; };
184 
186  static const int maxHeight = 32;
187 
188 private:
190  std::unique_ptr<Sprite> m_sprite;
192  std::vector<TileOrientation> m_autotileOrientation;
195  std::vector<MapNodeData> m_mapNodeData;
196  std::vector<unsigned char> m_autotileBitmask;
197  unsigned char m_elevationBitmask = 0;
198 };
199 #endif
MapNode::getSprite
Sprite * getSprite() const
get Sprite
Definition: MapNode.hxx:54
MapNode::MapNode
MapNode(MapNode &&mn) noexcept
Move constructor.
Definition: MapNode.hxx:37
MapNode::setZIndex
void setZIndex(int zIndex)
Update the Z-Index of this mapNode.
Definition: MapNode.hxx:183
DEFAULT
@ DEFAULT
Definition: TileManager.hxx:18
MapNode::getMapNodeDataForLayer
const MapNodeData & getMapNodeDataForLayer(Layer layer) const
Definition: MapNode.hxx:97
Sprite
Definition: Sprite.hxx:32
MapNodeData::tileData
TileData * tileData
Definition: MapNode.hxx:20
MapNode::getCoordinates
const Point & getCoordinates() const
get iso coordinates of this node
Definition: MapNode.hxx:59
MapNode::getTopMostActiveLayer
Layer getTopMostActiveLayer() const
return topmost active layer.
Definition: MapNode.cxx:105
NONE
@ NONE
0- this must be FIRST !!!
Definition: enums.hxx:11
Point::z
int z
The z coordinate.
Definition: Point.hxx:23
MapNode::~MapNode
~MapNode()=default
Destroys the MapNode object.
MapNode::isConductive
const bool isConductive() const
check the conductivity of the node
Definition: MapNode.cxx:502
MapNode::maxHeight
static const int maxHeight
Maximum height of the node.
Definition: MapNode.hxx:186
MapNode::isPlacementAllowed
bool isPlacementAllowed(const std::string &newTileID) const
Definition: MapNode.cxx:147
MapNode::getTileData
const TileData * getTileData(Layer layer) const
Definition: MapNode.hxx:84
MapNodeData::origCornerPoint
Point origCornerPoint
Definition: MapNode.hxx:22
MapNode::m_autotileOrientation
std::vector< TileOrientation > m_autotileOrientation
Definition: MapNode.hxx:192
MapNode::m_elevationBitmask
unsigned char m_elevationBitmask
Definition: MapNode.hxx:197
MapNode::getMapNodeData
const std::vector< MapNodeData > & getMapNodeData() const
Definition: MapNode.hxx:96
MapNode::m_sprite
std::unique_ptr< Sprite > m_sprite
Definition: MapNode.hxx:190
MapNode::demolishLayer
void demolishLayer(const Layer &layer)
demolish specific layer of a Node.
Definition: MapNode.cxx:454
MapNode::updateTexture
void updateTexture(const Layer &layer=Layer::NONE)
Update texture.
Definition: MapNode.cxx:253
MapNode::demolishNode
void demolishNode(const Layer &layer=Layer::NONE)
Demolish a node.
Definition: MapNode.cxx:465
MapNode::render
void render() const
Render MapNode.
Definition: MapNode.cxx:41
MapNode::isSlopeNode
bool isSlopeNode(void) const
check if current Node Terrain is Slope Terrain.
Definition: MapNode.cxx:430
MapNode
Class that holds map nodes.
Definition: MapNode.hxx:30
MapNode::getElevationBitmask
unsigned char getElevationBitmask() const
Definition: MapNode.hxx:82
BUILDINGS
@ BUILDINGS
8- Buildings, Streets and everything that goes on the terrain
Definition: enums.hxx:19
MapNode::m_elevationOrientation
size_t m_elevationOrientation
Definition: MapNode.hxx:193
Point::INVALID
static constexpr Point INVALID()
Definition: Point.hxx:35
DEFAULT_ORIENTATION
@ DEFAULT_ORIENTATION
Definition: TileManager.hxx:38
MapNode::getOrigCornerPoint
const Point & getOrigCornerPoint(Layer layer) const
Get the Origin Corner Point of a multitile building.
Definition: MapNode.hxx:136
MapNode::setElevationBitMask
void setElevationBitMask(const unsigned char bitMask)
Set elevation bit mask.
Definition: MapNode.hxx:160
MapNode::m_mapNodeData
std::vector< MapNodeData > m_mapNodeData
Definition: MapNode.hxx:195
MapNode::isOriginNode
bool isOriginNode(Layer layer=Layer::BUILDINGS) const
If this is the origin node of a multitile building.
Definition: MapNode.hxx:144
MapNode::setNodeTransparency
void setNodeTransparency(const float transparencyFactor, const Layer &layer) const
Sets a node to be Transparent.
Definition: MapNode.cxx:117
MapNodeData::tileMap
TileMap tileMap
Definition: MapNode.hxx:23
MapNodeData::tileIndex
int32_t tileIndex
Definition: MapNode.hxx:21
MapNode::m_clippingWidth
int m_clippingWidth
Definition: MapNode.hxx:194
TileMap
TileMap
Definition: TileManager.hxx:16
MapNode::getTileID
const std::string & getTileID(Layer layer) const
get TileID of specific layer inside NodeData.
Definition: MapNode.hxx:89
MapNode::m_autotileBitmask
std::vector< unsigned char > m_autotileBitmask
Definition: MapNode.hxx:196
MapNode::m_previousTileID
std::string m_previousTileID
Definition: MapNode.hxx:191
MapNode::m_isoCoordinates
Point m_isoCoordinates
Definition: MapNode.hxx:189
Point
Definition: Point.hxx:7
MapNodeData::tileID
std::string tileID
Definition: MapNode.hxx:19
MapNode::changeHeight
bool changeHeight(const bool higher)
Change Height.
Definition: MapNode.cxx:26
MapNode::MapNode
MapNode(Point isoCoordinates, const std::string &terrainID, const std::string &newTileID="")
Definition: MapNode.cxx:9
MapNode::setMapNodeData
void setMapNodeData(std::vector< MapNodeData > &&mapNodeData)
Overwrite m_mapData with the one loaded from a savegame. This function to be used only by loadGame.
Definition: MapNode.cxx:440
MapNode::isPlacableOnSlope
bool isPlacableOnSlope(const std::string &tileID) const
check if tileID placeable on slope tile.
Definition: MapNode.cxx:124
Layer
Layer
All Layers we have.
Definition: enums.hxx:9
MapNode::setBitmask
void setBitmask(unsigned char elevationBitmask, std::vector< uint8_t > tileTypeBitmask)
Definition: MapNode.cxx:43
string
std::string string
Definition: AudioConfig.hxx:14
MapNode::setAutotileBitMask
void setAutotileBitMask(std::vector< unsigned char > &&bitMask)
Set autotile bit mask.
Definition: MapNode.hxx:165
MapNode::getActiveMapNodeData
const MapNodeData & getActiveMapNodeData() const
Definition: MapNode.cxx:438
MapNode::isLayerOccupied
bool isLayerOccupied(const Layer &layer) const
Definition: MapNode.hxx:155
MapNodeData
Definition: MapNode.hxx:17
TileData
Holds all releavted information to this specific tile.
Definition: tileData.hxx:135
MapNode::setTileID
void setTileID(const std::string &tileType, const Point &origPoint)
Definition: MapNode.cxx:50
MapNode::setCoordinates
void setCoordinates(const Point &newIsoCoordinates)
sets the iso coordinates of this node
Definition: MapNode.cxx:432