From a9bc708c7eeeada4c59952ce71aa071175f8f27d Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 17 Nov 2023 10:11:41 -0500 Subject: Added hybrid areas and settings dialog --- src/tracker_panel.cpp | 58 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 18 deletions(-) (limited to 'src/tracker_panel.cpp') 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 @@ #include "ap_state.h" #include "area_popup.h" #include "game_data.h" +#include "tracker_config.h" #include "tracker_state.h" constexpr int AREA_ACTUAL_SIZE = 64; @@ -91,9 +92,17 @@ void TrackerPanel::Redraw() { wxMemoryDC dc; dc.SelectObject(rendered_); - for (AreaIndicator &area : areas_) { - const wxBrush *brush_color = wxGREY_BRUSH; + int real_area_size = + final_width * AREA_EFFECTIVE_SIZE / image_size.GetWidth(); + int actual_border_size = + real_area_size * AREA_BORDER_SIZE / AREA_EFFECTIVE_SIZE; + const wxPoint upper_left_triangle[] = { + {0, 0}, {0, real_area_size}, {real_area_size, 0}}; + const wxPoint lower_right_triangle[] = {{0, real_area_size - 1}, + {real_area_size - 1, 0}, + {real_area_size, real_area_size}}; + for (AreaIndicator &area : areas_) { const MapArea &map_area = GD_GetMapArea(area.area_id); if (!AP_IsLocationVisible(map_area.classification)) { area.active = false; @@ -115,27 +124,40 @@ void TrackerPanel::Redraw() { } } - if (has_reachable_unchecked && has_unreachable_unchecked) { - brush_color = wxYELLOW_BRUSH; - } else if (has_reachable_unchecked) { - brush_color = wxGREEN_BRUSH; - } else if (has_unreachable_unchecked) { - brush_color = wxRED_BRUSH; - } - - int real_area_size = - final_width * AREA_EFFECTIVE_SIZE / image_size.GetWidth(); - int actual_border_size = - real_area_size * AREA_BORDER_SIZE / AREA_EFFECTIVE_SIZE; int real_area_x = final_x + (map_area.map_x - (AREA_EFFECTIVE_SIZE / 2)) * final_width / image_size.GetWidth(); int real_area_y = final_y + (map_area.map_y - (AREA_EFFECTIVE_SIZE / 2)) * final_width / image_size.GetWidth(); - dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); - dc.SetBrush(*brush_color); - dc.DrawRectangle({real_area_x, real_area_y}, - {real_area_size, real_area_size}); + if (has_reachable_unchecked && has_unreachable_unchecked && + GetTrackerConfig().hybrid_areas) { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(*wxGREEN_BRUSH); + dc.DrawPolygon(3, upper_left_triangle, real_area_x, real_area_y); + + dc.SetBrush(*wxRED_BRUSH); + dc.DrawPolygon(3, lower_right_triangle, real_area_x, real_area_y); + + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRectangle({real_area_x, real_area_y}, + {real_area_size, real_area_size}); + + } else { + const wxBrush *brush_color = wxGREY_BRUSH; + if (has_reachable_unchecked && has_unreachable_unchecked) { + brush_color = wxYELLOW_BRUSH; + } else if (has_reachable_unchecked) { + brush_color = wxGREEN_BRUSH; + } else if (has_unreachable_unchecked) { + brush_color = wxRED_BRUSH; + } + + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, actual_border_size)); + dc.SetBrush(*brush_color); + dc.DrawRectangle({real_area_x, real_area_y}, + {real_area_size, real_area_size}); + } area.real_x1 = real_area_x; area.real_x2 = real_area_x + real_area_size; -- cgit 1.4.1