about summary refs log tree commit diff stats
path: root/game_data.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game_data.cpp')
-rw-r--r--game_data.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/game_data.cpp b/game_data.cpp index 0ae5468..f377e0b 100644 --- a/game_data.cpp +++ b/game_data.cpp
@@ -217,6 +217,21 @@ GameData::GameData() {
217 } 217 }
218 } 218 }
219 } 219 }
220
221 map_areas_.reserve(areas_config.size());
222
223 std::map<std::string, int> fold_areas;
224 for (const auto &area_it : areas_config) {
225 if (area_it.second["map"]) {
226 int area_id = AddOrGetArea(area_it.first.as<std::string>());
227 MapArea &area_obj = map_areas_[area_id];
228 area_obj.map_x = area_it.second["map"][0].as<int>();
229 area_obj.map_y = area_it.second["map"][1].as<int>();
230 } else if (area_it.second["fold_into"]) {
231 fold_areas[area_it.first.as<std::string>()] =
232 AddOrGetArea(area_it.second["fold_into"].as<std::string>());
233 }
234 }
220} 235}
221 236
222int GameData::AddOrGetRoom(std::string room) { 237int GameData::AddOrGetRoom(std::string room) {
@@ -250,6 +265,16 @@ int GameData::AddOrGetPanel(std::string room, std::string panel) {
250 return panel_by_id_[full_name]; 265 return panel_by_id_[full_name];
251} 266}
252 267
268int GameData::AddOrGetArea(std::string area) {
269 if (!area_by_id_.count(area)) {
270 area_by_id_[area] = map_areas_.size();
271 map_areas_.push_back(
272 {.id = static_cast<int>(map_areas_.size()), .name = area});
273 }
274
275 return area_by_id_[area];
276}
277
253const GameData &GetGameData() { 278const GameData &GetGameData() {
254 static GameData *instance = new GameData(); 279 static GameData *instance = new GameData();
255 return *instance; 280 return *instance;