[bug] Terrain-following навсегда кэширует старые высоты и не слышит world-changes #64
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?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Ревью
6f3fc644bc5194311a86baba722bc340215306b7. Новый обход рельефа используетGround::rise/land/column, у которых нет ни TTL, ни связи с инвалидациями геометрии.sim/terrain.rs::riseвозвращает любое значениеGround.knownбез проверки времени;columnделает то же для планировщика. Комментарий прямо обещает не спрашивать известную колонку повторно. Вlib.rsсобытияworld_changesуходят только вground.world.changed, то есть в другой, 3D-кэш. События изменения блоков не инвалидируютGround.known.Обычный
Ground::at(now)имеет refresh через 200 тиков, но это не спасает lattice-колонки look-ahead: они часто никогда не совпадают с точной XZ позицией летящего аппарата. Собственныйforgetпри взрыве не покрывает редактирование игроком/сервером и отложенное применение TNT.Выполненный нативный пример
Даже спустя 500 игровых секунд и после геометрической инвалидации нового запроса нет. Свежий DDA при этом может знать уже другую геометрию.
Эффект и исправление
Дроны продолжают облетать снесённую гору; новые возвышенности не видны заблаговременному набору высоты; SAM launch verdict/loft и цены планировщика опираются на разные версии мира. При изменении/замене секции инвалидировать соответствующие heightmap-колонки; иметь bounded refresh/revision и для land/column. Сохранять разделение Pending/Void/At и бюджет запросов.
Проверить изменение горы/платформы после прогрева, перепланирование налёта и уже летящие аппараты. Не регрессировать исправление голодания #1.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/5f8bff3 (запушено в main).