[bug] Идентификаторы света взрывов сталкиваются для одинаковых tick и целой X #15
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проверка исходников на
90379f6. Полный Horizon/GPU на Mac не запускался; оценки сложности и ресурсов ниже не являются замерами FPS.ID HD-light взрыва вычисляется из
b.startи целойb.at.x. Координаты Y/Z и отдельная идентичность Blast не участвуют. Два взрыва в одном тике на одинаковой целой X, но разных Z получают одинаковый ID. ВGame::update_mod_models()lights складываются в HashMap по(owner, id), поэтому один перезаписывает другой.Простой контрпример по текущей формуле: start=100, x=0, z=100 и z=200 → оба id=0x61000c1c. Из двух lights после HashMap остаётся один. Это может приводить к пропаданию подсветки при одновременных перехватах/детонациях.
Предложение: выделять Blast стабильный уникальный ID при создании и использовать его для light до конца жизни эффекта. Не использовать только индекс в меняющемся Vec (интерполяция требует стабильной identity); выбрать namespace без пересечений с model lights. Хеш всех координат всё равно не гарантирует уникальности.
Критерий: несколько blasts в одном тике с одинаковой X сохраняют отдельные lights и корректную интерполяцию; удаление одного не перемещает другой.
Код:
🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/67a2a52 (запушено в main).