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.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/game_data.cpp b/game_data.cpp index 2f8f505..9b31f89 100644 --- a/game_data.cpp +++ b/game_data.cpp
@@ -235,7 +235,7 @@ GameData::GameData() {
235 } 235 }
236 236
237 if (room_it.second["paintings"]) { 237 if (room_it.second["paintings"]) {
238 for (const auto& painting : room_it.second["paintings"]) { 238 for (const auto &painting : room_it.second["paintings"]) {
239 std::string painting_id = painting["id"].as<std::string>(); 239 std::string painting_id = painting["id"].as<std::string>();
240 room_by_painting_[painting_id] = room_id; 240 room_by_painting_[painting_id] = room_id;
241 241
@@ -250,14 +250,36 @@ GameData::GameData() {
250 } 250 }
251 251
252 painting_exit.door = AddOrGetDoor( 252 painting_exit.door = AddOrGetDoor(
253 rd_room, 253 rd_room, painting["required_door"]["door"].as<std::string>());
254 painting["required_door"]["door"].as<std::string>());
255 } 254 }
256 255
257 room_obj.paintings.push_back(painting_exit); 256 room_obj.paintings.push_back(painting_exit);
258 } 257 }
259 } 258 }
260 } 259 }
260
261 if (room_it.second["progression"]) {
262 for (const auto &progression_it : room_it.second["progression"]) {
263 std::string progressive_item_name =
264 progression_it.first.as<std::string>();
265
266 int index = 1;
267 for (const auto &stage : progression_it.second) {
268 int door_id = -1;
269
270 if (stage.IsScalar()) {
271 door_id = AddOrGetDoor(room_obj.name, stage.as<std::string>());
272 } else {
273 door_id = AddOrGetDoor(stage["room"].as<std::string>(),
274 stage["door"].as<std::string>());
275 }
276
277 doors_[door_id].progressives.push_back(
278 {.item_name = progressive_item_name, .quantity = index});
279 index++;
280 }
281 }
282 }
261 } 283 }
262 284
263 map_areas_.reserve(areas_config.size()); 285 map_areas_.reserve(areas_config.size());
@@ -341,10 +363,7 @@ int GameData::AddOrGetDoor(std::string room, std::string door) {
341 363
342 if (!door_by_id_.count(full_name)) { 364 if (!door_by_id_.count(full_name)) {
343 door_by_id_[full_name] = doors_.size(); 365 door_by_id_[full_name] = doors_.size();
344 doors_.push_back({ 366 doors_.push_back({.room = AddOrGetRoom(room), .name = door});
345 .room = AddOrGetRoom(room),
346 .name = door
347 });
348 } 367 }
349 368
350 return door_by_id_[full_name]; 369 return door_by_id_[full_name];