diff options
Diffstat (limited to 'src/game_data.cpp')
-rw-r--r-- | src/game_data.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/game_data.cpp b/src/game_data.cpp index e75170e..7b805df 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp | |||
@@ -109,6 +109,7 @@ struct GameData { | |||
109 | auto process_single_entrance = | 109 | auto process_single_entrance = |
110 | [this, room_id, from_room_id](const YAML::Node &option) { | 110 | [this, room_id, from_room_id](const YAML::Node &option) { |
111 | Exit exit_obj; | 111 | Exit exit_obj; |
112 | exit_obj.source_room = from_room_id; | ||
112 | exit_obj.destination_room = room_id; | 113 | exit_obj.destination_room = room_id; |
113 | 114 | ||
114 | if (option["door"]) { | 115 | if (option["door"]) { |
@@ -143,7 +144,7 @@ struct GameData { | |||
143 | switch (entrance_it.second.Type()) { | 144 | switch (entrance_it.second.Type()) { |
144 | case YAML::NodeType::Scalar: { | 145 | case YAML::NodeType::Scalar: { |
145 | // This is just "true". | 146 | // This is just "true". |
146 | rooms_[from_room_id].exits.push_back({.destination_room = room_id}); | 147 | rooms_[from_room_id].exits.push_back({.source_room = from_room_id, .destination_room = room_id}); |
147 | break; | 148 | break; |
148 | } | 149 | } |
149 | case YAML::NodeType::Map: { | 150 | case YAML::NodeType::Map: { |
@@ -264,6 +265,11 @@ struct GameData { | |||
264 | panel_it.second["location_name"].as<std::string>(); | 265 | panel_it.second["location_name"].as<std::string>(); |
265 | } | 266 | } |
266 | 267 | ||
268 | if (panel_it.second["id"]) { | ||
269 | panels_[panel_id].nodepath = | ||
270 | panel_it.second["id"].as<std::string>(); | ||
271 | } | ||
272 | |||
267 | if (panel_it.second["hunt"]) { | 273 | if (panel_it.second["hunt"]) { |
268 | panels_[panel_id].hunt = panel_it.second["hunt"].as<bool>(); | 274 | panels_[panel_id].hunt = panel_it.second["hunt"].as<bool>(); |
269 | } | 275 | } |
@@ -563,7 +569,8 @@ struct GameData { | |||
563 | .room = panel.room, | 569 | .room = panel.room, |
564 | .panels = {panel.id}, | 570 | .panels = {panel.id}, |
565 | .classification = classification, | 571 | .classification = classification, |
566 | .hunt = panel.hunt}); | 572 | .hunt = panel.hunt, |
573 | .single_panel = panel.id}); | ||
567 | locations_by_name[location_name] = {area_id, | 574 | locations_by_name[location_name] = {area_id, |
568 | map_area.locations.size() - 1}; | 575 | map_area.locations.size() - 1}; |
569 | } | 576 | } |
@@ -616,6 +623,7 @@ struct GameData { | |||
616 | for (const Location &location : map_area.locations) { | 623 | for (const Location &location : map_area.locations) { |
617 | map_area.classification |= location.classification; | 624 | map_area.classification |= location.classification; |
618 | map_area.hunt |= location.hunt; | 625 | map_area.hunt |= location.hunt; |
626 | map_area.has_single_panel |= location.single_panel.has_value(); | ||
619 | } | 627 | } |
620 | } | 628 | } |
621 | 629 | ||
@@ -673,6 +681,18 @@ struct GameData { | |||
673 | } | 681 | } |
674 | } | 682 | } |
675 | 683 | ||
684 | if (subway_it["entrances"]) { | ||
685 | for (const auto &entrance_it : subway_it["entrances"]) { | ||
686 | subway_item.entrances.push_back(entrance_it.as<std::string>()); | ||
687 | } | ||
688 | } | ||
689 | |||
690 | if (subway_it["exits"]) { | ||
691 | for (const auto &exit_it : subway_it["exits"]) { | ||
692 | subway_item.exits.push_back(exit_it.as<std::string>()); | ||
693 | } | ||
694 | } | ||
695 | |||
676 | if (subway_it["sunwarp"]) { | 696 | if (subway_it["sunwarp"]) { |
677 | SubwaySunwarp sunwarp; | 697 | SubwaySunwarp sunwarp; |
678 | sunwarp.dots = subway_it["sunwarp"]["dots"].as<int>(); | 698 | sunwarp.dots = subway_it["sunwarp"]["dots"].as<int>(); |
@@ -784,6 +804,11 @@ GameData &GetState() { | |||
784 | 804 | ||
785 | } // namespace | 805 | } // namespace |
786 | 806 | ||
807 | bool SubwayItem::HasWarps() const { | ||
808 | return !(this->tags.empty() && this->entrances.empty() && | ||
809 | this->exits.empty()); | ||
810 | } | ||
811 | |||
787 | bool SubwaySunwarp::operator<(const SubwaySunwarp &rhs) const { | 812 | bool SubwaySunwarp::operator<(const SubwaySunwarp &rhs) const { |
788 | return std::tie(dots, type) < std::tie(rhs.dots, rhs.type); | 813 | return std::tie(dots, type) < std::tie(rhs.dots, rhs.type); |
789 | } | 814 | } |