class_name QuarryFabrication extends RefCounted const STEEL := Color("4c5352") const TRIM := Color("9b9d96") static func rod(batch: UrbanMeshBatch, a: Vector3, b: Vector3, radius: float, tint: Color = STEEL) -> void: batch.cylinder((a+b)*0.5, radius, a.distance_to(b), "metal", tint, Quaternion(Vector3.UP,(b-a).normalized()).get_euler()) static func build(arena: RelayArena) -> void: if arena.map_id != "quarry" or DisplayServer.get_name() == "headless": return var parent := Node3D.new() parent.name = "QuarryFabrication" arena.add_child(parent) for origin in arena.building_origins: var batch := UrbanMeshBatch.new() # Roof drainage: open channel, rolled outer lip, brackets and a bent downpipe. for side in [-1.0,1.0]: var z: float = side * 5.76 batch.box(origin+Vector3(0,7.25,z),Vector3(9.25,0.04,0.24),"metal",STEEL) batch.box(origin+Vector3(0,7.34,z+side*0.13),Vector3(9.25,0.2,0.025),"metal",TRIM) rod(batch,origin+Vector3(-4.6,7.43,z+side*0.14),origin+Vector3(4.6,7.43,z+side*0.14),0.018,TRIM) for x in [-4.0,-2.0,0.0,2.0,4.0]: batch.box(origin+Vector3(x,7.2,z),Vector3(0.045,0.055,0.31),"metal",STEEL) var x := 4.3 rod(batch,origin+Vector3(x,0.2,z),origin+Vector3(x,6.8,z),0.066,TRIM) for index in 8: var a := float(index)/8*PI/2 var b := float(index+1)/8*PI/2 rod(batch,origin+Vector3(x,6.8+sin(a)*0.4,z+side*(1-cos(a))*0.2),origin+Vector3(x,6.8+sin(b)*0.4,z+side*(1-cos(b))*0.2),0.066,TRIM) for y in [0.8,2.6,4.5,6.3]: batch.cylinder(origin+Vector3(x,y,z),0.081,0.05,"metal",STEEL) batch.box(origin+Vector3(x,y,z-side*0.065),Vector3(0.22,0.08,0.08),"metal",STEEL) # Fasteners and lap joints on solid piers, clear of the door opening. for pier in [-3.05,3.05]: for height in [0.35,2.75,3.2]: for offset in [-0.65,0.65]: batch.cylinder(origin+Vector3(pier+offset,height,side*5.735),0.028,0.018,"metal",TRIM,Vector3(PI/2,0,0)) # Mechanical roof grille with actual radial supports and fan blades. for x in [0.45,1.55]: var center := origin+Vector3(x,8.785,0.3) for ring in [0.16,0.26,0.36,0.42]: for segment in 32: var a := float(segment)*TAU/32 var b := float(segment+1)*TAU/32 rod(batch,center+Vector3(cos(a)*ring,0,sin(a)*ring),center+Vector3(cos(b)*ring,0,sin(b)*ring),0.008) for blade in 6: var angle := blade*TAU/6 batch.box(center+Vector3(cos(angle)*0.19,-0.025,sin(angle)*0.19),Vector3(0.29,0.016,0.08),"metal",TRIM,Vector3(0,-angle,0.15)) batch.finish(parent,"Building_%s_%s" % [origin.x,origin.z]) vehicles(arena,parent) static func vehicles(_arena: RelayArena, parent: Node3D) -> void: var batch := UrbanMeshBatch.new() for side in [-1,1]: var truck := Vector3(side*13,0,side*56) # Radiator slats, bumper, headlamp housings, steps, mirrors and body seams. for row in 12: batch.box(truck+Vector3(0,0.95+row*0.045,-3.968),Vector3(1.35,0.018,0.035),"metal",Color("242928")) for edge in [-1,1]: batch.bevel_box(truck+Vector3(edge*1.1,1.26,-3.98),Vector3(0.42,0.24,0.08),"glass",Color("cad4ce"),0.035) rod(batch,truck+Vector3(edge*1.45,2.1,-3.35),truck+Vector3(edge*1.77,2.1,-3.35),0.025) batch.bevel_box(truck+Vector3(edge*1.77,2.18,-3.35),Vector3(0.08,0.36,0.23),"rubber",Color("252827"),0.025) batch.box(truck+Vector3(edge*1.5,0.82,-2.8),Vector3(0.16,0.08,0.75),"metal",STEEL) for seam in [-1.5,-0.5,0.5,1.5,2.5,3.5]: batch.box(truck+Vector3(edge*1.611,2,seam),Vector3(0.012,2.02,0.025),"metal",TRIM) for y in [1.08,2.88]: batch.cylinder(truck+Vector3(edge*1.627,y,seam),0.025,0.025,"metal",STEEL,Vector3(0,0,PI/2)) var bus := Vector3(side*32,0,side*10) for edge in [-1,1]: rod(batch,bus+Vector3(edge*1.1,0.65,-4.5),bus+Vector3(edge*1.1,2.9,-4.5),0.03,TRIM) rod(batch,bus+Vector3(edge*1.1,2.9,-4.5),bus+Vector3(edge*1.1,2.9,4.5),0.03,TRIM) for z in [-4.0,-2.5,2.5,4.0]: batch.box(bus+Vector3(edge*1.529,1.27,z),Vector3(0.02,0.07,0.8),"rubber",Color("252827")) for z in [-3.0,3.0]: batch.box(bus+Vector3(edge*0.85,2.985,z),Vector3(0.32,0.045,0.75),"paint",Color("c3c6b5")) batch.finish(parent,"VehicleFittings")