🔥 Структуры и проблема с поворотом
Всем привет! Сегодня хочу рассказать про жёсткий баг, на который наткнулся при реализации поворота структур.
✔️ Чтобы структуры выглядели разнообразнее, нужно уметь размещать их в разных направлениях.
Сам поворот реализовать несложно: мы просто переставляем данные массива местами в зависимости от направления и готово.
😭 Но если в структуре используются блоки, у которых есть состояние направления (ступеньки, лестницы, сундуки, кровати и т. д.), то они начинают ломаться, потому что при повороте мы не меняем их мета данные.
🙂 Раньше мета блока у меня хранилось в 1 байте (для оптимизации): я делил его на биты и упаковывал туда всё, что нужно. Например для блока двери в первом бите хранил открыта или закрыта дверь, далее два бита были на поворот от 0 до 3, следующий бит был на то какая часть двери верх или низ и т.д. Но из-за этого было сложно работать с метой блока из вне, чтобы ее подредактировать на тех же поворотах
😍 После большого рефакторинга я избавился от «байтовой меты» и перенёс систему на отдельные состояния. Теперь можно легко добавлять новые состояния блока и получать к ним доступ по ключу.
👍 И уже благодаря этой системе я могу быстро определить, есть ли у блока состояние направления, и при повороте структуры менять его вместе с блоком. Из-за этого все «поворотные» блоки начинают корректно располагаться внутри структуры.
P.S Прикрепил скрины бага структур, а так же примеры конфигурации состояний блока в компонентах двери и ступеньки 📌
Post #827
1.54K






- 🔥 20
- ❤ 6
- 👍 6
- 🤯 1