# Setback Tower #####
lowHeight = 50% : 0.3 else: 0.7 // switching between these two values creates visually appealing setbacks
const offset = rand(0.05,0.1)
SetbackTower -->
case scope.sx < 20 || scope.sz < 20:
LShape(highriseBuildingHeight*0.3)
case scope.sx < 30:
shapeO(scope.sz*0.1,0,scope.sz*0.1,0){ remainder: extrude(buildingHeight*HeightFactor*rand(0.9,1)) RecursiveSetbacks }
shapeO(0,scope.sx*0.21,0,scope.sx*0.21){ remainder: extrude(buildingHeight*HeightFactor) RecursiveSetbacks }
case p(0.5):
shapeO(scope.sz*0.15,0,scope.sz*0.15,0){ remainder: extrude(buildingHeight*HeightFactor*rand(0.9,1)) RecursiveSetbacks }
shapeO(0,scope.sx*0.21,0,scope.sx*0.21){ remainder: extrude(buildingHeight*HeightFactor) RecursiveSetbacks }
else:
shapeO(scope.sz*0.21,0,scope.sz*0.21,0){ remainder: extrude(buildingHeight*HeightFactor) RecursiveSetbacks }
shapeO(0,scope.sx*0.1,0,scope.sx*0.1){ remainder: extrude(buildingHeight*HeightFactor*rand(0.9,1)) RecursiveSetbacks }
RecursiveSetbacks -->
case scope.sy > 10 && scope.sx > 10 && scope.sz > 10:
split(y){ 'lowHeight : Stories comp(f){top: Roof("flat") } | ~1: RecursiveSetbacksCall(scope.sy) }
else:
s('1,5,'1)
Stories comp(f){top: Roof("rooffloor") }
RecursiveSetbacksCall(h) -->
t(0,-h,0)
comp(f){top: alignScopeToAxes(y)
shapeO(scope.sz*offset,scope.sx*offset,scope.sz*offset,scope.sx*offset)
{ remainder: extrude(h) RecursiveSetbacks } }