Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TileManager.hxx
Go to the documentation of this file.
1 #ifndef TILEMANAGER_HXX_
2 #define TILEMANAGER_HXX_
3 
4 #include <SDL.h>
5 #include <unordered_map>
6 #include <unordered_set>
7 #include <string>
8 #include <optional> // required for windows
9 
10 #include "tileData.hxx"
11 #include "json.hxx"
12 #include "Singleton.hxx"
13 #include "../common/enums.hxx"
14 #include "basics/Point.hxx"
15 
16 enum TileMap : size_t
17 {
21 };
22 
23 enum TileSlopes : size_t
24 {
25  N,
26  W,
27  E,
28  S,
29  NW,
30  NE,
31  SW,
32  SE,
39 };
40 
41 enum TileOrientation : size_t
42 {
63  TILE_E_AND_W_CROSS, // special handling for tiles that can be placed on each other and then autotile differently (e.g. Power Lines on Roads or Water)
64  TILE_N_AND_S_CROSS // support powerlines cross low terrain (eg, roads and water)
65 };
66 
71 class TileManager : public Singleton<TileManager>
72 {
73 public:
75 
76  // Disable copy and assignemnt operators
77  TileManager(TileManager const &) = delete;
78  TileManager &operator=(TileManager const &) = delete;
79 
84  SDL_Texture *getTexture(const std::string &tileID) const;
85 
90  TileData *getTileData(const std::string &id) noexcept;
91 
96  Layer getTileLayer(const std::string &tileID) const;
97 
102  size_t calculateSlopeOrientation(unsigned char bitMaskElevation);
103 
108  TileOrientation calculateTileOrientation(unsigned char bitMaskElevation);
109 
110  const std::unordered_map<std::string, TileData> &getAllTileData() const { return m_tileData; };
111 
118  std::vector<std::string> getAllTileIDsForZone(ZoneType zone, ZoneDensity zoneDensity, TileSize tileSize = {1, 1});
119 
126  std::optional<std::string> getRandomTileIDForZoneWithRandomSize(ZoneType zone, ZoneDensity zoneDensity,
127  TileSize maxTileSize = {1, 1});
128 
135  std::vector<Point> getTargetCoordsOfTileID(const Point &targetCoordinates, const std::string &tileID);
136 
142  bool isTileIDAutoTile(const std::string &tileID);
143 
147  void init();
148 
149 private:
150  TileManager();
151  ~TileManager() = default;
152 
153  std::unordered_map<std::string, TileData> m_tileData;
154  std::unordered_set<TileSize> m_tileSizeCombinations;
155  void addJSONObjectToTileData(const nlohmann::json &tileDataJSON, size_t idx, const std::string &id);
156 };
157 
158 #endif
TileManager::operator=
TileManager & operator=(TileManager const &)=delete
tileData.hxx
TileManager::calculateTileOrientation
TileOrientation calculateTileOrientation(unsigned char bitMaskElevation)
Calculates the TileOrientation for elevated tiles to pick the correct Sprite.
Definition: TileManager.cxx:257
DEFAULT
@ DEFAULT
Definition: TileManager.hxx:18
TILE_S
@ TILE_S
Definition: TileManager.hxx:51
TileManager::getAllTileIDsForZone
std::vector< std::string > getAllTileIDsForZone(ZoneType zone, ZoneDensity zoneDensity, TileSize tileSize={1, 1})
Get the All Tile IDs for a zone with a certain tileSize.
Definition: TileManager.cxx:29
TILE_N_AND_W
@ TILE_N_AND_W
Definition: TileManager.hxx:49
TILE_S_AND_E_RECT
@ TILE_S_AND_E_RECT
Definition: TileManager.hxx:61
TILE_ALL_DIRECTIONS
@ TILE_ALL_DIRECTIONS
Definition: TileManager.hxx:58
TileManager::getTargetCoordsOfTileID
std::vector< Point > getTargetCoordsOfTileID(const Point &targetCoordinates, const std::string &tileID)
Return a vector of Points on a target node (origin corner) that would be occupied by a given tileID i...
Definition: TileManager.cxx:46
TILE_N
@ TILE_N
Definition: TileManager.hxx:45
TileManager::~TileManager
~TileManager()=default
TileManager::TileManager
TileManager()
Definition: TileManager.cxx:15
TILE_S_AND_E_AND_W
@ TILE_S_AND_E_AND_W
Definition: TileManager.hxx:56
BETWEEN
@ BETWEEN
Definition: TileManager.hxx:37
SW
@ SW
Definition: TileManager.hxx:31
TileSize
How many tiles are occupied by a building.
Definition: tileData.hxx:86
TILE_N_AND_S_CROSS
@ TILE_N_AND_S_CROSS
Definition: TileManager.hxx:64
TileManager::calculateSlopeOrientation
size_t calculateSlopeOrientation(unsigned char bitMaskElevation)
Calculates the slope orientation for elevated tiles to pick the correct slope Sprite.
Definition: TileManager.cxx:147
TileSlopes
TileSlopes
Definition: TileManager.hxx:23
W
@ W
Definition: TileManager.hxx:26
TILE_E
@ TILE_E
Definition: TileManager.hxx:44
TILE_N_AND_E
@ TILE_N_AND_E
Definition: TileManager.hxx:46
TILE_N_AND_W_RECT
@ TILE_N_AND_W_RECT
Definition: TileManager.hxx:62
TILE_E_AND_W
@ TILE_E_AND_W
Definition: TileManager.hxx:48
TileManager
This class holds all the information about tileIDs gathered from TileData.json.
Definition: TileManager.hxx:71
Singleton.hxx
TileManager::getRandomTileIDForZoneWithRandomSize
std::optional< std::string > getRandomTileIDForZoneWithRandomSize(ZoneType zone, ZoneDensity zoneDensity, TileSize maxTileSize={1, 1})
Pick a single random tileID for a zone with a random tilesize within the supplied max Size.
Definition: TileManager.cxx:72
S_AND_W
@ S_AND_W
Definition: TileManager.hxx:35
TILE_E_AND_W_CROSS
@ TILE_E_AND_W_CROSS
Definition: TileManager.hxx:63
TileManager::m_tileData
std::unordered_map< std::string, TileData > m_tileData
Definition: TileManager.hxx:153
SHORE
@ SHORE
Definition: TileManager.hxx:20
N_AND_W
@ N_AND_W
Definition: TileManager.hxx:33
TileManager::getTileLayer
Layer getTileLayer(const std::string &tileID) const
Get the Layer that is associated with a tileID. The Tile will be placed on this layer.
Definition: TileManager.cxx:104
TILE_S_AND_E
@ TILE_S_AND_E
Definition: TileManager.hxx:52
TILE_N_AND_S_AND_W
@ TILE_N_AND_S_AND_W
Definition: TileManager.hxx:57
DEFAULT_ORIENTATION
@ DEFAULT_ORIENTATION
Definition: TileManager.hxx:38
NE
@ NE
Definition: TileManager.hxx:30
TileManager::m_tileSizeCombinations
std::unordered_set< TileSize > m_tileSizeCombinations
Definition: TileManager.hxx:154
TileManager::getAllTileData
const std::unordered_map< std::string, TileData > & getAllTileData() const
Definition: TileManager.hxx:110
TileManager::getTexture
SDL_Texture * getTexture(const std::string &tileID) const
Get the Texture for the tileID.
Definition: TileManager.cxx:17
TILE_S_AND_W_RECT
@ TILE_S_AND_W_RECT
Definition: TileManager.hxx:60
E
@ E
Definition: TileManager.hxx:27
TileManager::init
void init()
Parse the tileData JSON and set up the tileManager.
Definition: TileManager.cxx:350
TileManager::getTileData
TileData * getTileData(const std::string &id) noexcept
Get the TileData struct for this tileID and all information associated with it.
Definition: TileManager.cxx:22
N_AND_E
@ N_AND_E
Definition: TileManager.hxx:34
Singleton
Abstract Singleton implementation.
Definition: Singleton.hxx:8
TileOrientation
TileOrientation
Definition: TileManager.hxx:41
TILE_S_AND_W
@ TILE_S_AND_W
Definition: TileManager.hxx:55
TILE_W
@ TILE_W
Definition: TileManager.hxx:47
TileMap
TileMap
Definition: TileManager.hxx:16
SE
@ SE
Definition: TileManager.hxx:32
TILE_N_AND_S
@ TILE_N_AND_S
Definition: TileManager.hxx:53
Point
Definition: Point.hxx:7
TileManager::isTileIDAutoTile
bool isTileIDAutoTile(const std::string &tileID)
check if given TileID can autotile (meaning there are textures that look differently according to the...
Definition: TileManager.cxx:544
NW
@ NW
Definition: TileManager.hxx:29
S
@ S
Definition: TileManager.hxx:28
N
@ N
Definition: TileManager.hxx:25
TILE_N_AND_E_RECT
@ TILE_N_AND_E_RECT
Definition: TileManager.hxx:59
TileManager::addJSONObjectToTileData
void addJSONObjectToTileData(const nlohmann::json &tileDataJSON, size_t idx, const std::string &id)
Definition: TileManager.cxx:372
Layer
Layer
All Layers we have.
Definition: enums.hxx:9
S_AND_E
@ S_AND_E
Definition: TileManager.hxx:36
json
nlohmann::json json
Definition: Settings.hxx:12
string
std::string string
Definition: AudioConfig.hxx:14
TILE_DEFAULT_ORIENTATION
@ TILE_DEFAULT_ORIENTATION
Definition: TileManager.hxx:43
TILE_N_AND_E_AND_S
@ TILE_N_AND_E_AND_S
Definition: TileManager.hxx:54
TILE_N_AND_E_AND_W
@ TILE_N_AND_E_AND_W
Definition: TileManager.hxx:50
TileData
Holds all releavted information to this specific tile.
Definition: tileData.hxx:135
SLOPES
@ SLOPES
Definition: TileManager.hxx:19
Point.hxx