diff options
| -rw-r--r-- | assets/subway.yaml | 12 | ||||
| -rw-r--r-- | src/game_data.cpp | 4 | ||||
| -rw-r--r-- | src/game_data.h | 1 | ||||
| -rw-r--r-- | 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 @@ | |||
| 269 | painting: eight_painting | 269 | painting: eight_painting |
| 270 | exits: | 270 | exits: |
| 271 | - eight_alcove | 271 | - eight_alcove |
| 272 | - pos: [697, 1471] | 272 | - pos: [695, 1471] |
| 273 | room: Orange Tower | 273 | room: Orange Tower |
| 274 | door: Second Floor | 274 | door: Second Floor |
| 275 | tilted: true | 275 | tilted: true |
| 276 | - pos: [633, 1406] | 276 | - pos: [631, 1406] |
| 277 | room: Orange Tower | 277 | room: Orange Tower |
| 278 | door: Third Floor | 278 | door: Third Floor |
| 279 | tilted: true | 279 | tilted: true |
| 280 | - pos: [570, 1343] | 280 | - pos: [567, 1341] |
| 281 | room: Orange Tower | 281 | room: Orange Tower |
| 282 | door: Fourth Floor | 282 | door: Fourth Floor |
| 283 | tilted: true | 283 | tilted: true |
| 284 | - pos: [504, 1279] | 284 | - pos: [502, 1277] |
| 285 | room: Orange Tower | 285 | room: Orange Tower |
| 286 | door: Fifth Floor | 286 | door: Fifth Floor |
| 287 | tilted: true | 287 | tilted: true |
| 288 | - pos: [440, 1215] | 288 | - pos: [438, 1213] |
| 289 | room: Orange Tower | 289 | room: Orange Tower |
| 290 | door: Sixth Floor | 290 | door: Sixth Floor |
| 291 | tilted: true | 291 | tilted: true |
| 292 | - pos: [379, 1153] | 292 | - pos: [378, 1152] |
| 293 | room: Orange Tower | 293 | room: Orange Tower |
| 294 | door: Seventh Floor | 294 | door: Seventh Floor |
| 295 | tilted: true | 295 | 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 { | |||
| 828 | subway_item.special = subway_it["special"].as<std::string>(); | 828 | subway_item.special = subway_it["special"].as<std::string>(); |
| 829 | } | 829 | } |
| 830 | 830 | ||
| 831 | if (subway_it["tilted"]) { | ||
| 832 | subway_item.tilted = subway_it["tilted"].as<bool>(); | ||
| 833 | } | ||
| 834 | |||
| 831 | subway_items_.push_back(subway_item); | 835 | subway_items_.push_back(subway_item); |
| 832 | } | 836 | } |
| 833 | 837 | ||
| 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 { | |||
| 156 | int id; | 156 | int id; |
| 157 | int x; | 157 | int x; |
| 158 | int y; | 158 | int y; |
| 159 | bool tilted = false; | ||
| 159 | std::optional<int> door; | 160 | std::optional<int> door; |
| 160 | std::optional<std::string> painting; | 161 | std::optional<std::string> painting; |
| 161 | std::vector<std::string> tags; // 2-way teleports | 162 | std::vector<std::string> 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() { | |||
| 611 | if (draw_type == ItemDrawType::kBox) { | 611 | if (draw_type == ItemDrawType::kBox) { |
| 612 | gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); | 612 | gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); |
| 613 | gcdc.SetBrush(*brush_color); | 613 | gcdc.SetBrush(*brush_color); |
| 614 | gcdc.DrawRectangle(real_area_pos, {real_area_size, real_area_size}); | 614 | |
| 615 | if (subway_item.tilted) { | ||
| 616 | constexpr int AREA_TILTED_SIDE = | ||
| 617 | static_cast<int>(AREA_ACTUAL_SIZE / 1.41421356237); | ||
| 618 | const wxPoint poly_points[] = {{AREA_TILTED_SIDE, 0}, | ||
| 619 | {2 * AREA_TILTED_SIDE, AREA_TILTED_SIDE}, | ||
| 620 | {AREA_TILTED_SIDE, 2 * AREA_TILTED_SIDE}, | ||
| 621 | {0, AREA_TILTED_SIDE}}; | ||
| 622 | gcdc.DrawPolygon(4, poly_points, subway_item.x, subway_item.y); | ||
| 623 | } else { | ||
| 624 | gcdc.DrawRectangle(real_area_pos, {real_area_size, real_area_size}); | ||
| 625 | } | ||
| 615 | } else if (draw_type == ItemDrawType::kOwl || draw_type == ItemDrawType::kOwlExit) { | 626 | } else if (draw_type == ItemDrawType::kOwl || draw_type == ItemDrawType::kOwlExit) { |
| 616 | gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); | 627 | gcdc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); |
| 617 | gcdc.SetBrush(*brush_color); | 628 | gcdc.SetBrush(*brush_color); |
