mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-22 16:31:33 +00:00
5b2b149b40
Improved UDBScript to version 5: - Added Plane class - Added BlockMap, BlockEntry, and BlackMapQueryResult classes - Sector class - Added getLabelPositions method to get the position of sector labels (where tags, effects etc. are displayed) - Added support for JavaScript BigInt for UDMF fields. This means it's not necessary anymore to use UniValue to assign integers to new UDMF fields. Instead it can be done like this: sector.fields.my_int_field = 1n; - Added type information file (udbscript.d.ts)
93 lines
No EOL
2.7 KiB
JavaScript
93 lines
No EOL
2.7 KiB
JavaScript
/// <reference path="../../../udbscript.d.ts" />
|
|
|
|
// 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();
|
|
}); |