/** * Same as @ref R_OpenRange() but works with the "visual" (i.e., smoothed) plane * height coordinates rather than the "sharp" coordinates. * * @param side Line side to find the open range for. * * Return values: * @param bottom Bottom Z height is written here. Can be @c 0. * @param top Top Z height is written here. Can be @c 0. * * @return Height of the open range. * * @todo fixme: Should use the visual plane heights of sector clusters. */ static coord_t visOpenRange(LineSide const &side, coord_t *retBottom = 0, coord_t *retTop = 0) { Sector const *frontSec = side.sectorPtr(); Sector const *backSec = side.back().sectorPtr(); coord_t bottom; if(backSec && backSec->floor().heightSmoothed() > frontSec->floor().heightSmoothed()) { bottom = backSec->floor().heightSmoothed(); } else { bottom = frontSec->floor().heightSmoothed(); } coord_t top; if(backSec && backSec->ceiling().heightSmoothed() < frontSec->ceiling().heightSmoothed()) { top = backSec->ceiling().heightSmoothed(); } else { top = frontSec->ceiling().heightSmoothed(); } if(retBottom) *retBottom = bottom; if(retTop) *retTop = top; return top - bottom; }