From 009cfbee0c28bb9c80e305de4a9c430350d6dde6 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 11 Mar 2025 17:49:13 -0400 Subject: Handled tilted subway items --- assets/subway.yaml | 12 ++++++------ src/game_data.cpp | 4 ++++ src/game_data.h | 1 + src/subway_map.cpp | 13 ++++++++++++- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/assets/subway.yaml b/assets/subway.yaml index f90f945..080a139 100644 --- a/assets/subway.yaml +++ b/assets/subway.yaml @@ -269,27 +269,27 @@ painting: eight_painting exits: - eight_alcove -- pos: [697, 1471] +- pos: [695, 1471] room: Orange Tower door: Second Floor tilted: true -- pos: [633, 1406] +- pos: [631, 1406] room: Orange Tower door: Third Floor tilted: true -- pos: [570, 1343] +- pos: [567, 1341] room: Orange Tower door: Fourth Floor tilted: true -- pos: [504, 1279] +- pos: [502, 1277] room: Orange Tower door: Fifth Floor tilted: true -- pos: [440, 1215] +- pos: [438, 1213] room: Orange Tower door: Sixth Floor tilted: true -- pos: [379, 1153] +- pos: [378, 1152] room: Orange Tower door: Seventh Floor tilted: true diff --git a/src/game_data.cpp b/src/game_data.cpp index 8ccc0da..a4a441d 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp @@ -828,6 +828,10 @@ struct GameData { subway_item.special = subway_it["special"].as(); } + if (subway_it["tilted"]) { + subway_item.tilted = subway_it["tilted"].as(); + } + subway_items_.push_back(subway_item); } diff --git a/src/game_data.h b/src/game_data.h index be10900..24760de 100644 --- a/src/game_data.h +++ b/src/game_data.h @@ -156,6 +156,7 @@ struct SubwayItem { int id; int x; int y; + bool tilted = false; std::optional door; std::optional painting; std::vector tags; // 2-way teleports diff --git a/src/subway_map.cpp b/src/subway_map.cpp index f00f03f..94292fd 100644 --- a/src/subway_map.cpp +++ b/src/subway_map.cpp @@ -611,7 +611,18 @@ void SubwayMap::Redraw() { if (draw_type == ItemDrawType::kBox) { gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); gcdc.SetBrush(*brush_color); - gcdc.DrawRectangle(real_area_pos, {real_area_size, real_area_size}); + + if (subway_item.tilted) { + constexpr int AREA_TILTED_SIDE = + static_cast(AREA_ACTUAL_SIZE / 1.41421356237); + const wxPoint poly_points[] = {{AREA_TILTED_SIDE, 0}, + {2 * AREA_TILTED_SIDE, AREA_TILTED_SIDE}, + {AREA_TILTED_SIDE, 2 * AREA_TILTED_SIDE}, + {0, AREA_TILTED_SIDE}}; + gcdc.DrawPolygon(4, poly_points, subway_item.x, subway_item.y); + } else { + gcdc.DrawRectangle(real_area_pos, {real_area_size, real_area_size}); + } } else if (draw_type == ItemDrawType::kOwl || draw_type == ItemDrawType::kOwlExit) { gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); gcdc.SetBrush(*brush_color); -- cgit 1.4.1