/** * * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ //============================================================================= // CubeBuilder: Builds a 3D cube brush. //============================================================================= class CubeBuilder extends BrushBuilder native; var() float X ; var() float Y ; var() float Z ; var() float WallThickness; var() name GroupName; var() bool Hollow; var() bool Tessellated; function BuildCube( int Direction, float dx, float dy, float dz, bool _tessellated ) { local int n,i,j,k; n = GetVertexCount(); for( i=-1; i<2; i+=2 ) for( j=-1; j<2; j+=2 ) for( k=-1; k<2; k+=2 ) Vertex3f( i*dx/2, j*dy/2, k*dz/2 ); // If the user wants a Tessellated cube, create the sides out of tris instead of quads. if( _tessellated ) { Poly3i(Direction,n+0,n+1,n+3); Poly3i(Direction,n+0,n+3,n+2); Poly3i(Direction,n+2,n+3,n+7); Poly3i(Direction,n+2,n+7,n+6); Poly3i(Direction,n+6,n+7,n+5); Poly3i(Direction,n+6,n+5,n+4); Poly3i(Direction,n+4,n+5,n+1); Poly3i(Direction,n+4,n+1,n+0); Poly3i(Direction,n+3,n+1,n+5); Poly3i(Direction,n+3,n+5,n+7); Poly3i(Direction,n+0,n+2,n+6); Poly3i(Direction,n+0,n+6,n+4); } else { Poly4i(Direction,n+0,n+1,n+3,n+2); Poly4i(Direction,n+2,n+3,n+7,n+6); Poly4i(Direction,n+6,n+7,n+5,n+4); Poly4i(Direction,n+4,n+5,n+1,n+0); Poly4i(Direction,n+3,n+1,n+5,n+7); Poly4i(Direction,n+0,n+2,n+6,n+4); } } event bool Build() { if( Z<=0 || Y<=0 || X<=0 ) return BadParameters(); if( Hollow && ((Z/2.0)<=WallThickness || (Y/2.0)<=WallThickness || (X/2.0)<=WallThickness) ) return BadParameters(); if( Hollow && Tessellated ) return BadParameters("The 'Tessellated' option can't be specified with the 'Hollow' option."); BeginBrush( false, GroupName ); BuildCube( +1, X, Y, Z, Tessellated ); if( Hollow ) BuildCube( -1, X-WallThickness*2.0, Y-WallThickness*2.0, Z-WallThickness*2.0, Tessellated ); return EndBrush(); } defaultproperties { X=256 Y=256 Z=256 WallThickness=16 GroupName=Cube Hollow=false Tessellated=false BitmapFilename="Btn_Box" ToolTip="BrushBuilderName_Cube" }