home *** CD-ROM | disk | FTP | other *** search
/ Game Level Design / GLDesign.bin / Software / UnrealEngine2Runtime / UE2Runtime-22262001_Demo.exe / Editor / Classes / ConeBuilder.uc < prev    next >
Text File  |  2003-10-22  |  2KB  |  79 lines

  1. //=============================================================================
  2. // ConeBuilder: Builds a 3D cone brush, compatible with cylinder of same size.
  3. //=============================================================================
  4. class ConeBuilder
  5.     extends BrushBuilder;
  6.  
  7. var() float Height, CapHeight, OuterRadius, InnerRadius;
  8. var() int Sides;
  9. var() name GroupName;
  10. var() bool AlignToSide, Hollow;
  11.  
  12. function BuildCone( int Direction, bool AlignToSide, int Sides, float Height, float Radius, name Item )
  13. {
  14.     local int n,i,Ofs;
  15.     n = GetVertexCount();
  16.     if( AlignToSide )
  17.     {
  18.         Radius /= cos(pi/Sides);
  19.         Ofs = 1;
  20.     }
  21.  
  22.     // Vertices.
  23.     for( i=0; i<Sides; i++ )
  24.         Vertex3f( Radius*sin((2*i+Ofs)*pi/Sides), Radius*cos((2*i+Ofs)*pi/Sides), 0 );
  25.     Vertex3f( 0, 0, Height );
  26.  
  27.     // Polys.
  28.     for( i=0; i<Sides; i++ )
  29.         Poly3i( Direction, n+i, n+Sides, n+((i+1)%Sides), Item );
  30. }
  31.  
  32. function bool Build()
  33. {
  34.     local int i;
  35.  
  36.     if( Sides<3 )
  37.         return BadParameters();
  38.     if( Height<=0 || OuterRadius<=0 )
  39.         return BadParameters();
  40.     if( Hollow && (InnerRadius<=0 || InnerRadius>=OuterRadius) )
  41.         return BadParameters();
  42.     if( Hollow && CapHeight>Height )
  43.         return BadParameters();
  44.     if( Hollow && (CapHeight==Height && InnerRadius==OuterRadius) )
  45.         return BadParameters();
  46.  
  47.     BeginBrush( false, GroupName );
  48.     BuildCone( +1, AlignToSide, Sides, Height, OuterRadius, 'Top' );
  49.     if( Hollow )
  50.     {
  51.         BuildCone( -1, AlignToSide, Sides, CapHeight, InnerRadius, 'Cap' );
  52.         if( OuterRadius!=InnerRadius )
  53.             for( i=0; i<Sides; i++ )
  54.                 Poly4i( 1, i, ((i+1)%Sides), Sides+1+((i+1)%Sides), Sides+1+i, 'Bottom' );
  55.     }
  56.     else
  57.     {
  58.         PolyBegin( 1, 'Bottom' );
  59.         for( i=0; i<Sides; i++ )
  60.             Polyi( i );
  61.         PolyEnd();
  62.     }
  63.     return EndBrush();
  64. }
  65.  
  66. defaultproperties
  67. {
  68.     Height=256
  69.     CapHeight=256
  70.     OuterRadius=512
  71.     InnerRadius=384
  72.     Sides=8
  73.     GroupName=Cone
  74.     AlignToSide=true
  75.     Hollow=false
  76.     BitmapFilename="BBCone"
  77.     ToolTip="Cone"
  78. }
  79.