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

  1. //=============================================================================
  2. // CurvedStairBuilder: Builds a curved staircase.
  3. //=============================================================================
  4. class CurvedStairBuilder
  5.     extends BrushBuilder;
  6.  
  7. var() int InnerRadius, StepHeight, StepWidth, AngleOfCurve, NumSteps, AddToFirstStep;
  8. var() name GroupName;
  9. var() bool CounterClockwise;
  10.  
  11. function BuildCurvedStair( int Direction )
  12. {
  13.     local rotator RotStep;
  14.     local vector vtx, NewVtx;
  15.     local int x, InnerStart, OuterStart, BottomInnerStart, BottomOuterStart, Adjustment;
  16.  
  17.     RotStep.Yaw = (65536.0f * (AngleOfCurve / 360.0f)) / NumSteps;
  18.  
  19.     if( CounterClockwise )
  20.     {
  21.         RotStep.Yaw *= -1;
  22.         Direction *= -1;
  23.     }
  24.  
  25.     // Generate the inner curve points.
  26.     InnerStart = GetVertexCount();
  27.     vtx.x = InnerRadius;
  28.     for( x = 0 ; x < (NumSteps + 1) ; x++ )
  29.     {
  30.         if( x == 0 )
  31.             Adjustment = AddToFirstStep;
  32.         else
  33.             Adjustment = 0;
  34.                 
  35.         NewVtx = vtx >> (RotStep * x);
  36.  
  37.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z - Adjustment );
  38.         vtx.z += StepHeight;
  39.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z );
  40.     }
  41.  
  42.     // Generate the outer curve points.
  43.     OuterStart = GetVertexCount();
  44.     vtx.x = InnerRadius + StepWidth;
  45.     vtx.z = 0;
  46.     for( x = 0 ; x < (NumSteps + 1) ; x++ )
  47.     {
  48.         if( x == 0 )
  49.             Adjustment = AddToFirstStep;
  50.         else
  51.             Adjustment = 0;
  52.                 
  53.         NewVtx = vtx >> (RotStep * x);
  54.  
  55.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z - Adjustment );
  56.         vtx.z += StepHeight;
  57.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z );
  58.     }
  59.  
  60.     // Generate the bottom inner curve points.
  61.     BottomInnerStart = GetVertexCount();
  62.     vtx.x = InnerRadius;
  63.     vtx.z = 0;
  64.     for( x = 0 ; x < (NumSteps + 1) ; x++ )
  65.     {
  66.         NewVtx = vtx >> (RotStep * x);
  67.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z - AddToFirstStep );
  68.     }
  69.  
  70.     // Generate the bottom outer curve points.
  71.     BottomOuterStart = GetVertexCount();
  72.     vtx.x = InnerRadius + StepWidth;
  73.     for( x = 0 ; x < (NumSteps + 1) ; x++ )
  74.     {
  75.         NewVtx = vtx >> (RotStep * x);
  76.         Vertex3f( NewVtx.x, NewVtx.y, vtx.z - AddToFirstStep );
  77.     }
  78.  
  79.     for( x = 0 ; x < NumSteps ; x++ )
  80.     {
  81.         Poly4i( Direction, InnerStart + (x * 2) + 2, InnerStart + (x * 2) + 1, OuterStart + (x * 2) + 1, OuterStart + (x * 2) + 2, 'steptop' );
  82.         Poly4i( Direction, InnerStart + (x * 2) + 1, InnerStart + (x * 2), OuterStart + (x * 2), OuterStart + (x * 2) + 1, 'stepfront' );
  83.         Poly4i( Direction, BottomInnerStart + x, InnerStart + (x * 2) + 1, InnerStart + (x * 2) + 2, BottomInnerStart + x + 1, 'innercurve' );
  84.         Poly4i( Direction, OuterStart + (x * 2) + 1, BottomOuterStart + x, BottomOuterStart + x + 1, OuterStart + (x * 2) + 2, 'outercurve' );
  85.         Poly4i( Direction, BottomInnerStart + x, BottomInnerStart + x + 1, BottomOuterStart + x + 1, BottomOuterStart + x, 'Bottom' );
  86.     }
  87.  
  88.     // Back panel.
  89.     Poly4i( Direction, BottomInnerStart + NumSteps, InnerStart + (NumSteps * 2), OuterStart + (NumSteps * 2), BottomOuterStart + NumSteps, 'back' );
  90. }
  91.  
  92. function bool Build()
  93. {
  94.     if( AngleOfCurve<1 || AngleOfCurve>360 )
  95.         return BadParameters("Angle is out of range.");
  96.     if( InnerRadius<1 || StepWidth<1 || NumSteps<1 )
  97.         return BadParameters();
  98.  
  99.     BeginBrush( false, GroupName );
  100.     BuildCurvedStair( +1 );
  101.     return EndBrush();
  102. }
  103.  
  104. defaultproperties
  105. {
  106.     InnerRadius=240
  107.     StepHeight=16
  108.     StepWidth=256
  109.     AngleOfCurve=90
  110.     NumSteps=4
  111.     GroupName="CStair"
  112.     CounterClockwise=0
  113.     AddToFirstStep=0
  114.     BitmapFilename="BBCurvedStair"
  115.     ToolTip="Curved Staircase"
  116. }
  117.