NasNas
An intuitive and beginner friendly 2D game framework for C++
Tileset.hpp
1 
6 #pragma once
7 
8 #include <cstdint>
9 #include <string>
10 #include <unordered_map>
11 #include <vector>
12 
13 #include <SFML/Graphics/Texture.hpp>
14 #include <SFML/System/Vector2.hpp>
15 
16 #include <NasNas/core/data/Rect.hpp>
17 #include <NasNas/tilemapping/PropertiesContainer.hpp>
18 #include <NasNas/tilemapping/Tile.hpp>
19 
20 namespace ns::tm {
21 
23 
24  struct TileAnimFrame {
25  std::uint32_t tileid;
26  int duration;
27  };
28  struct TileAnim {
29  std::vector<TileAnimFrame> frames;
30  };
31 
32  public:
33  TilesetData(const pugi::xml_node& xml_node, const std::string& base_path);
34  ~TilesetData();
35 
36  auto getTexture() const -> const sf::Texture&;
37  auto getTileData(std::uint32_t id) const -> const TileData&;
38  auto getTileTexCoo(std::uint32_t id, Tile::Flip flip=Tile::Flip::None) const -> std::vector<sf::Vector2f>;
39  auto getTileTextureRect(std::uint32_t id) const -> ns::IntRect;
40 
41  const std::string name;
42  const unsigned int tilewidth;
43  const unsigned int tileheight;
44  const unsigned int tilecount;
45  const unsigned int columns;
46  const unsigned int margin;
47  const unsigned int spacing;
48 
49  private:
50  std::string m_image_source;
51  sf::Texture* m_texture;
52  std::vector<TileData> m_tiles_data;
53  };
54 
55  class Tileset {
56  public:
57  Tileset(const TilesetData& tilesetdata, unsigned int first_gid);
58  const TilesetData& data;
59  const unsigned int firstgid;
60  };
61 
63  public:
64  static auto get(const std::string& tsx_file_name) -> const TilesetData&;
65 
66  private:
67  explicit TsxTilesetsManager() = default;
68  std::unordered_map<std::string, TilesetData> m_shared_tilesets;
69  };
70 
71 }