--- race_obstacles-jumpspin.py 2005-01-05 19:18:51.386496048 +0200 +++ race_obstacles.py 2005-01-05 19:15:57.816882640 +0200 @@ -239,6 +239,51 @@ return math.sin( p / 10. ) * ( tw - 11. ) / 2. + tw / 2 + math.sin( p / 4. ) * 4 +class EiffelTower( RaceObstacle ) : + name = "EiffelTower" + allowRotation = True + def __init__( self , context ) : + RaceObstacle.__init__( self ) + length = context.level * 8 + 80 + steps = context.level * 2 + stepspacing = 6 # 24 really, it goes around :) + height = steps * stepspacing * 4 #four sides + size = rand( 5 ) + 10 + + self.tracksUnion = RemoveSafetyTrack( x = length , z = length ) + + floormargin = 15 + p1 = Point( - size / 2 - floormargin , 0 , - size / 2 - floormargin ) + p2 = Point( size / 2 + floormargin , - 0.5 , size / 2 + floormargin ) + tower = Box( p1 , p2 ) + + blocksize = 2 + blockheight = 4 + p1 = Point( - blocksize / 2 , 0 , - blocksize / 2 ) + p2 = Point( blocksize / 2 , blockheight , blocksize / 2 ) + b = Box( p1 , p2 ) #sidebox + for i in range( 0 , height , blockheight ) : + dist = ( height * 2 / ( i + height ) - 1 ) * size + tower = tower + b.at( Point( - dist , i , - dist ) ) + tower = tower + b.at( Point( + dist , i , - dist ) ) + tower = tower + b.at( Point( - dist , i , + dist ) ) + tower = tower + b.at( Point( + dist , i , + dist ) ) + + side = 90 + for i in range( stepspacing , height - stepspacing * 4 , stepspacing ) : + dist = ( height * 2 / ( i + height ) - 1 ) * size + p1 = Point( - dist , i , - dist + blocksize / 2 ) + p2 = Point( dist , i + 0.25 , - dist - blocksize / 2 ) + + tower = tower + Box( p1 , p2 ).rotate( side ) + side = ( side + 90 ) % 360 + + self.union.add( tower.rotate( rand( 360 ) ) . at ( Point( 0 , 0 , - length + floormargin + 5 ) ) ) + + + + + class Empty( RaceObstacle ) : name = "Empty" def __init__( self , context ) :