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);
}Теперь отрисовка будет начинаться с сектора, в котором находится камера. Затем отрисовщик будет рекурсивно обрабатывать сектора, в которых будет перебирать сегменты и по итогу сформирует всю проекцию с учетом знаний о порталах.