Перейти к содержимому

Сортировка и кеш

Радар отвечает не «кто есть», а «кто лучший». Причём отвечает не каждый раз заново

среднийНужно знать: Найти юнита
тик 0
Радар0
target1target2target3сортировкаradarsortOrderвыход
Радар1
target1target2target3сортировкаradarsortOrderвыход
Радар2
target1target2target3сортировкаradarsortOrderвыход
Радар3
target1target2target3сортировкаradarsortOrderвыход
Информация4
=
у
Информация5
=
у
Стоп6
@counter0number
ближнийnullnull
дальнийnullnull
живучийnullnull
слабыйnullnull
ближнееЗдоровьеnullnull
слабоеЗдоровьеnullnull

Четыре радара, фильтры у всех одинаковые — разная только мерка и порядок. Кинжал стоит ближе и здоровее, вспышка дальше и слабее.

Мерка Что сравнивает
distance расстояние до блока
health текущее здоровье
maxHealth наибольшее здоровье
shield щит
armor броню

Ноль и единица переворачивают выбор:

Мерка и порядок Кого найдёт
distance 1 ближнего
distance 0 дальнего
health 1 самого живучего
health 0 самого слабого

Проще запомнить так: единица — это «самый подходящий по мерке», ноль — «самый неподходящий». У расстояния «подходящий» значит ближний, потому что искать обычно нужно его.

тик 0
Радар0
target1target2target3сортировкаradarsortOrderвыход
Контроль1
установить у
юнитвыстрелы
Информация2
=
у
Операция3
=
@counter0number
цельnullnull
мёртвnullnull
итерацийnullnull

Радар не ищет заново на каждой итерации. У блока результат пересчитывается раз в 30 тиков — полсекунды, — а между пересчётами отдаётся прошлый ответ. Это сделано ради скорости: десяток радаров в программе иначе съедал бы кадр.

Нажмите «пуск» и посмотрите на мёртв. Турель добивает вспышку, и какое-то время цель по-прежнему указывает на неё — только теперь с @dead равным единице.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.