Gah - a solution with more questions. – EntropicLqd
Legacy:Zxanphorian Brushbuilders
From Unreal Wiki, The Unreal Engine Documentation Site
Contents
Cone Builder [[Image:Legacy_BBZxanCone.png|]]
-
//=============================================================================
-
// ZxanphorianConeBuilder.
-
// This is my FIRST brush builder for UnrealEd!
-
// What it does is build a better cone than the one that Epic made.
-
//
-
//_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-_=_-
-
//
-
// version 1.2
-
// tornado.f5@worldnet.att.net
-
// (c) 2002 Nick "Zxanphorian" Parker
-
//
-
//=============================================================================
-
class ZxanphorianConeBuilder extends ZxanphorianBuilders config(ZxanphorianbrushBuilders);
-
-
-
// _--__--__--__--_STRUCTS_--__--__--__--_
-
-
struct TopTipLocationStruct
-
{
-
-
var() config float Height, CapLocationX, CapLocationY;
-
-
};
-
struct TipLocationsStruct
-
{
-
var() config TopTipLocationStruct TopTipLocation;
-
var() config TopTipLocationStruct BottomTipLocation;
-
};
-
var() config TipLocationsStruct TipLocations;
-
-
-
-
struct DimensionsStruct
-
{
-
var() config bool UseRadius;
-
var() config float Radius, Length, Width, OffsetX, OffsetY, OffsetZ;
-
};
-
struct DimensionStruct
-
{
-
var() config DimensionsStruct OuterDimensions;
-
var() config DimensionsStruct InnerDimensions;
-
};
-
var() config DimensionStruct Dimensions;
-
-
-
-
-
struct RotationStruct
-
{
-
var() config float RotationX, RotationY;
-
};
-
struct RotationsStruct {
-
var() config RotationStruct TopRotation;
-
var() config RotationStruct BottomRotation;
-
};
-
var() config RotationsStruct Rotations;
-
-
-
struct RandomiserTBStruct
-
{
-
var() float Height[2], Radius[2], CapLocationX[2], CapLocationY[2];
-
};
-
struct RandomiserMStruct
-
{
-
var() int Sides[2];
-
};
-
struct RandomisersStruct
-
{
-
var() RandomiserTBStruct RandomiserTop;
-
var() RandomiserTBStruct RandomiserBottom;
-
var() RandomiserMStruct RandomiserMisc;
-
};
-
var() RandomisersStruct Randomisers;
-
-
-
-
// _--__--__--__--_OTHER VARIABLES_--__--__--__--_
-
var() config int Sides;
-
var() config name GroupName;
-
var() config bool HasBottom, MergeCoplanars ;
-
var() export bool SaveConfiguration;
-
-
-
enum PresetsEnum
-
{
-
No_Preset,
-
Randomiser,
-
DefaultBBProperties
-
};
-
var() config PresetsEnum Presets;
-
-
enum HelpEnum
-
{
-
ChooseATopic,
-
TipLocations,
-
Dimensions,
-
Rotations,
-
Randomisers,
-
RegularOptions,
-
Presets
-
};
-
var() config HelpEnum HelpTopics;
-
enum AboutEnum
-
{
-
DisplayOff,
-
DisplayOn,
-
};
-
var() config AboutEnum AboutBrushbuilder;
-
-
var int HB;
-
-
-
function DoPresets()
-
{
-
// _--__--__--__--_PRESETS_--__--__--__--_
-
-
if( Presets == DefaultBBProperties)
-
{
-
TipLocations.TopTipLocation.Height=512.000000;
-
TipLocations.TopTipLocation.CapLocationX=0.000000;
-
TipLocations.TopTipLocation.CapLocationY=0.000000;
-
TipLocations.BottomTipLocation.Height=-512.000000;
-
TipLocations.BottomTipLocation.CapLocationX=0.000000;
-
TipLocations.BottomTipLocation.CapLocationY=0.000000;
-
-
-
Dimensions.OuterDimensions.UseRadius=True;
-
Dimensions.OuterDimensions.Radius=512.000000;
-
Dimensions.OuterDimensions.Length=512.000000;
-
Dimensions.OuterDimensions.Width=512.000000;
-
Dimensions.OuterDimensions.OffsetX=0.000000;
-
Dimensions.OuterDimensions.OffsetY=0.000000;
-
Dimensions.OuterDimensions.OffsetZ=0.000000;
-
Dimensions.InnerDimensions.UseRadius=True;
-
Dimensions.InnerDimensions.Radius=256.000000;
-
Dimensions.InnerDimensions.Length=256.000000;
-
Dimensions.InnerDimensions.Width=256.000000;
-
Dimensions.InnerDimensions.OffsetX=0.000000;
-
Dimensions.InnerDimensions.OffsetY=0.000000;
-
Dimensions.InnerDimensions.OffsetZ=0.000000;
-
-
-
Rotations.TopRotation.RotationX=1.000000;
-
Rotations.TopRotation.RotationY=1.000000;
-
Rotations.BottomRotation.RotationX=1.000000;
-
Rotations.TopRotation.RotationY=1.000000;
-
-
-
Sides=8;
-
GroupName='ZxanCone';
-
HasBottom=False;
-
MergeCoplanars=True;
-
Presets=No_Preset;
-
HelpTopics=ChooseATopic;
-
AboutBrushbuilder=DisplayOff;
-
}
-
-
-
if( Presets == Randomiser)
-
{
-
TipLocations.TopTipLocation.Height = RandRange( Randomisers.RandomiserTop.Height[0], Randomisers.RandomiserTop.Height[1]);
-
TipLocations.BottomTipLocation.Height = RandRange(Randomisers.RandomiserBottom.Height[0], Randomisers.RandomiserBottom.Height[1]);
-
Dimensions.OuterDimensions.Radius = RandRange(Randomisers.RandomiserTop.Radius[0], Randomisers.RandomiserTop.Radius[1] ) ;
-
Dimensions.InnerDimensions.Radius = RandRange(Randomisers.RandomiserBottom.Radius[0], Randomisers.RandomiserBottom.Radius[1]);
-
TipLocations.TopTipLocation.CapLocationX = RandRange(Randomisers.RandomiserTop.CapLocationX[0], Randomisers.RandomiserTop.CapLocationX[1]);
-
TipLocations.TopTipLocation.CapLocationY = RandRange(Randomisers.RandomiserTop.CapLocationY[0], Randomisers.RandomiserTop.CapLocationY[1]);
-
TipLocations.BottomTipLocation.CapLocationX =RandRange(Randomisers.RandomiserBottom.CapLocationX[0], Randomisers.RandomiserBottom.CapLocationX[1]);
-
TipLocations.BottomTipLocation.CapLocationY =RandRange(Randomisers.RandomiserBottom.CapLocationY[0], Randomisers.RandomiserBottom.CapLocationY[1]);
-
Sides = RandRange(Randomisers.RandomiserMisc.Sides[0], Randomisers.RandomiserMisc.Sides[1]);
-
HasBottom = False;
-
-
// How to Choose between the different options
-
HB = RandRange(0, 5000);
-
if( HB >= 2500)
-
HasBottom = True;
-
-
}
-
-
}
-
-
-
-
function BuildCone( int Direction, int Sides, name Item, TipLocationsStruct TipLocations, TopTipLocationStruct TopTipLocation, DimensionStruct Dimensions, DimensionsStruct OuterDimensions, RotationsStruct Rotations, RotationStruct TopRotation)
-
{
-
-
local int n,i,j,q;
-
n = GetVertexCount();
-
-
-
// Vertices.
-
if(Dimensions.OuterDimensions.UseRadius == True)
-
{ for( i=0; i<Sides; i++ )
-
{ Vertex3f( Dimensions.OuterDimensions.OffsetX+Dimensions.OuterDimensions.Radius*sin((2*i+Rotations.BottomRotation.RotationX)*pi/Sides), Dimensions.OuterDimensions.OffsetY+Dimensions.OuterDimensions.Radius*cos((2*i+Rotations.BottomRotation.RotationY)*pi/Sides), Dimensions.OuterDimensions.OffsetZ ); }
-
}
-
else
-
{
-
for( i=0; i<Sides; i++ )
-
{ Vertex3f( Dimensions.OuterDimensions.OffsetX+ Dimensions.OuterDimensions.Width*sin((2*i+Rotations.BottomRotation.RotationX)*pi/Sides), Dimensions.OuterDimensions.OffsetY+Dimensions.OuterDimensions.Length*cos((2*i+Rotations.BottomRotation.RotationY)*pi/Sides), Dimensions.OuterDimensions.OffsetZ );
-
}
-
}
-
Vertex3f( TipLocations.TopTipLocation.CapLocationX, TipLocations.TopTipLocation.CapLocationY, TipLocations.TopTipLocation.Height );
-
-
-
// Polys.
-
for( i=0; i<Sides; i++ )
-
{ Poly3i( Direction, n+i, n+Sides, n+((i+1)%Sides),Item ); }
-
}
-
-
function bool Build()
-
{
-
local int i;
-
-
DoPresets();
-
-
if( Sides<3 )
-
return BadParameters();
-
if( TipLocations.TopTipLocation.Height<=0 || Dimensions.OuterDimensions.Radius<=0 )
-
return BadParameters();
-
if( HasBottom && Dimensions.InnerDimensions.Radius<=0 )
-
return BadParameters();
-
if( HasBottom && TipLocations.BottomTipLocation.Height>TipLocations.TopTipLocation.Height )
-
return BadParameters();
-
if( SaveConfiguration == True)
-
SaveConfiguration = False;
-
SaveConfig();
-
-
-
-
-
-
-
-
// _--__--__--__--_START_--__--__--__--_
-
// _--__--__--__--_START_--__--__--__--_
-
BeginBrush( MergeCoplanars, GroupName );
-
BuildCone( +1, Sides, 'Top', TipLocations, TipLocations.TopTipLocation, Dimensions, Dimensions.OuterDimensions, Rotations, Rotations.TopRotation);
-
if( HasBottom )
-
{
-
BuildCone( -1, Sides, 'Cap', TipLocations, TipLocations.BottomTipLocation, Dimensions, Dimensions.InnerDimensions, Rotations, Rotations.BottomRotation );
-
if( Dimensions.OuterDimensions.Radius==Dimensions.InnerDimensions.Radius ^^ Dimensions.OuterDimensions.Radius!=Dimensions.InnerDimensions.Radius)
-
for( i=0; i<Sides; i++ )
-
Poly4i( 1, i, ((i+1)%Sides), Sides+1+((i+1)%Sides), Sides+1+i, 'Bottom' );
-
}
-
else
-
{
-
PolyBegin( 1, 'Bottom' );
-
for( i=0; i<Sides; i++ )
-
Polyi( i );
-
PolyEnd();
-
}
-
return EndBrush();
-
}
-
-
defaultproperties {
-
BitmapFilename="BBZxanCone"
-
Tooltip="Zxanphorian's Cone Brushbuilder"
-
-
TipLocations=(TopTipLocation=(Height=512.000000,CapLocationX=0.000000,CapLocationY=0.000000),BottomTipLocation=(Height=-512.000000,CapLocationX=0.000000,CapLocationY=0.000000))
-
Dimensions=(OuterDimensions=(UseRadius=True,Radius=512.000000,Length=512.000000,Width=512.000000,OffsetX=0.000000,OffsetY=0.000000,OffsetZ=0.000000),InnerDimensions=(UseRadius=True,Radius=256.000000,Length=256.000000,Width=256.000000,OffsetX=0.000000,OffsetY=0.000000,OffsetZ=0.000000))
-
Rotations=(TopRotation=(RotationX=1.000000,RotationY=1.000000),BottomRotation=(RotationX=1.000000,RotationY=1.000000))
-
Sides=8
-
GroupName=ZxanCone
-
HasBottom=False
-
MergeCoplanars=True
-
Presets=No_Preset
-
HelpTopics=ChooseATopic
-
AboutBrushbuilder=DisplayOff
-
}
Options that I want to implement but don't know how
Dropped Options
Problems
function bool SafePoly4i( int Direction , int p0 , int p1 , int p2 , int p3 , optional name ItemName, optional int PolyFlags ) { if( isCoplanar4v(getVertex(p0),getVertex(p1),getVertex(p2),getVertex(p3)) ) LogPoly4i( Direction , p0 , p1 , p2 , p3 , ItemName, PolyFlags ); else { LogPoly3i( Direction , p0 , p1 , p2 , ItemName, PolyFlags ); LogPoly3i( Direction , p2 , p3 , p0 , ItemName, PolyFlags ); } }
Tarquin: the above function has the right order for 4 vertices whether in one square or two triangles. The safety-checking isn't quite up to scratch, so you can try it as is, but it will probably end up making triangles in cases when it shouldn't. BTW, I've put a link to this page on User Projects instead of RC. I don't think there's that many people who are making brushbuilders, so it's not really top news.