def add_floor_sides(vmf: VMF, locs): """We need to replace nodraw textures around the outside of the holes. This requires looping through all faces, since these will have been nodrawed. """ added_locations = { barrier.wall.as_tuple(): False for barrier in locs } for face in vmf.iter_wfaces(world=True, detail=False): if face.mat != 'tools/toolsnodraw': continue loc = face.get_origin().as_tuple() if loc in added_locations: random.seed('floor_side_{}_{}_{}'.format(*loc)) face.mat = random.choice(MATS['squarebeams']) added_locations[loc] = True # Swap these to flip the texture diagonally, so the beam is at top face.uaxis, face.vaxis = face.vaxis, face.uaxis face.uaxis.offset = 48 vbsp.IGNORED_FACES.add(face) # Look for the ones without a texture - these are open to the void and # need to be sealed. The template chamfers the edges # to prevent showing void at outside corners. for wall_loc, ceil_loc, rot in locs: if added_locations[wall_loc.as_tuple()]: continue diag_loc = (wall_loc.x, wall_loc.y, wall_loc.z + 128) temp_data = template_brush.import_template( # If there's a wall surface directly above this point # or a ceiling brush in the next block over # we want to use a world brush to seal the leak. # Otherwise we use the detail version for inside the map. temp_name=( FLOOR_TEMP_SIDE_DETAIL if ceil_loc not in conditions.SOLIDS and diag_loc not in conditions.SOLIDS else FLOOR_TEMP_SIDE_WORLD ), origin=wall_loc, angles=Vec(0, rot, 0), ) template_brush.retexture_template( temp_data, wall_loc, # Switch to use the configured squarebeams texture replace_tex={ consts.Special.SQUAREBEAMS: random.choice( MATS['squarebeams'] ), } )
def add_floor_sides(vmf: VMF, locs): """We need to replace nodraw textures around the outside of the holes. This requires looping through all faces, since these will have been nodrawed. """ added_locations = {barrier.wall.as_tuple(): False for barrier in locs} for face in vmf.iter_wfaces(world=True, detail=False): if face.mat != 'tools/toolsnodraw': continue loc = face.get_origin().as_tuple() if loc in added_locations: random.seed('floor_side_{}_{}_{}'.format(*loc)) face.mat = random.choice(MATS['squarebeams']) added_locations[loc] = True # Swap these to flip the texture diagonally, so the beam is at top face.uaxis, face.vaxis = face.vaxis, face.uaxis face.uaxis.offset = 48 vbsp.IGNORED_FACES.add(face) # Look for the ones without a texture - these are open to the void and # need to be sealed. The template chamfers the edges # to prevent showing void at outside corners. for wall_loc, ceil_loc, rot in locs: if added_locations[wall_loc.as_tuple()]: continue diag_loc = (wall_loc.x, wall_loc.y, wall_loc.z + 128) temp_data = template_brush.import_template( # If there's a wall surface directly above this point # or a ceiling brush in the next block over # we want to use a world brush to seal the leak. # Otherwise we use the detail version for inside the map. temp_name=(FLOOR_TEMP_SIDE_DETAIL if ceil_loc not in conditions.SOLIDS and diag_loc not in conditions.SOLIDS else FLOOR_TEMP_SIDE_WORLD), origin=wall_loc, angles=Vec(0, rot, 0), ) template_brush.retexture_template( temp_data, wall_loc, # Switch to use the configured squarebeams texture replace_tex={ consts.Special.SQUAREBEAMS: random.choice(MATS['squarebeams']), })