diff options
Diffstat (limited to 'src/tracker_panel.cpp')
| -rw-r--r-- | src/tracker_panel.cpp | 58 |
1 files changed, 40 insertions, 18 deletions
| diff --git a/src/tracker_panel.cpp b/src/tracker_panel.cpp index 5580068..466440f 100644 --- a/src/tracker_panel.cpp +++ b/src/tracker_panel.cpp | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #include "ap_state.h" | 3 | #include "ap_state.h" |
| 4 | #include "area_popup.h" | 4 | #include "area_popup.h" |
| 5 | #include "game_data.h" | 5 | #include "game_data.h" |
| 6 | #include "tracker_config.h" | ||
| 6 | #include "tracker_state.h" | 7 | #include "tracker_state.h" |
| 7 | 8 | ||
| 8 | constexpr int AREA_ACTUAL_SIZE = 64; | 9 | constexpr int AREA_ACTUAL_SIZE = 64; |
| @@ -91,9 +92,17 @@ void TrackerPanel::Redraw() { | |||
| 91 | wxMemoryDC dc; | 92 | wxMemoryDC dc; |
| 92 | dc.SelectObject(rendered_); | 93 | dc.SelectObject(rendered_); |
| 93 | 94 | ||
| 94 | for (AreaIndicator &area : areas_) { | 95 | int real_area_size = |
| 95 | const wxBrush *brush_color = wxGREY_BRUSH; | 96 | final_width * AREA_EFFECTIVE_SIZE / image_size.GetWidth(); |
| 97 | int actual_border_size = | ||
| 98 | real_area_size * AREA_BORDER_SIZE / AREA_EFFECTIVE_SIZE; | ||
| 99 | const wxPoint upper_left_triangle[] = { | ||
| 100 | {0, 0}, {0, real_area_size}, {real_area_size, 0}}; | ||
| 101 | const wxPoint lower_right_triangle[] = {{0, real_area_size - 1}, | ||
| 102 | {real_area_size - 1, 0}, | ||
| 103 | {real_area_size, real_area_size}}; | ||
| 96 | 104 | ||
| 105 | for (AreaIndicator &area : areas_) { | ||
| 97 | const MapArea &map_area = GD_GetMapArea(area.area_id); | 106 | const MapArea &map_area = GD_GetMapArea(area.area_id); |
| 98 | if (!AP_IsLocationVisible(map_area.classification)) { | 107 | if (!AP_IsLocationVisible(map_area.classification)) { |
| 99 | area.active = false; | 108 | area.active = false; |
| @@ -115,27 +124,40 @@ void TrackerPanel::Redraw() { | |||
| 115 | } | 124 | } |
| 116 | } | 125 | } |
| 117 | 126 | ||
| 118 | if (has_reachable_unchecked && has_unreachable_unchecked) { | ||
| 119 | brush_color = wxYELLOW_BRUSH; | ||
| 120 | } else if (has_reachable_unchecked) { | ||
| 121 | brush_color = wxGREEN_BRUSH; | ||
| 122 | } else if (has_unreachable_unchecked) { | ||
| 123 | brush_color = wxRED_BRUSH; | ||
| 124 | } | ||
| 125 | |||
| 126 | int real_area_size = | ||
| 127 | final_width * AREA_EFFECTIVE_SIZE / image_size.GetWidth(); | ||
| 128 | int actual_border_size = | ||
| 129 | real_area_size * AREA_BORDER_SIZE / AREA_EFFECTIVE_SIZE; | ||
| 130 | int real_area_x = final_x + (map_area.map_x - (AREA_EFFECTIVE_SIZE / 2)) * | 127 | int real_area_x = final_x + (map_area.map_x - (AREA_EFFECTIVE_SIZE / 2)) * |
| 131 | final_width / image_size.GetWidth(); | 128 | final_width / image_size.GetWidth(); |
| 132 | int real_area_y = final_y + (map_area.map_y - (AREA_EFFECTIVE_SIZE / 2)) * | 129 | int real_area_y = final_y + (map_area.map_y - (AREA_EFFECTIVE_SIZE / 2)) * |
| 133 | final_width / image_size.GetWidth(); | 130 | final_width / image_size.GetWidth(); |
| 134 | 131 | ||
| 135 | dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); | 132 | if (has_reachable_unchecked && has_unreachable_unchecked && |
| 136 | dc.SetBrush(*brush_color); | 133 | GetTrackerConfig().hybrid_areas) { |
| 137 | dc.DrawRectangle({real_area_x, real_area_y}, | 134 | dc.SetPen(*wxTRANSPARENT_PEN); |
| 138 | {real_area_size, real_area_size}); | 135 | dc.SetBrush(*wxGREEN_BRUSH); |
| 136 | dc.DrawPolygon(3, upper_left_triangle, real_area_x, real_area_y); | ||
| 137 | |||
| 138 | dc.SetBrush(*wxRED_BRUSH); | ||
| 139 | dc.DrawPolygon(3, lower_right_triangle, real_area_x, real_area_y); | ||
| 140 | |||
| 141 | dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); | ||
| 142 | dc.SetBrush(*wxTRANSPARENT_BRUSH); | ||
| 143 | dc.DrawRectangle({real_area_x, real_area_y}, | ||
| 144 | {real_area_size, real_area_size}); | ||
| 145 | |||
| 146 | } else { | ||
| 147 | const wxBrush *brush_color = wxGREY_BRUSH; | ||
| 148 | if (has_reachable_unchecked && has_unreachable_unchecked) { | ||
| 149 | brush_color = wxYELLOW_BRUSH; | ||
| 150 | } else if (has_reachable_unchecked) { | ||
| 151 | brush_color = wxGREEN_BRUSH; | ||
| 152 | } else if (has_unreachable_unchecked) { | ||
| 153 | brush_color = wxRED_BRUSH; | ||
| 154 | } | ||
| 155 | |||
| 156 | dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); | ||
| 157 | dc.SetBrush(*brush_color); | ||
| 158 | dc.DrawRectangle({real_area_x, real_area_y}, | ||
| 159 | {real_area_size, real_area_size}); | ||
| 160 | } | ||
| 139 | 161 | ||
| 140 | area.real_x1 = real_area_x; | 162 | area.real_x1 = real_area_x; |
| 141 | area.real_x2 = real_area_x + real_area_size; | 163 | area.real_x2 = real_area_x + real_area_size; |
