about summary refs log tree commit diff stats
path: root/client/Archipelago/manager.gd
Commit message (Expand)AuthorAgeFilesLines
* Bump versions data-v5 client-v5.5 apworld-v5.5Star Rauchenberger2025-09-161-1/+1
* Bump versions data-v4 client-v4.4 apworld-v4.3Star Rauchenberger2025-09-131-1/+1
* [Client] Don't show our trapsStar Rauchenberger2025-09-131-0/+4
* [Client] Fixed ITEM_CYAN letter shuffleStar Rauchenberger2025-09-131-0/+3
* [Client] Handle anti collectable trapsStar Rauchenberger2025-09-131-0/+3
* [Client] Bump version client-v3.3Star Rauchenberger2025-09-121-1/+1
* [Client] Fixed issue with large datapackagesStar Rauchenberger2025-09-121-2/+2
* Bump versions data-v3 client-v3.2 apworld-v3.2Star Rauchenberger2025-09-121-1/+1
* [Client] Warn when major version doesn't matchStar Rauchenberger2025-09-121-0/+4
* [Client] Handle gallery painting shuffleStar Rauchenberger2025-09-121-0/+7
* Bump versionsStar Rauchenberger2025-09-111-1/+1
* [Client] Read major version from datafileStar Rauchenberger2025-09-101-2/+1
* [Client] Changed version formatStar Rauchenberger2025-09-091-1/+2
* [Client] Handle symbol shuffleStar Rauchenberger2025-09-091-0/+7
* [Client] Prevent text client on connection screenStar Rauchenberger2025-09-081-0/+6
* [Client] Handle lavender cubesStar Rauchenberger2025-09-081-1/+4
* [Client] Handle cyan door behaviorStar Rauchenberger2025-09-081-18/+43
* [Client] Handle grouped doors / shuffled CC doorsStar Rauchenberger2025-09-071-0/+17
* [Client] Location scouting for lettersStar Rauchenberger2025-09-061-5/+51
* [Client] Handle letter shuffleStar Rauchenberger2025-09-061-5/+69
* [Client] Fixed external names in messages popupStar Rauchenberger2025-09-041-8/+8
* [Client] Handle roof access optionStar Rauchenberger2025-09-041-0/+2
* [Client] Handle keyholder sanityStar Rauchenberger2025-09-021-2/+4
* [Client] Handle progressive doorsStar Rauchenberger2025-09-011-27/+43
* [Client] Handle triggering goalStar Rauchenberger2025-09-011-1/+7
* [Client] Batch sending locations on map loadStar Rauchenberger2025-08-311-1/+16
* [Client] Potentially fixed crash when loading corrupted localdataStar Rauchenberger2025-08-301-2/+4
* [Client] Added textclientStar Rauchenberger2025-08-291-0/+42
* [Client] Save connection settings to diskStar Rauchenberger2025-08-291-1/+36
* [Client] Last received item is rememberedStar Rauchenberger2025-08-291-1/+33
* [Client] Various fixesStar Rauchenberger2025-08-291-5/+5
* [Client] Added messages overlayStar Rauchenberger2025-08-281-4/+98
* Client is starting to work!Star Rauchenberger2025-08-281-0/+100
Indicators(); } void AreaPopup::UpdateIndicators() { const MapArea& map_area = GD_GetMapArea(area_id_); // Start calculating extents. wxMemoryDC mem_dc; mem_dc.SetFont(GetFont().Bold()); wxSize header_extent = mem_dc.GetTextExtent(map_area.name); int acc_height = header_extent.GetHeight() + 20; int col_width = 0; mem_dc.SetFont(GetFont()); std::vector<int> real_locations; for (int section_id = 0; section_id < map_area.locations.size(); section_id++) { const Location& location = map_area.locations.at(section_id); if (!AP_IsLocationVisible(location.classification) && !(location.hunt && GetTrackerConfig().show_hunt_panels)) { continue; } real_locations.push_back(section_id); wxSize item_extent = mem_dc.GetTextExtent(location.name); int item_height = std::max(32, item_extent.GetHeight()) + 10; acc_height += item_height; if (item_extent.GetWidth() > col_width) { col_width = item_extent.GetWidth(); } } if (AP_IsPaintingShuffle()) { for (int painting_id : map_area.paintings) { const PaintingExit& painting = GD_GetPaintingExit(painting_id); wxSize item_extent = mem_dc.GetTextExtent(painting.internal_id); // TODO: Replace with a friendly name. int item_height = std::max(32, item_extent.GetHeight()) + 10; acc_height += item_height; if (item_extent.GetWidth() > col_width) { col_width = item_extent.GetWidth(); } } } int item_width = col_width + 10 + 32; int full_width = std::max(header_extent.GetWidth(), item_width) + 20; Fit(); SetVirtualSize(full_width, acc_height); rendered_ = wxBitmap(full_width, acc_height); mem_dc.SelectObject(rendered_); mem_dc.SetPen(*wxTRANSPARENT_PEN); mem_dc.SetBrush(*wxBLACK_BRUSH); mem_dc.DrawRectangle({0, 0}, {full_width, acc_height}); mem_dc.SetFont(GetFont().Bold()); mem_dc.SetTextForeground(*wxWHITE); mem_dc.DrawText(map_area.name, {(full_width - header_extent.GetWidth()) / 2, 10}); int cur_height = header_extent.GetHeight() + 20; mem_dc.SetFont(GetFont()); for (int section_id : real_locations) { const Location& location = map_area.locations.at(section_id); bool checked = AP_HasCheckedGameLocation(location.ap_location_id) || (location.hunt && AP_HasCheckedHuntPanel(location.ap_location_id)) || (IsLocationWinCondition(location) && AP_HasReachedGoal()); wxBitmap* eye_ptr = checked ? &checked_eye_ : &unchecked_eye_; mem_dc.DrawBitmap(*eye_ptr, {10, cur_height}); bool reachable = IsLocationReachable(location.ap_location_id); const wxColour* text_color = reachable ? wxWHITE : wxRED; mem_dc.SetTextForeground(*text_color); wxSize item_extent = mem_dc.GetTextExtent(location.name); mem_dc.DrawText( location.name, {10 + 32 + 10, cur_height + (32 - mem_dc.GetFontMetrics().height) / 2}); cur_height += 10 + 32; } if (AP_IsPaintingShuffle()) { for (int painting_id : map_area.paintings) { const PaintingExit& painting = GD_GetPaintingExit(painting_id); bool checked = AP_IsPaintingChecked(painting.internal_id); wxBitmap* eye_ptr = checked ? &checked_eye_ : &unchecked_eye_; mem_dc.DrawBitmap(*eye_ptr, {10, cur_height}); bool reachable = IsPaintingReachable(painting_id); const wxColour* text_color = reachable ? wxWHITE : wxRED; mem_dc.SetTextForeground(*text_color); wxSize item_extent = mem_dc.GetTextExtent(painting.internal_id); // TODO: Replace with friendly name. mem_dc.DrawText(painting.internal_id, {10 + 32 + 10, cur_height + (32 - mem_dc.GetFontMetrics().height) / 2}); cur_height += 10 + 32; } } } void AreaPopup::OnPaint(wxPaintEvent& event) { wxBufferedPaintDC dc(this); PrepareDC(dc); dc.DrawBitmap(rendered_, 0, 0); event.Skip(); }