Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Весьма и весьма недурно. С нетерпением жду продолжения.
Возможно глупый совет, но не пробовали ли вы делать минимальный размер субрегиона в RegionTree допустим 8х8 или 16х16, и делать там сплошную битовую маску? Мне кажется, это было бы эффективней и по памяти, и по времени доступа.
Увы, это идеально ложится на языки с поддержкой tagged unions — а Unity не тот случай.
Можно попробовать так, если надо в основном проверки на "пустой-полный" (псевдокод)
interface INode {
bool isEmpty(Coord);
}
class BigNode: INode {
INode topleft, topright, bottomleft, bottomright;
bool IsEmpty(Coord position) {
var subnode = selectChildFromCoord(position);
return subnode ? subnode.isEmpty(position) : false;
}
}
class SmallNode: INode {
BitMaskBlob bitmask;
bool isEmpty(Coord position) {
return getBitFromPosition(position) != 0;
}
}
2D магия в деталях. Часть вторая. Структура