Stage 2: Отрисовка секторов
Порталы: соединяем сектора
Интуиция подсказываем нам, что с общими стенами между секторами необходимо что-то сделать. Расширим понимание сегмента. Пусть теперь будут встречаться такие, которые мы не будем закрашивать, но через которые будет рисоваться оставшийся уровень. Назовем такие сегменты — порталами.
Сегменты, образующие порталы, будем помечать флагом и хранить в нем информацию о том, какие сектора они соединяют:
interface Seg {
// ..
frontSector: Sector;
backSector: Sector;
isTwoSide: boolean;
}
function isPortal(seg: Seg): boolean {
return Boolean(seg.isTwoSide && seg.backSector && seg.backSector !== seg.frontSector);
}
Теперь отрисовка будет начинаться с сектора, в котором находится камера. Затем отрисовщик будет рекурсивно обрабатывать сектора, в которых будет перебирать сегменты и по итогу сформирует всю проекцию с учетом знаний о порталах.