00001 //=============================================================================
00002 // LinearStairBuilder: Builds a Linear Staircase.
00003 //=============================================================================
00004 class LinearStairBuilder
00005 extends BrushBuilder;
00006
00007 var() int StepLength, StepHeight, StepWidth, NumSteps, AddToFirstStep;
00008 var() name GroupName;
00009
00010 event bool Build()
00011 {
00012 local int i, LastIdx, CurrentX, CurrentY, CurrentZ, Adjustment;
00013
00014 // Check for bad input.
00015 if( StepLength<=0 || StepHeight<=0 || StepWidth<=0 )
00016 return BadParameters();
00017 if( Numsteps<=1 || Numsteps>45 )
00018 return BadParameters("NumSteps must be greater than 1 and less than 45.");
00019
00020 //
00021 // Build the brush.
00022 //
00023 BeginBrush( false, GroupName );
00024
00025 CurrentX = 0;
00026 CurrentY = 0;
00027 CurrentZ = 0;
00028
00029 LastIdx = GetVertexCount();
00030
00031 // Bottom poly.
00032 Vertex3f( 0, 0, -StepHeight );
00033 Vertex3f( 0, StepWidth, -StepHeight );
00034 Vertex3f( StepLength * NumSteps, StepWidth, -StepHeight );
00035 Vertex3f( StepLength * NumSteps, 0, -StepHeight );
00036 Poly4i(1, 0, 1, 2, 3, 'Base');
00037 LastIdx += 4;
00038
00039 // Back poly.
00040 Vertex3f( StepLength * NumSteps, StepWidth, -StepHeight );
00041 Vertex3f( StepLength * NumSteps, StepWidth, (StepHeight * (NumSteps - 1)) + AddToFirstStep );
00042 Vertex3f( StepLength * NumSteps, 0, (StepHeight * (NumSteps - 1)) + AddToFirstStep );
00043 Vertex3f( StepLength * NumSteps, 0, -StepHeight );
00044 Poly4i(1, 4, 5, 6, 7, 'Back');
00045 LastIdx += 4;
00046
00047 // Tops of steps.
00048 for( i = 0 ; i < Numsteps ; i++ )
00049 {
00050 CurrentX = (i * StepLength);
00051 CurrentZ = (i * StepHeight) + AddToFirstStep;
00052
00053 // Top of the step
00054 Vertex3f( CurrentX, CurrentY, CurrentZ );
00055 Vertex3f( CurrentX, CurrentY + StepWidth, CurrentZ );
00056 Vertex3f( CurrentX + StepLength, CurrentY + StepWidth, CurrentZ );
00057 Vertex3f( CurrentX + StepLength, CurrentY, CurrentZ );
00058
00059 Poly4i(1,
00060 LastIdx+(i*4)+3,
00061 LastIdx+(i*4)+2,
00062 LastIdx+(i*4)+1,
00063 LastIdx+(i*4), 'Step');
00064 }
00065 LastIdx += (NumSteps*4);
00066
00067 // Fronts of steps.
00068 for( i = 0 ; i < Numsteps ; i++ )
00069 {
00070 CurrentX = (i * StepLength);
00071 CurrentZ = (i * StepHeight) + AddToFirstStep;
00072 if( i == 0 )
00073 Adjustment = AddToFirstStep;
00074 else
00075 Adjustment = 0;
00076
00077 // Top of the step
00078 Vertex3f( CurrentX, CurrentY, CurrentZ );
00079 Vertex3f( CurrentX, CurrentY, CurrentZ - StepHeight - Adjustment );
00080 Vertex3f( CurrentX, CurrentY + StepWidth, CurrentZ - StepHeight - Adjustment );
00081 Vertex3f( CurrentX, CurrentY + StepWidth, CurrentZ );
00082
00083 Poly4i(1,
00084 LastIdx+(i*12)+3,
00085 LastIdx+(i*12)+2,
00086 LastIdx+(i*12)+1,
00087 LastIdx+(i*12), 'Rise');
00088
00089 // Sides of the step
00090 Vertex3f( CurrentX, CurrentY, CurrentZ );
00091 Vertex3f( CurrentX, CurrentY, CurrentZ - StepHeight - Adjustment );
00092 Vertex3f( CurrentX + (StepLength*(Numsteps-i)), CurrentY, CurrentZ - StepHeight - Adjustment );
00093 Vertex3f( CurrentX + (StepLength*(Numsteps-i)), CurrentY, CurrentZ );
00094
00095 Poly4i(1,
00096 LastIdx+(i*12)+4,
00097 LastIdx+(i*12)+5,
00098 LastIdx+(i*12)+6,
00099 LastIdx+(i*12)+7, 'Side');
00100
00101 Vertex3f( CurrentX, CurrentY + StepWidth, CurrentZ );
00102 Vertex3f( CurrentX, CurrentY + StepWidth, CurrentZ - StepHeight - Adjustment );
00103 Vertex3f( CurrentX + (StepLength*(Numsteps-i)), CurrentY + StepWidth, CurrentZ - StepHeight - Adjustment );
00104 Vertex3f( CurrentX + (StepLength*(Numsteps-i)), CurrentY + StepWidth, CurrentZ );
00105
00106 Poly4i(1,
00107 LastIdx+(i*12)+11,
00108 LastIdx+(i*12)+10,
00109 LastIdx+(i*12)+9,
00110 LastIdx+(i*12)+8, 'Side');
00111 }
00112
00113 return EndBrush();
00114 }
00115
00116 defaultproperties
00117 {
00118 StepLength=32
00119 StepHeight=16
00120 StepWidth=256
00121 NumSteps=8
00122 GroupName=LinearStair
00123 BitmapFilename="BBLinearStair"
00124 ToolTip="Linear Staircase"
00125 }
|