diff options
Diffstat (limited to 'src/game_data.cpp')
-rw-r--r-- | src/game_data.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/game_data.cpp b/src/game_data.cpp index 4348967..74f872c 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp | |||
@@ -62,6 +62,9 @@ struct GameData { | |||
62 | 62 | ||
63 | std::vector<int> sunwarp_doors_; | 63 | std::vector<int> sunwarp_doors_; |
64 | 64 | ||
65 | std::map<std::string, int> subway_item_by_painting_; | ||
66 | std::map<SubwaySunwarp, int> subway_item_by_sunwarp_; | ||
67 | |||
65 | bool loaded_area_data_ = false; | 68 | bool loaded_area_data_ = false; |
66 | std::set<std::string> malconfigured_areas_; | 69 | std::set<std::string> malconfigured_areas_; |
67 | 70 | ||
@@ -624,7 +627,10 @@ struct GameData { | |||
624 | 627 | ||
625 | if (subway_it["paintings"]) { | 628 | if (subway_it["paintings"]) { |
626 | for (const auto &painting_it : subway_it["paintings"]) { | 629 | for (const auto &painting_it : subway_it["paintings"]) { |
627 | subway_item.paintings.push_back(painting_it.as<std::string>()); | 630 | std::string painting_id = painting_it.as<std::string>(); |
631 | |||
632 | subway_item.paintings.push_back(painting_id); | ||
633 | subway_item_by_painting_[painting_id] = subway_item.id; | ||
628 | } | 634 | } |
629 | } | 635 | } |
630 | 636 | ||
@@ -649,6 +655,11 @@ struct GameData { | |||
649 | } | 655 | } |
650 | 656 | ||
651 | subway_item.sunwarp = sunwarp; | 657 | subway_item.sunwarp = sunwarp; |
658 | |||
659 | subway_item_by_sunwarp_[sunwarp] = subway_item.id; | ||
660 | |||
661 | subway_item.door = | ||
662 | AddOrGetDoor("Sunwarps", std::to_string(sunwarp.dots) + " Sunwarp"); | ||
652 | } | 663 | } |
653 | 664 | ||
654 | if (subway_it["special"]) { | 665 | if (subway_it["special"]) { |
@@ -715,6 +726,10 @@ GameData &GetState() { | |||
715 | 726 | ||
716 | } // namespace | 727 | } // namespace |
717 | 728 | ||
729 | bool SubwaySunwarp::operator<(const SubwaySunwarp& rhs) const { | ||
730 | return std::tie(dots, type) < std::tie(rhs.dots, rhs.type); | ||
731 | } | ||
732 | |||
718 | const std::vector<MapArea> &GD_GetMapAreas() { return GetState().map_areas_; } | 733 | const std::vector<MapArea> &GD_GetMapAreas() { return GetState().map_areas_; } |
719 | 734 | ||
720 | const MapArea &GD_GetMapArea(int id) { return GetState().map_areas_.at(id); } | 735 | const MapArea &GD_GetMapArea(int id) { return GetState().map_areas_.at(id); } |
@@ -764,3 +779,11 @@ const std::vector<SubwayItem> &GD_GetSubwayItems() { | |||
764 | const SubwayItem &GD_GetSubwayItem(int id) { | 779 | const SubwayItem &GD_GetSubwayItem(int id) { |
765 | return GetState().subway_items_.at(id); | 780 | return GetState().subway_items_.at(id); |
766 | } | 781 | } |
782 | |||
783 | int GD_GetSubwayItemForPainting(const std::string& painting_id) { | ||
784 | return GetState().subway_item_by_painting_.at(painting_id); | ||
785 | } | ||
786 | |||
787 | int GD_GetSubwayItemForSunwarp(const SubwaySunwarp &sunwarp) { | ||
788 | return GetState().subway_item_by_sunwarp_.at(sunwarp); | ||
789 | } | ||