60 lines
1.5 KiB
Ucode
60 lines
1.5 KiB
Ucode
//=============================================================================
|
|
// VolumetricBuilder: Builds a volumetric brush (criss-crossed sheets).
|
|
//=============================================================================
|
|
class VolumetricBuilder
|
|
extends BrushBuilder;
|
|
|
|
var() float Height, Radius;
|
|
var() int NumSheets;
|
|
var() name GroupName;
|
|
|
|
function BuildVolumetric( int Direction, int NumSheets, float Height, float Radius )
|
|
{
|
|
local int n,x,y;
|
|
local rotator RotStep;
|
|
local vector vtx, NewVtx;
|
|
|
|
n = GetVertexCount();
|
|
RotStep.Yaw = 65536.0f / (NumSheets * 2);
|
|
|
|
// Vertices.
|
|
vtx.x = Radius;
|
|
vtx.z = Height / 2;
|
|
for( x = 0 ; x < (NumSheets * 2) ; x++ )
|
|
{
|
|
NewVtx = vtx >> (RotStep * x);
|
|
Vertex3f( NewVtx.x, NewVtx.y, NewVtx.z );
|
|
Vertex3f( NewVtx.x, NewVtx.y, NewVtx.z - Height );
|
|
}
|
|
|
|
// Polys.
|
|
for( x = 0 ; x < NumSheets ; x++ )
|
|
{
|
|
y = (x*2) + 1;
|
|
if( y >= (NumSheets * 2) ) y -= (NumSheets * 2);
|
|
Poly4i( Direction, n+(x*2), n+y, n+y+(NumSheets*2), n+(x*2)+(NumSheets*2), 'Sheets', 0x00000108); // PF_TwoSided|PF_NotSolid.
|
|
}
|
|
}
|
|
|
|
function bool Build()
|
|
{
|
|
if( NumSheets<2 )
|
|
return BadParameters();
|
|
if( Height<=0 || Radius<=0 )
|
|
return BadParameters();
|
|
|
|
BeginBrush( true, GroupName );
|
|
BuildVolumetric( +1, NumSheets, Height, Radius );
|
|
return EndBrush();
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
Height=128
|
|
Radius=64
|
|
NumSheets=2
|
|
GroupName=Volumetric
|
|
BitmapFilename="BBVolumetric"
|
|
ToolTip="Volumetric (Torches, Chains, etc)"
|
|
}
|