Добавлен Hodor
Делаю нативный AOE поиск юнитов в JASS
Все юниты на карте находятся в одной общей группе, карта небольшая
Юнитов ищу с помощью ForGroup по такой формуле: если (расстояние между координатами минус физический размер) меньше или равно AOE
Но я решил сделать эксперимент, брал юнита с дальней атакой, отбегал и давал приказ атаковать цель
Потом детектил ивент на атаку и измерял расстояние между координатами юнитов, в первом случае я атаковал слева и показало 830.031, во втором случае я уже атаковал справа и показало другие цифры 829.394
Повторил эксперимент ещё раз, атакуя с разных сторон и цифра получалась плюс-минус ~3 единицы, но не превышало максимальную возможную дальность атаки (физ. размер атакующего + радиус атаки атакующего + физ. размер цели)
И из за этого у меня возникли сомнения что получится сделать нативный AOE поиск, который работал бы точно как AOE из обычных абилок варкрафта
UPD:
GroupEnumUnitsInRange просто тупо по расстоянию между координатами ищет юнитов, это не то
Все юниты на карте находятся в одной общей группе, карта небольшая
Юнитов ищу с помощью ForGroup по такой формуле: если (расстояние между координатами минус физический размер) меньше или равно AOE
Но я решил сделать эксперимент, брал юнита с дальней атакой, отбегал и давал приказ атаковать цель
Потом детектил ивент на атаку и измерял расстояние между координатами юнитов, в первом случае я атаковал слева и показало 830.031, во втором случае я уже атаковал справа и показало другие цифры 829.394
Повторил эксперимент ещё раз, атакуя с разных сторон и цифра получалась плюс-минус ~3 единицы, но не превышало максимальную возможную дальность атаки (физ. размер атакующего + радиус атаки атакующего + физ. размер цели)
И из за этого у меня возникли сомнения что получится сделать нативный AOE поиск, который работал бы точно как AOE из обычных абилок варкрафта
UPD:
GroupEnumUnitsInRange просто тупо по расстоянию между координатами ищет юнитов, это не то
Принятый ответ
C++ тоже показывает 832.0, на С почему-то не смог запустить.
UrsaBoss, вообще, используй нативки, они точнее будут нахождения дистанции "руками" в данном случае. Но не используй Pow(), эта функция очень неточная.
UrsaBoss, вообще, используй нативки, они точнее будут нахождения дистанции "руками" в данном случае. Но не используй Pow(), эта функция очень неточная.
constant native IsUnitInRange takes unit whichUnit, unit otherUnit, real distance returns boolean
constant native IsUnitInRangeXY takes unit whichUnit, real x, real y, real distance returns boolean
constant native IsUnitInRangeLoc takes unit whichUnit, location whichLocation, real distance returns boolean
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Т.е я задаю юниту 832.000 по Y, даю приказ атаковать - он никуда не уходит и в момент атаки имеет эти координаты
Далее я задаю юниту уже 832.001 по Y, опять даю приказ атаковать и в момент атаки координаты уже около 824, имхо игра не позволила ему атаковать с 832.001, что говорит о точности вычислений в движке.
Как я знаю движок на C++ писался, поэтому тем более)
По идее уже пофиг на точность, буду юзать IsUnitInRange
В планах сделать поиск ближайшего юнита, там уже смогу юзнуть бд и думаю не будет важна точность
Ну я имел в виду близзарды делали sqrt в JASS по своему или юзнули тот что доступен в ++?
Ну чтобы не было так что я посчитаю 600.123 расстояния, а движок 600 ровно