diff options
Diffstat (limited to 'game_data.cpp')
| -rw-r--r-- | game_data.cpp | 25 |
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 | ||
| 222 | int GameData::AddOrGetRoom(std::string room) { | 237 | int 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 | ||
| 268 | int 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 | |||
| 253 | const GameData &GetGameData() { | 278 | const GameData &GetGameData() { |
| 254 | static GameData *instance = new GameData(); | 279 | static GameData *instance = new GameData(); |
| 255 | return *instance; | 280 | return *instance; |
