Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 October 03

K

Kong Ning Kuan 孔宁宽... in RU Rust GameDev — русскоговорящее сообщество
Классная игра
источник

K

Kong Ning Kuan 孔宁宽... in RU Rust GameDev — русскоговорящее сообщество
И геймплей у тебя интересный
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Спасибо.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Графон еще - единичками в паттернах рисуются красивые лучики!
источник

K

Kong Ning Kuan 孔宁宽... in RU Rust GameDev — русскоговорящее сообщество
Огонь)
источник

SS

Slava Sokolovsky in RU Rust GameDev — русскоговорящее сообщество
Mikola Summer Duck
В итоге с каждым чанком ассоциирована 63-битная мапа с оверлапящимися блоками разного размера.
А почему 63битная?
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Потому что на самом деле это бинарное дерево!
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Общий алгоритм -
Определяем порядок нашего размера аллокации, из порядка получаем уровень в битмапе (которая на самом деле бинарное дерево), ходим по битам в пределах уровня пока не упремся в нолик, если уперлись - делаем ор мапы со значением в константном массиве из картинки выше.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Этот ор - это на самом деле функция "пометить занятыми все ячейки в дереве, являющиеся парентами  или чайлдами этой ячейки"
источник
2020 October 04

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Mikola Summer Duck
(я не внемлил советам Романа и решил задрочиться с иерархией)
Вообще с иерархией хорошая идея. Но как бы ее за O(1) реализовать
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Roman
Вообще с иерархией хорошая идея. Но как бы ее за O(1) реализовать
let level_map = map | !LEVEL
let index = level_map.trailing_ones()
*map |= ALLOCATION_BITS[index];
Вроде так?
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Для мапы где нулевые биты значат „свободно“, а LEVEL значит битмапа с текущим уровнем иерархии выделенным единицами.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
(отредактировал код)
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Т.е.: делаем так, чтоб нули были только на нужном нам уровне, находим сдвиг ближайшего нуля, сетим этот индекс.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Вау. Я это только что придумал, на самом деле. У меня в коде луп. Это точно будет работать?
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Вроде ж должно.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Ааааа стоп.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Ты говорил про О(1) по всему аллокатору.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А как такое возможно, даже с не-иерархическим аллокатором?
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Амортизированная О(1) конечно же
источник