Как наносить урон по линии?
Может есть у кого написанная функция? Поделитесь, если не жалко :c

Drulia_san:
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Идеальный вариант чтобы игрок сам мог решать, нужно ли ему это. Сделай, если будет смотреться неплохо. И каким то образом запилить возможность выключения этой фичи.

26
Урон наносится по линии одновременно, или по линии летит снаряд, который периодически проверяет наличие юнитов вокруг себя?
9
Разве возможно чтобы одновременно наносился?
15
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
26
Ну да, проверяем координаты юнитов в области между краями линии, если с учётом размера юнитов их координаты являются её частью, то наносим урон.
Drulia_san, ранее так делал. рецепт так себе. При выборе этими радиусами не попадают юниты, которые стоят как раз между кругами. Надо сделать расстояние между радиусами маленькое и добавлять юнитов в радиусе в группу, куда не заносить тех, кто уже в группе (не знаю, есть ли смысл в этом условии). В конце наносить урон всем в группе.
9
Drulia_san:
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
Принятый ответ
15
noyl:
Drulia_san:
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
Нет. посмотри на картинку. Слева смещение кругов по радиусу по которому юниты получают урон, а справа на малую величину, где полоса урона приобретает более толстую однообразную форму. Как видишь если с малым интервалом так наносить урон - оно будет бить не всех юнитов, те что между окружностями слева просто не попадают под раздачу. Делай так как говорил 8gabriel8, записывай всех в группу и в конце наноси урон. Способ самый простой, не требующий математический возни. Чем меньше интервал между кругами (не важно какой там радиус), тем точнее линия урона.
Загруженные файлы
26
Когда делал по такому принципу способность, сталкивался с тем, что эти тоже не входят, типа радиус цепляет за середину юнитов. Хотя вроде как должен учитываться физический размер.
Короче, следует проверять.
Загруженные файлы
30
Хотя вроде как должен учитываться физический размер.
При GroupEnumUnitsInRange не учитывается физический размер, поэтому нужно при наборе в группу добавлять к радиусу максимальный физ.размер, а уже при переборе проверять функцией IsUnitInRangeXY.

Или вообще выбирать всех юнитов и радиусе урона и считать перпендикуляр от прямой.
function Perpendicular takes real Xa,real Ya,real Xb,real Yb,real Xc,real Yc returns real
    return SquareRoot((Xa - Xc) * (Xa - Xc) + (Ya - Yc) * (Ya - Yc)) * Sin(Atan2(Yc-Ya,Xc-Xa) - Atan2(Yb-Ya,Xb-Xa))
endfunction
27
NazarPunk, что возвращает Perpendicular? Вроде же длину перпендикуляра. верно? И как это работать должно в данном заклинании. Че-то никак не могу понять. Если я выберу всех юнитов, то какое условие надо задать в фильтре
26
NazarPunk:
При GroupEnumUnitsInRange не учитывается физический размер, поэтому нужно при наборе в группу добавлять к радиусу максимальный физ.размер, а уже при переборе проверять функцией IsUnitInRangeXY.
Ну вот и прояснилось.
Steal nerves:
И как это работать должно в данном заклинании
Максимальный физ. размер вроде у рыцаря, а минимальный у рабочего. Вроде от 8 до 32 они (или же от 16 до 24). Если перпендикуляр от прямой до юнита больше 32, то он урона не получает. А при меньшем расстоянии возможны разные варианты, но точно получит, если меньше 8.
30
что возвращает Perpendicular?
Формула возвращает длинну от бесконечной прямой линии, которая проходит через [Xa,Ya] [Xb,Yb]. Тобишь нужно ещё сделать проверку на то, что цель находится перед кастером.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.