about summary refs log tree commit diff stats
path: root/src/subway_map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/subway_map.cpp')
-rw-r--r--src/subway_map.cpp61
1 files changed, 33 insertions, 28 deletions
diff --git a/src/subway_map.cpp b/src/subway_map.cpp index f896693..4ebc56a 100644 --- a/src/subway_map.cpp +++ b/src/subway_map.cpp
@@ -16,28 +16,6 @@ constexpr int OWL_ACTUAL_SIZE = 32;
16 16
17enum class ItemDrawType { kNone, kBox, kOwl }; 17enum class ItemDrawType { kNone, kBox, kOwl };
18 18
19namespace {
20
21std::optional<int> GetRealSubwayDoor(const SubwayItem subway_item) {
22 if (AP_IsSunwarpShuffle() && subway_item.sunwarp &&
23 subway_item.sunwarp->type != SubwaySunwarpType::kFinal) {
24 int sunwarp_index = subway_item.sunwarp->dots - 1;
25 if (subway_item.sunwarp->type == SubwaySunwarpType::kExit) {
26 sunwarp_index += 6;
27 }
28
29 for (const auto &[start_index, mapping] : AP_GetSunwarpMapping()) {
30 if (start_index == sunwarp_index || mapping.exit_index == sunwarp_index) {
31 return GD_GetSunwarpDoors().at(mapping.dots - 1);
32 }
33 }
34 }
35
36 return subway_item.door;
37}
38
39} // namespace
40
41SubwayMap::SubwayMap(wxWindow *parent) : wxPanel(parent, wxID_ANY) { 19SubwayMap::SubwayMap(wxWindow *parent) : wxPanel(parent, wxID_ANY) {
42 SetBackgroundStyle(wxBG_STYLE_PAINT); 20 SetBackgroundStyle(wxBG_STYLE_PAINT);
43 21
@@ -140,7 +118,7 @@ void SubwayMap::OnConnect() {
140 SubwaySunwarp final_sunwarp{.dots = 6, .type = SubwaySunwarpType::kFinal}; 118 SubwaySunwarp final_sunwarp{.dots = 6, .type = SubwaySunwarpType::kFinal};
141 int final_sunwarp_item = GD_GetSubwayItemForSunwarp(final_sunwarp); 119 int final_sunwarp_item = GD_GetSubwayItemForSunwarp(final_sunwarp);
142 120
143 for (const auto &[index, mapping] : AP_GetSunwarpMapping()) { 121 for (const auto &[index, mapping] : sunwarp_mapping_) {
144 std::string tag = fmt::format("sunwarp{}", mapping.dots); 122 std::string tag = fmt::format("sunwarp{}", mapping.dots);
145 123
146 SubwaySunwarp fromWarp; 124 SubwaySunwarp fromWarp;
@@ -197,15 +175,22 @@ void SubwayMap::OnConnect() {
197} 175}
198 176
199void SubwayMap::UpdateIndicators() { 177void SubwayMap::UpdateIndicators() {
178 if (AP_IsSunwarpShuffle()) {
179 sunwarp_mapping_ = AP_GetSunwarpMapping();
180 }
181
200 if (AP_IsPaintingShuffle()) { 182 if (AP_IsPaintingShuffle()) {
201 for (const std::string &painting_id : AP_GetCheckedPaintings()) { 183 std::map<std::string, std::string> painting_mapping =
184 AP_GetPaintingMapping();
185 std::set<std::string> remote_checked_paintings = AP_GetCheckedPaintings();
186
187 for (const std::string &painting_id : remote_checked_paintings) {
202 if (!checked_paintings_.count(painting_id)) { 188 if (!checked_paintings_.count(painting_id)) {
203 checked_paintings_.insert(painting_id); 189 checked_paintings_.insert(painting_id);
204 190
205 if (AP_GetPaintingMapping().count(painting_id)) { 191 if (painting_mapping.count(painting_id)) {
206 std::optional<int> from_id = GD_GetSubwayItemForPainting(painting_id); 192 std::optional<int> from_id = GD_GetSubwayItemForPainting(painting_id);
207 std::optional<int> to_id = GD_GetSubwayItemForPainting( 193 std::optional<int> to_id = GD_GetSubwayItemForPainting(painting_mapping.at(painting_id));
208 AP_GetPaintingMapping().at(painting_id));
209 194
210 if (from_id && to_id) { 195 if (from_id && to_id) {
211 networks_.AddLink(*from_id, *to_id, false); 196 networks_.AddLink(*from_id, *to_id, false);
@@ -600,6 +585,8 @@ void SubwayMap::Redraw() {
600 585
601 wxGCDC gcdc(dc); 586 wxGCDC gcdc(dc);
602 587
588 std::map<std::string, std::string> painting_mapping = AP_GetPaintingMapping();
589
603 for (const SubwayItem &subway_item : GD_GetSubwayItems()) { 590 for (const SubwayItem &subway_item : GD_GetSubwayItems()) {
604 ItemDrawType draw_type = ItemDrawType::kNone; 591 ItemDrawType draw_type = ItemDrawType::kNone;
605 const wxBrush *brush_color = wxGREY_BRUSH; 592 const wxBrush *brush_color = wxGREY_BRUSH;
@@ -641,7 +628,7 @@ void SubwayMap::Redraw() {
641 if (checked_paintings_.count(painting_id)) { 628 if (checked_paintings_.count(painting_id)) {
642 has_checked_painting = true; 629 has_checked_painting = true;
643 630
644 if (AP_GetPaintingMapping().count(painting_id)) { 631 if (painting_mapping.count(painting_id)) {
645 has_mapped_painting = true; 632 has_mapped_painting = true;
646 } else if (AP_IsPaintingMappedTo(painting_id)) { 633 } else if (AP_IsPaintingMappedTo(painting_id)) {
647 has_codomain_painting = true; 634 has_codomain_painting = true;
@@ -803,6 +790,24 @@ void SubwayMap::SetZoom(double zoom, wxPoint static_point) {
803 zoom_slider_->SetValue((zoom - 1.0) / 0.25); 790 zoom_slider_->SetValue((zoom - 1.0) / 0.25);
804} 791}
805 792
793std::optional<int> SubwayMap::GetRealSubwayDoor(const SubwayItem subway_item) {
794 if (AP_IsSunwarpShuffle() && subway_item.sunwarp &&
795 subway_item.sunwarp->type != SubwaySunwarpType::kFinal) {
796 int sunwarp_index = subway_item.sunwarp->dots - 1;
797 if (subway_item.sunwarp->type == SubwaySunwarpType::kExit) {
798 sunwarp_index += 6;
799 }
800
801 for (const auto &[start_index, mapping] : sunwarp_mapping_) {
802 if (start_index == sunwarp_index || mapping.exit_index == sunwarp_index) {
803 return GD_GetSunwarpDoors().at(mapping.dots - 1);
804 }
805 }
806 }
807
808 return subway_item.door;
809}
810
806quadtree::Box<float> SubwayMap::GetItemBox::operator()(const int &id) const { 811quadtree::Box<float> SubwayMap::GetItemBox::operator()(const int &id) const {
807 const SubwayItem &subway_item = GD_GetSubwayItem(id); 812 const SubwayItem &subway_item = GD_GetSubwayItem(id);
808 return {static_cast<float>(subway_item.x), static_cast<float>(subway_item.y), 813 return {static_cast<float>(subway_item.x), static_cast<float>(subway_item.y),