mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-12-02 08:32:55 +00:00
91 lines
No EOL
2.7 KiB
JavaScript
91 lines
No EOL
2.7 KiB
JavaScript
// Inspired by ribbiks's DBX Lua script: https://github.com/ribbiks/doom_lua/
|
|
|
|
`#version 4`;
|
|
|
|
`#name Flank Linedefs`;
|
|
|
|
`#description Flanks the selected linedefs with newly created linedefs at both ends. Texture changes are only applied to 1-sided lines`;
|
|
|
|
`#scriptoptions
|
|
|
|
width
|
|
{
|
|
description = "Width of the flanks";
|
|
type = 0;
|
|
default = 16;
|
|
}
|
|
|
|
texture
|
|
{
|
|
description = "Texture";
|
|
type = 6;
|
|
}
|
|
|
|
offset
|
|
{
|
|
description = "Texture offset";
|
|
type = 0;
|
|
default = 0;
|
|
}
|
|
|
|
fixoriginaloffset
|
|
{
|
|
description = "Fix original offset";
|
|
type = 3;
|
|
default = true;
|
|
}
|
|
`;
|
|
|
|
let lines = UDB.Map.getSelectedOrHighlightedLinedefs();
|
|
|
|
if(lines.length == 0)
|
|
die('No linedefs selcted or highlighted');
|
|
|
|
lines.forEach(ld => {
|
|
// The line has to be long enough the flank it
|
|
if(ld.length < UDB.ScriptOptions.width * 2)
|
|
die(ld + ' is too short to flank');
|
|
|
|
// Compute how far along the line the flank with is
|
|
let length = 1.0 / ld.length * UDB.ScriptOptions.width;
|
|
|
|
// Remember the original texture offset
|
|
let origoffset = ld.front.offsetX;
|
|
|
|
// Collect the original start and end vertices of the line
|
|
let vertices = [ ld.start, ld.end ];
|
|
|
|
// Get the actual coordinates of the vertices that have to be created for the flanks
|
|
let v1 = ld.line.getCoordinatesAt(1.0 - length);
|
|
let v2 = ld.line.getCoordinatesAt(length);
|
|
|
|
// Mark the line. We'll loop through all marked lines later
|
|
ld.marked = true;
|
|
|
|
// Split the line at both vertex positions. This marks the new lines. We're doing this
|
|
// from the end of the line to the beginning, since when splitting the new line will always
|
|
// go from the new vertex to the original end vertex of the line
|
|
ld.split(v1);
|
|
ld.split(v2);
|
|
|
|
// Only do texture stuff to one-sided lines, and if a texture is set
|
|
if(ld.back == null && UDB.ScriptOptions.texture != '')
|
|
{
|
|
// Loop through all marked lines (which is the original line and the newly created flanks)
|
|
UDB.Map.getMarkedLinedefs().forEach(ld => {
|
|
// Only apply the flank texture if the current linedef has one of the original vertices
|
|
if(vertices.includes(ld.start) || vertices.includes(ld.end))
|
|
{
|
|
ld.front.middleTexture = UDB.ScriptOptions.texture;
|
|
ld.front.offsetX = UDB.ScriptOptions.offset;
|
|
}
|
|
else if(UDB.ScriptOptions.fixoriginaloffset) // Fix original offset, if desired
|
|
{
|
|
ld.front.offsetX = origoffset + UDB.ScriptOptions.width;
|
|
}
|
|
});
|
|
}
|
|
|
|
// Clear all marks, since we'll need the correct marks in the next loop iteration
|
|
UDB.Map.clearAllMarks();
|
|
}); |