diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-11 20:08:32 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-11 20:08:32 -0400 |
commit | fcfefe57d9d0b9d8eb3e149e68605103a9e6b490 (patch) | |
tree | 415058cc3361727390c4d92ad367ec8c59350974 | |
parent | 6ba1787f7229125affbf12a94c4ddfb6b2e132b8 (diff) | |
download | lingo2-archipelago-fcfefe57d9d0b9d8eb3e149e68605103a9e6b490.tar.gz lingo2-archipelago-fcfefe57d9d0b9d8eb3e149e68605103a9e6b490.tar.bz2 lingo2-archipelago-fcfefe57d9d0b9d8eb3e149e68605103a9e6b490.zip |
[Data] Fixed connection target required door logic bugs
19 files changed, 174 insertions, 49 deletions
diff --git a/data/connections.txtpb b/data/connections.txtpb index 93e7faa..35e7ef8 100644 --- a/data/connections.txtpb +++ b/data/connections.txtpb | |||
@@ -20,7 +20,7 @@ connections { | |||
20 | from { | 20 | from { |
21 | port { | 21 | port { |
22 | map: "the_entry" | 22 | map: "the_entry" |
23 | room: "Flipped Second Room" | 23 | room: "Four Rooms Entrance" |
24 | name: "FOUR" | 24 | name: "FOUR" |
25 | } | 25 | } |
26 | } | 26 | } |
@@ -157,7 +157,7 @@ connections { | |||
157 | to { | 157 | to { |
158 | port { | 158 | port { |
159 | map: "the_darkroom" | 159 | map: "the_darkroom" |
160 | room: "Second Room" | 160 | room: "Congruent Entrance" |
161 | name: "CONGRUENT" | 161 | name: "CONGRUENT" |
162 | } | 162 | } |
163 | } | 163 | } |
@@ -233,7 +233,7 @@ connections { | |||
233 | from { | 233 | from { |
234 | port { | 234 | port { |
235 | map: "the_darkroom" | 235 | map: "the_darkroom" |
236 | room: "First Room" | 236 | room: "Double Sided Entrance" |
237 | name: "DOUBLESIDED" | 237 | name: "DOUBLESIDED" |
238 | } | 238 | } |
239 | } | 239 | } |
@@ -308,6 +308,23 @@ connections { | |||
308 | name: "GALLERY" | 308 | name: "GALLERY" |
309 | } | 309 | } |
310 | } | 310 | } |
311 | oneway: true | ||
312 | } | ||
313 | connections { | ||
314 | from { | ||
315 | port { | ||
316 | map: "the_butterfly" | ||
317 | room: "Main Area" | ||
318 | name: "GALLERY" | ||
319 | } | ||
320 | } | ||
321 | to { | ||
322 | room { | ||
323 | map: "the_gallery" | ||
324 | name: "Main Area" | ||
325 | } | ||
326 | } | ||
327 | oneway: true | ||
311 | } | 328 | } |
312 | connections { | 329 | connections { |
313 | from { | 330 | from { |
@@ -618,7 +635,7 @@ connections { | |||
618 | from { | 635 | from { |
619 | port { | 636 | port { |
620 | map: "the_entry" | 637 | map: "the_entry" |
621 | room: "Link Area" | 638 | room: "Liberated Entrance" |
622 | name: "BLUE" | 639 | name: "BLUE" |
623 | } | 640 | } |
624 | } | 641 | } |
@@ -666,7 +683,7 @@ connections { | |||
666 | from { | 683 | from { |
667 | port { | 684 | port { |
668 | map: "the_entry" | 685 | map: "the_entry" |
669 | room: "Link Area" | 686 | room: "Literate Entrance" |
670 | name: "BROWN" | 687 | name: "BROWN" |
671 | } | 688 | } |
672 | } | 689 | } |
@@ -876,6 +893,7 @@ connections { | |||
876 | } | 893 | } |
877 | } | 894 | } |
878 | oneway: true | 895 | oneway: true |
896 | bypass_target_door: true | ||
879 | } | 897 | } |
880 | connections { | 898 | connections { |
881 | from { | 899 | from { |
@@ -1455,7 +1473,6 @@ connections { | |||
1455 | name: "GREAT" | 1473 | name: "GREAT" |
1456 | } | 1474 | } |
1457 | } | 1475 | } |
1458 | door { map: "the_great" name: "Daedalus Entrance" } | ||
1459 | oneway: true | 1476 | oneway: true |
1460 | } | 1477 | } |
1461 | connections { | 1478 | connections { |
@@ -1474,6 +1491,7 @@ connections { | |||
1474 | } | 1491 | } |
1475 | } | 1492 | } |
1476 | oneway: true | 1493 | oneway: true |
1494 | bypass_target_door: true | ||
1477 | } | 1495 | } |
1478 | connections { | 1496 | connections { |
1479 | from { | 1497 | from { |
@@ -1769,12 +1787,13 @@ connections { | |||
1769 | } | 1787 | } |
1770 | } | 1788 | } |
1771 | oneway: true | 1789 | oneway: true |
1790 | bypass_target_door: true | ||
1772 | } | 1791 | } |
1773 | connections { | 1792 | connections { |
1774 | from { | 1793 | from { |
1775 | port { | 1794 | port { |
1776 | map: "the_bearer" | 1795 | map: "the_bearer" |
1777 | room: "Back Area" | 1796 | room: "Tree Entrance" |
1778 | name: "TREE" | 1797 | name: "TREE" |
1779 | } | 1798 | } |
1780 | } | 1799 | } |
@@ -1851,7 +1870,6 @@ connections { | |||
1851 | } | 1870 | } |
1852 | } | 1871 | } |
1853 | connections { | 1872 | connections { |
1854 | # Two one-way connections because the door only blocks one direction. | ||
1855 | from { | 1873 | from { |
1856 | port { | 1874 | port { |
1857 | map: "the_great" | 1875 | map: "the_great" |
@@ -1868,6 +1886,7 @@ connections { | |||
1868 | } | 1886 | } |
1869 | } | 1887 | } |
1870 | connections { | 1888 | connections { |
1889 | # Two one-way connections because the door only blocks one direction. | ||
1871 | from { | 1890 | from { |
1872 | port { | 1891 | port { |
1873 | map: "the_unkempt" | 1892 | map: "the_unkempt" |
@@ -1900,6 +1919,7 @@ connections { | |||
1900 | } | 1919 | } |
1901 | } | 1920 | } |
1902 | oneway: true | 1921 | oneway: true |
1922 | bypass_target_door: true | ||
1903 | } | 1923 | } |
1904 | connections { | 1924 | connections { |
1905 | from { | 1925 | from { |
diff --git a/data/maps/the_bearer/connections.txtpb b/data/maps/the_bearer/connections.txtpb index 23410f0..ba14d83 100644 --- a/data/maps/the_bearer/connections.txtpb +++ b/data/maps/the_bearer/connections.txtpb | |||
@@ -263,3 +263,8 @@ connections { | |||
263 | to_room: "Butterfly Room" | 263 | to_room: "Butterfly Room" |
264 | door { name: "Butterfly Entrance" } | 264 | door { name: "Butterfly Entrance" } |
265 | } | 265 | } |
266 | connections { | ||
267 | from_room: "Back Area" | ||
268 | to_room: "Tree Entrance" | ||
269 | door { name: "Control Center Brown Door" } | ||
270 | } | ||
diff --git a/data/maps/the_bearer/rooms/Back Area.txtpb b/data/maps/the_bearer/rooms/Back Area.txtpb index 27e175c..b1860de 100644 --- a/data/maps/the_bearer/rooms/Back Area.txtpb +++ b/data/maps/the_bearer/rooms/Back Area.txtpb | |||
@@ -7,12 +7,6 @@ panels { | |||
7 | symbols: EXAMPLE | 7 | symbols: EXAMPLE |
8 | } | 8 | } |
9 | ports { | 9 | ports { |
10 | name: "TREE" | ||
11 | path: "Components/Warps/worldport3" | ||
12 | orientation: "north" | ||
13 | required_door { name: "Control Center Brown Door" } | ||
14 | } | ||
15 | ports { | ||
16 | name: "DAEDALUS" | 10 | name: "DAEDALUS" |
17 | path: "Components/Warps/worldport2" | 11 | path: "Components/Warps/worldport2" |
18 | orientation: "north" | 12 | orientation: "north" |
diff --git a/data/maps/the_bearer/rooms/Tree Entrance.txtpb b/data/maps/the_bearer/rooms/Tree Entrance.txtpb new file mode 100644 index 0000000..97a07da --- /dev/null +++ b/data/maps/the_bearer/rooms/Tree Entrance.txtpb | |||
@@ -0,0 +1,6 @@ | |||
1 | name: "Tree Entrance" | ||
2 | ports { | ||
3 | name: "TREE" | ||
4 | path: "Components/Warps/worldport3" | ||
5 | orientation: "north" | ||
6 | } | ||
diff --git a/data/maps/the_darkroom/connections.txtpb b/data/maps/the_darkroom/connections.txtpb index 87e9b0e..1b7ad05 100644 --- a/data/maps/the_darkroom/connections.txtpb +++ b/data/maps/the_darkroom/connections.txtpb | |||
@@ -38,3 +38,13 @@ connections { | |||
38 | to_room: "Cyan Hallway" | 38 | to_room: "Cyan Hallway" |
39 | door { name: "Colorful Entrance" } | 39 | door { name: "Colorful Entrance" } |
40 | } | 40 | } |
41 | connections { | ||
42 | from_room: "Second Room" | ||
43 | to_room: "Congruent Entrance" | ||
44 | door { name: "Congruent Entrance" } | ||
45 | } | ||
46 | connections { | ||
47 | from_room: "First Room" | ||
48 | to_room: "Double Sided Entrance" | ||
49 | door { name: "Double Sided Entrance" } | ||
50 | } | ||
diff --git a/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb b/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb new file mode 100644 index 0000000..7ea1286 --- /dev/null +++ b/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Congruent Entrance" | ||
2 | panel_display_name: "Second Room" | ||
3 | ports { | ||
4 | name: "CONGRUENT" | ||
5 | path: "Components/Warps/worldport7" | ||
6 | orientation: "east" | ||
7 | } | ||
diff --git a/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb b/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb new file mode 100644 index 0000000..9d25108 --- /dev/null +++ b/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Double Sided Entrance" | ||
2 | panel_display_name: "First Room" | ||
3 | ports { | ||
4 | name: "DOUBLESIDED" | ||
5 | path: "Components/Warps/worldport6" | ||
6 | orientation: "east" | ||
7 | } | ||
diff --git a/data/maps/the_darkroom/rooms/First Room.txtpb b/data/maps/the_darkroom/rooms/First Room.txtpb index 4e656bf..c635757 100644 --- a/data/maps/the_darkroom/rooms/First Room.txtpb +++ b/data/maps/the_darkroom/rooms/First Room.txtpb | |||
@@ -42,9 +42,3 @@ ports { | |||
42 | orientation: "north" | 42 | orientation: "north" |
43 | required_door { name: "Second Room Entrance" } | 43 | required_door { name: "Second Room Entrance" } |
44 | } | 44 | } |
45 | ports { | ||
46 | name: "DOUBLESIDED" | ||
47 | path: "Components/Warps/worldport6" | ||
48 | orientation: "east" | ||
49 | required_door { name: "Double Sided Entrance" } | ||
50 | } | ||
diff --git a/data/maps/the_darkroom/rooms/Second Room.txtpb b/data/maps/the_darkroom/rooms/Second Room.txtpb index baeea12..a3964ea 100644 --- a/data/maps/the_darkroom/rooms/Second Room.txtpb +++ b/data/maps/the_darkroom/rooms/Second Room.txtpb | |||
@@ -47,9 +47,3 @@ ports { | |||
47 | orientation: "north" | 47 | orientation: "north" |
48 | required_door { name: "Third Room Entrance" } | 48 | required_door { name: "Third Room Entrance" } |
49 | } | 49 | } |
50 | ports { | ||
51 | name: "CONGRUENT" | ||
52 | path: "Components/Warps/worldport7" | ||
53 | orientation: "east" | ||
54 | required_door { name: "Congruent Entrance" } | ||
55 | } | ||
diff --git a/data/maps/the_entry/connections.txtpb b/data/maps/the_entry/connections.txtpb index a2e325a..9813f85 100644 --- a/data/maps/the_entry/connections.txtpb +++ b/data/maps/the_entry/connections.txtpb | |||
@@ -199,3 +199,18 @@ connections { | |||
199 | to_room: "White Hallway To Daedalus" | 199 | to_room: "White Hallway To Daedalus" |
200 | door { name: "Control Center White Door" } | 200 | door { name: "Control Center White Door" } |
201 | } | 201 | } |
202 | connections { | ||
203 | from_room: "Flipped Second Room" | ||
204 | to_room: "Four Rooms Entrance" | ||
205 | door { name: "Flipped Second Room Right Door" } | ||
206 | } | ||
207 | connections { | ||
208 | from_room: "Link Area" | ||
209 | to_room: "Liberated Entrance" | ||
210 | door { name: "Liberated Entrance" } | ||
211 | } | ||
212 | connections { | ||
213 | from_room: "Link Area" | ||
214 | to_room: "Literate Entrance" | ||
215 | door { name: "Literate Entrance" } | ||
216 | } | ||
diff --git a/data/maps/the_entry/rooms/Flipped Second Room.txtpb b/data/maps/the_entry/rooms/Flipped Second Room.txtpb index 5841ca1..0d518bb 100644 --- a/data/maps/the_entry/rooms/Flipped Second Room.txtpb +++ b/data/maps/the_entry/rooms/Flipped Second Room.txtpb | |||
@@ -21,10 +21,3 @@ paintings { | |||
21 | gravity: Y_PLUS | 21 | gravity: Y_PLUS |
22 | display_name: "Eye Painting" | 22 | display_name: "Eye Painting" |
23 | } | 23 | } |
24 | ports { | ||
25 | name: "FOUR" | ||
26 | path: "Components/Warps/worldport9" | ||
27 | orientation: "south" | ||
28 | gravity: Y_PLUS | ||
29 | required_door { name: "Flipped Second Room Right Door" } | ||
30 | } \ No newline at end of file | ||
diff --git a/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb b/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb new file mode 100644 index 0000000..689d23e --- /dev/null +++ b/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Four Rooms Entrance" | ||
2 | ports { | ||
3 | name: "FOUR" | ||
4 | path: "Components/Warps/worldport9" | ||
5 | orientation: "south" | ||
6 | gravity: Y_PLUS | ||
7 | } | ||
diff --git a/data/maps/the_entry/rooms/Liberated Entrance.txtpb b/data/maps/the_entry/rooms/Liberated Entrance.txtpb new file mode 100644 index 0000000..f0176a0 --- /dev/null +++ b/data/maps/the_entry/rooms/Liberated Entrance.txtpb | |||
@@ -0,0 +1,6 @@ | |||
1 | name: "Liberated Entrance" | ||
2 | ports { | ||
3 | name: "BLUE" | ||
4 | path: "worldport8" | ||
5 | orientation: "west" | ||
6 | } | ||
diff --git a/data/maps/the_entry/rooms/Link Area.txtpb b/data/maps/the_entry/rooms/Link Area.txtpb index 689f57a..5b68279 100644 --- a/data/maps/the_entry/rooms/Link Area.txtpb +++ b/data/maps/the_entry/rooms/Link Area.txtpb | |||
@@ -26,15 +26,3 @@ paintings { | |||
26 | orientation: "south" | 26 | orientation: "south" |
27 | display_name: "Center Painting" | 27 | display_name: "Center Painting" |
28 | } | 28 | } |
29 | ports { | ||
30 | name: "BLUE" | ||
31 | path: "worldport8" | ||
32 | orientation: "west" | ||
33 | required_door { name: "Liberated Entrance" } | ||
34 | } | ||
35 | ports { | ||
36 | name: "BROWN" | ||
37 | path: "worldport9" | ||
38 | orientation: "east" | ||
39 | required_door { name: "Literate Entrance" } | ||
40 | } \ No newline at end of file | ||
diff --git a/data/maps/the_entry/rooms/Literate Entrance.txtpb b/data/maps/the_entry/rooms/Literate Entrance.txtpb new file mode 100644 index 0000000..4ec402f --- /dev/null +++ b/data/maps/the_entry/rooms/Literate Entrance.txtpb | |||
@@ -0,0 +1,6 @@ | |||
1 | name: "Literate Entrance" | ||
2 | ports { | ||
3 | name: "BROWN" | ||
4 | path: "worldport9" | ||
5 | orientation: "east" | ||
6 | } | ||
diff --git a/proto/human.proto b/proto/human.proto index e5335e7..615ac86 100644 --- a/proto/human.proto +++ b/proto/human.proto | |||
@@ -66,6 +66,10 @@ message HumanConnection { | |||
66 | // If true, this connection will only be logically allowed if the Daedalus | 66 | // If true, this connection will only be logically allowed if the Daedalus |
67 | // Roof Access option is enabled. | 67 | // Roof Access option is enabled. |
68 | optional bool roof_access = 7; | 68 | optional bool roof_access = 7; |
69 | |||
70 | // This means that the connection intentionally skips the target object's | ||
71 | // required door. | ||
72 | optional bool bypass_target_door = 8; | ||
69 | } | 73 | } |
70 | 74 | ||
71 | message HumanConnections { | 75 | message HumanConnections { |
diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 561225e..2c978bf 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp | |||
@@ -394,7 +394,9 @@ class HumanProcessor { | |||
394 | } | 394 | } |
395 | } else if (human_connection.has_from()) { | 395 | } else if (human_connection.has_from()) { |
396 | ProcessSingleConnection(human_connection, human_connection.from(), | 396 | ProcessSingleConnection(human_connection, human_connection.from(), |
397 | current_map_name); | 397 | current_map_name, |
398 | /*is_target=*/!human_connection.oneway() && | ||
399 | !human_connection.bypass_target_door()); | ||
398 | } | 400 | } |
399 | 401 | ||
400 | if (human_connection.has_to_room()) { | 402 | if (human_connection.has_to_room()) { |
@@ -410,8 +412,9 @@ class HumanProcessor { | |||
410 | std::cout << "A global connection used to_room." << std::endl; | 412 | std::cout << "A global connection used to_room." << std::endl; |
411 | } | 413 | } |
412 | } else if (human_connection.has_to()) { | 414 | } else if (human_connection.has_to()) { |
413 | ProcessSingleConnection(human_connection, human_connection.to(), | 415 | ProcessSingleConnection( |
414 | current_map_name); | 416 | human_connection, human_connection.to(), current_map_name, |
417 | /*is_target=*/!human_connection.bypass_target_door()); | ||
415 | } | 418 | } |
416 | 419 | ||
417 | if (human_connection.has_door()) { | 420 | if (human_connection.has_door()) { |
@@ -432,7 +435,7 @@ class HumanProcessor { | |||
432 | void ProcessSingleConnection( | 435 | void ProcessSingleConnection( |
433 | const HumanConnection& human_connection, | 436 | const HumanConnection& human_connection, |
434 | const HumanConnection::Endpoint& endpoint, | 437 | const HumanConnection::Endpoint& endpoint, |
435 | const std::optional<std::string>& current_map_name) { | 438 | const std::optional<std::string>& current_map_name, bool is_target) { |
436 | if (endpoint.has_room()) { | 439 | if (endpoint.has_room()) { |
437 | auto room_identifier = | 440 | auto room_identifier = |
438 | GetCompleteRoomIdentifier(endpoint.room(), current_map_name); | 441 | GetCompleteRoomIdentifier(endpoint.room(), current_map_name); |
@@ -451,6 +454,11 @@ class HumanProcessor { | |||
451 | if (painting_identifier) { | 454 | if (painting_identifier) { |
452 | PaintingInfo& painting_info = info_.paintings[*painting_identifier]; | 455 | PaintingInfo& painting_info = info_.paintings[*painting_identifier]; |
453 | painting_info.connections_referenced_by.push_back(human_connection); | 456 | painting_info.connections_referenced_by.push_back(human_connection); |
457 | |||
458 | if (is_target) { | ||
459 | painting_info.target_connections_referenced_by.push_back( | ||
460 | human_connection); | ||
461 | } | ||
454 | } else { | 462 | } else { |
455 | // Not sure where else to store this right now. | 463 | // Not sure where else to store this right now. |
456 | std::cout | 464 | std::cout |
@@ -463,6 +471,11 @@ class HumanProcessor { | |||
463 | if (port_identifier) { | 471 | if (port_identifier) { |
464 | PortInfo& port_info = info_.ports[*port_identifier]; | 472 | PortInfo& port_info = info_.ports[*port_identifier]; |
465 | port_info.connections_referenced_by.push_back(human_connection); | 473 | port_info.connections_referenced_by.push_back(human_connection); |
474 | |||
475 | if (is_target) { | ||
476 | port_info.target_connections_referenced_by.push_back( | ||
477 | human_connection); | ||
478 | } | ||
466 | } else { | 479 | } else { |
467 | // Not sure where else to store this right now. | 480 | // Not sure where else to store this right now. |
468 | std::cout | 481 | std::cout |
@@ -480,6 +493,11 @@ class HumanProcessor { | |||
480 | panel_info.proxies[endpoint.panel().answer()] | 493 | panel_info.proxies[endpoint.panel().answer()] |
481 | .connections_referenced_by.push_back(human_connection); | 494 | .connections_referenced_by.push_back(human_connection); |
482 | } | 495 | } |
496 | |||
497 | if (is_target) { | ||
498 | panel_info.target_connections_referenced_by.push_back( | ||
499 | human_connection); | ||
500 | } | ||
483 | } | 501 | } |
484 | } | 502 | } |
485 | } | 503 | } |
diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 17ed33a..d1d45f2 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h | |||
@@ -56,12 +56,14 @@ struct PortInfo { | |||
56 | std::vector<HumanPort> definitions; | 56 | std::vector<HumanPort> definitions; |
57 | 57 | ||
58 | std::vector<HumanConnection> connections_referenced_by; | 58 | std::vector<HumanConnection> connections_referenced_by; |
59 | std::vector<HumanConnection> target_connections_referenced_by; | ||
59 | }; | 60 | }; |
60 | 61 | ||
61 | struct PaintingInfo { | 62 | struct PaintingInfo { |
62 | std::vector<HumanPainting> definitions; | 63 | std::vector<HumanPainting> definitions; |
63 | 64 | ||
64 | std::vector<HumanConnection> connections_referenced_by; | 65 | std::vector<HumanConnection> connections_referenced_by; |
66 | std::vector<HumanConnection> target_connections_referenced_by; | ||
65 | std::vector<DoorIdentifier> doors_referenced_by; | 67 | std::vector<DoorIdentifier> doors_referenced_by; |
66 | }; | 68 | }; |
67 | 69 | ||
@@ -79,6 +81,7 @@ struct PanelInfo { | |||
79 | std::string map_area_name; | 81 | std::string map_area_name; |
80 | 82 | ||
81 | std::vector<HumanConnection> connections_referenced_by; | 83 | std::vector<HumanConnection> connections_referenced_by; |
84 | std::vector<HumanConnection> target_connections_referenced_by; | ||
82 | std::vector<DoorIdentifier> doors_referenced_by; | 85 | std::vector<DoorIdentifier> doors_referenced_by; |
83 | 86 | ||
84 | std::map<std::string, ProxyInfo> proxies; | 87 | std::map<std::string, ProxyInfo> proxies; |
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index 4149caa..e4c6324 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp | |||
@@ -256,6 +256,22 @@ class Validator { | |||
256 | std::cout << "Port " << port_identifier.ShortDebugString() | 256 | std::cout << "Port " << port_identifier.ShortDebugString() |
257 | << " was defined multiple times." << std::endl; | 257 | << " was defined multiple times." << std::endl; |
258 | } | 258 | } |
259 | |||
260 | if (!port_info.target_connections_referenced_by.empty()) { | ||
261 | for (const HumanPort& port : port_info.definitions) { | ||
262 | if (port.has_required_door()) { | ||
263 | std::cout << "Port " << port_identifier.ShortDebugString() | ||
264 | << " has a required door but is the target of a connection:" | ||
265 | << std::endl; | ||
266 | |||
267 | for (const HumanConnection& connection : | ||
268 | port_info.target_connections_referenced_by) { | ||
269 | std::cout << " CONNECTION " << connection.ShortDebugString() | ||
270 | << std::endl; | ||
271 | } | ||
272 | } | ||
273 | } | ||
274 | } | ||
259 | } | 275 | } |
260 | 276 | ||
261 | void ValidatePainting(const PaintingIdentifier& painting_identifier, | 277 | void ValidatePainting(const PaintingIdentifier& painting_identifier, |
@@ -279,6 +295,22 @@ class Validator { | |||
279 | std::cout << "Painting " << painting_identifier.ShortDebugString() | 295 | std::cout << "Painting " << painting_identifier.ShortDebugString() |
280 | << " was defined multiple times." << std::endl; | 296 | << " was defined multiple times." << std::endl; |
281 | } | 297 | } |
298 | |||
299 | if (!painting_info.target_connections_referenced_by.empty()) { | ||
300 | for (const HumanPainting& painting : painting_info.definitions) { | ||
301 | if (painting.has_required_door()) { | ||
302 | std::cout << "Painting " << painting_identifier.ShortDebugString() | ||
303 | << " has a required door but is the target of a connection:" | ||
304 | << std::endl; | ||
305 | |||
306 | for (const HumanConnection& connection : | ||
307 | painting_info.target_connections_referenced_by) { | ||
308 | std::cout << " CONNECTION " << connection.ShortDebugString() | ||
309 | << std::endl; | ||
310 | } | ||
311 | } | ||
312 | } | ||
313 | } | ||
282 | } | 314 | } |
283 | 315 | ||
284 | void ValidatePanel(const PanelIdentifier& panel_identifier, | 316 | void ValidatePanel(const PanelIdentifier& panel_identifier, |
@@ -340,6 +372,22 @@ class Validator { | |||
340 | std::cout << "Panel " << panel_identifier.ShortDebugString() | 372 | std::cout << "Panel " << panel_identifier.ShortDebugString() |
341 | << " is missing an AP ID." << std::endl; | 373 | << " is missing an AP ID." << std::endl; |
342 | } | 374 | } |
375 | |||
376 | if (!panel_info.target_connections_referenced_by.empty()) { | ||
377 | for (const HumanPanel& panel : panel_info.definitions) { | ||
378 | if (panel.has_required_door()) { | ||
379 | std::cout << "Panel " << panel_identifier.ShortDebugString() | ||
380 | << " has a required door but is the target of a connection:" | ||
381 | << std::endl; | ||
382 | |||
383 | for (const HumanConnection& connection : | ||
384 | panel_info.target_connections_referenced_by) { | ||
385 | std::cout << " CONNECTION " << connection.ShortDebugString() | ||
386 | << std::endl; | ||
387 | } | ||
388 | } | ||
389 | } | ||
390 | } | ||
343 | } | 391 | } |
344 | 392 | ||
345 | void ValidateKeyholder(const KeyholderIdentifier& keyholder_identifier, | 393 | void ValidateKeyholder(const KeyholderIdentifier& keyholder_identifier, |