mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-12-11 12:51:20 +00:00
5eb438e3ba
Added map scripting capabilities to UDB (#656). Documentation at https://biwa.github.io/udbscript-docs/
45 lines
1.5 KiB
JavaScript
45 lines
1.5 KiB
JavaScript
`#name Select Connected Linedefs`;
|
|
|
|
`#description Recursively selects all linedefs that are connected to the currently selected linedef(s).`;
|
|
|
|
let lines = Map.getSelectedOrHighlightedLinedefs();
|
|
|
|
if(lines.length == 0)
|
|
die('You have to select at least one linedef!');
|
|
|
|
let vertices_to_check = [];
|
|
let checked_vertices = [];
|
|
|
|
// Add vertices of the selected linedefs to the list of vertices to check
|
|
lines.forEach(ld => {
|
|
if(!vertices_to_check.includes(ld.start))
|
|
vertices_to_check.push(ld.start);
|
|
|
|
if(!vertices_to_check.includes(ld.end))
|
|
vertices_to_check.push(ld.end);
|
|
});
|
|
|
|
// Go through all vertices
|
|
while(vertices_to_check.length != 0)
|
|
{
|
|
// Get the last vertex in the list
|
|
let v = vertices_to_check.pop();
|
|
|
|
// Add vertex to checked vertices
|
|
checked_vertices.push(v);
|
|
|
|
// Loop through all linedefs that are connected to the vertex
|
|
v.getLinedefs().forEach(ld => {
|
|
ld.selected = true;
|
|
|
|
// Add start vertex of the linedef to the list of vertices to check, but only if
|
|
// it has not been checked before and isn't already in the list of vertices to check.
|
|
// If we don't do that we might loop through vertices indefinitely
|
|
if(!vertices_to_check.includes(ld.start) && !checked_vertices.includes(ld.start))
|
|
vertices_to_check.push(ld.start);
|
|
|
|
// Do the same for the end vertex of the linedef
|
|
if(!vertices_to_check.includes(ld.end) && !checked_vertices.includes(ld.end))
|
|
vertices_to_check.push(ld.end);
|
|
});
|
|
}
|