about summary refs log tree commit diff stats
path: root/src/game_data.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game_data.cpp')
-rw-r--r--src/game_data.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/game_data.cpp b/src/game_data.cpp index 7c9564b..4dd69e2 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp
@@ -284,7 +284,7 @@ struct GameData {
284 .as<int>(); 284 .as<int>();
285 } else { 285 } else {
286 wxLogError("Missing AP location ID for panel %s - %s", 286 wxLogError("Missing AP location ID for panel %s - %s",
287 rooms_[room_id].name, panels_[panel_id].name); 287 rooms_[room_id].name, panels_[panel_id].name);
288 } 288 }
289 } 289 }
290 } 290 }
@@ -348,7 +348,7 @@ struct GameData {
348 .as<int>(); 348 .as<int>();
349 } else { 349 } else {
350 wxLogError("Missing AP item ID for door %s - %s", 350 wxLogError("Missing AP item ID for door %s - %s",
351 rooms_[room_id].name, doors_[door_id].name); 351 rooms_[room_id].name, doors_[door_id].name);
352 } 352 }
353 } 353 }
354 354
@@ -422,7 +422,8 @@ struct GameData {
422 std::string painting_id = painting["id"].as<std::string>(); 422 std::string painting_id = painting["id"].as<std::string>();
423 room_by_painting_[painting_id] = room_id; 423 room_by_painting_[painting_id] = room_id;
424 424
425 if (!painting["exit_only"] || !painting["exit_only"].as<bool>()) { 425 if ((!painting["exit_only"] || !painting["exit_only"].as<bool>()) &&
426 (!painting["disable"] || !painting["disable"].as<bool>())) {
426 PaintingExit painting_exit; 427 PaintingExit painting_exit;
427 painting_exit.id = painting_id; 428 painting_exit.id = painting_id;
428 429
@@ -594,11 +595,28 @@ struct GameData {
594 } 595 }
595 } 596 }
596 597
598 for (const Room &room : rooms_) {
599 std::string area_name = room.name;
600 if (fold_areas.count(room.name)) {
601 int fold_area_id = fold_areas[room.name];
602 area_name = map_areas_[fold_area_id].name;
603 }
604
605 if (!room.paintings.empty()) {
606 int area_id = AddOrGetArea(area_name);
607 MapArea &map_area = map_areas_[area_id];
608
609 for (const PaintingExit &painting : room.paintings) {
610 map_area.paintings.push_back(painting);
611 }
612 }
613 }
614
597 // Report errors. 615 // Report errors.
598 for (const std::string &area : malconfigured_areas_) { 616 for (const std::string &area : malconfigured_areas_) {
599 wxLogError("Area data not found for: %s", area); 617 wxLogError("Area data not found for: %s", area);
600 } 618 }
601 619
602 // Read in subway items. 620 // Read in subway items.
603 YAML::Node subway_config = 621 YAML::Node subway_config =
604 YAML::LoadFile(GetAbsolutePath("assets/subway.yaml")); 622 YAML::LoadFile(GetAbsolutePath("assets/subway.yaml"));
@@ -687,7 +705,8 @@ struct GameData {
687 if (!door_by_id_.count(full_name)) { 705 if (!door_by_id_.count(full_name)) {
688 int door_id = doors_.size(); 706 int door_id = doors_.size();
689 door_by_id_[full_name] = doors_.size(); 707 door_by_id_[full_name] = doors_.size();
690 doors_.push_back({.id = door_id, .room = AddOrGetRoom(room), .name = door}); 708 doors_.push_back(
709 {.id = door_id, .room = AddOrGetRoom(room), .name = door});
691 } 710 }
692 711
693 return door_by_id_[full_name]; 712 return door_by_id_[full_name];
@@ -728,7 +747,7 @@ GameData &GetState() {
728 747
729} // namespace 748} // namespace
730 749
731bool SubwaySunwarp::operator<(const SubwaySunwarp& rhs) const { 750bool SubwaySunwarp::operator<(const SubwaySunwarp &rhs) const {
732 return std::tie(dots, type) < std::tie(rhs.dots, rhs.type); 751 return std::tie(dots, type) < std::tie(rhs.dots, rhs.type);
733} 752}
734 753
@@ -782,7 +801,7 @@ const SubwayItem &GD_GetSubwayItem(int id) {
782 return GetState().subway_items_.at(id); 801 return GetState().subway_items_.at(id);
783} 802}
784 803
785int GD_GetSubwayItemForPainting(const std::string& painting_id) { 804int GD_GetSubwayItemForPainting(const std::string &painting_id) {
786#ifndef NDEBUG 805#ifndef NDEBUG
787 if (!GetState().subway_item_by_painting_.count(painting_id)) { 806 if (!GetState().subway_item_by_painting_.count(painting_id)) {
788 wxLogError("No subway item for painting %s", painting_id); 807 wxLogError("No subway item for painting %s", painting_id);