5#ifndef TILESON_WORLD_HPP
6#define TILESON_WORLD_HPP
8#include "../objects/WorldMapData.hpp"
16 #ifdef JSON11_IS_DEFINED
17 inline explicit World(std::unique_ptr<tson::IJson> jsonParser = std::make_unique<tson::Json11>()) : m_json {std::move(jsonParser)}
21 inline explicit World(
const fs::path &path, std::unique_ptr<tson::IJson> jsonParser = std::make_unique<tson::Json11>());
23 inline explicit World(std::unique_ptr<tson::IJson> jsonParser) : m_json {std::move(jsonParser)}
27 inline explicit World(
const fs::path &path, std::unique_ptr<tson::IJson> jsonParser);
29 inline bool parse(
const fs::path &path);
31 inline bool contains(std::string_view filename);
34 [[nodiscard]]
inline const fs::path &
getPath()
const;
35 [[nodiscard]]
inline const fs::path &
getFolder()
const;
36 [[nodiscard]]
inline const std::vector<WorldMapData> &
getMapData()
const;
38 [[nodiscard]]
inline const std::string &
getType()
const;
39 [[nodiscard]]
inline const std::vector<std::unique_ptr<tson::Map>> &
getMaps()
const;
42 inline void parseJson(
IJson &json);
44 std::unique_ptr<IJson> m_json =
nullptr;
47 std::vector<WorldMapData> m_mapData;
48 std::vector<std::unique_ptr<tson::Map>> m_maps;
49 bool m_onlyShowAdjacentMaps;
53 World::World(
const fs::path &path, std::unique_ptr<tson::IJson> jsonParser) : m_json {std::move(jsonParser)}
61 m_folder = m_path.parent_path();
63 if(!m_json->parse(path))
82 return m_onlyShowAdjacentMaps;
90 void World::parseJson(
IJson &json)
92 if(json.
count(
"onlyShowAdjacentMaps") > 0) m_onlyShowAdjacentMaps = json[
"onlyShowAdjacentMaps"].
get<
bool>();
93 if(json.
count(
"type") > 0) m_type = json[
"type"].get<std::string>();
95 if(json[
"maps"].isArray())
97 auto &maps = json.
array(
"maps");
98 std::for_each(maps.begin(), maps.end(), [&](std::unique_ptr<IJson> &item) { m_mapData.emplace_back(m_folder, *item); });
116 return std::any_of(m_mapData.begin(), m_mapData.end(), [&](
const auto &item) { return item.fileName == filename; });
126 auto iter = std::find_if(m_mapData.begin(), m_mapData.end(), [&](
const auto &item) { return item.fileName == filename; });
127 return (iter == m_mapData.end()) ? nullptr : iter.operator->();
T get(std::string_view key)
Definition IJson.hpp:82
virtual size_t count(std::string_view key) const =0
virtual std::vector< std::unique_ptr< IJson > > array()=0
Definition tileson_parser.hpp:56
Definition WorldMapData.hpp:11
const WorldMapData * get(std::string_view filename) const
Definition World.hpp:124
bool onlyShowAdjacentMaps() const
Definition World.hpp:80
const fs::path & getPath() const
Definition World.hpp:70
World(std::unique_ptr< tson::IJson > jsonParser)
Definition World.hpp:23
const std::string & getType() const
Definition World.hpp:85
std::size_t loadMaps(tson::Tileson *parser)
Definition tileson_forward.hpp:586
bool parse(const fs::path &path)
Definition World.hpp:58
const fs::path & getFolder() const
Definition World.hpp:102
const std::vector< std::unique_ptr< tson::Map > > & getMaps() const
Definition World.hpp:136
const std::vector< WorldMapData > & getMapData() const
Definition World.hpp:75
bool contains(std::string_view filename)
Definition World.hpp:113