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

Принятый ответ

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

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

0
26
4 года назад
0
Урон наносится по линии одновременно, или по линии летит снаряд, который периодически проверяет наличие юнитов вокруг себя?
0
10
4 года назад
0
Разве возможно чтобы одновременно наносился?
0
16
4 года назад
Отредактирован Drulia_san
0
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
0
26
4 года назад
0
Ну да, проверяем координаты юнитов в области между краями линии, если с учётом размера юнитов их координаты являются её частью, то наносим урон.
Drulia_san, ранее так делал. рецепт так себе. При выборе этими радиусами не попадают юниты, которые стоят как раз между кругами. Надо сделать расстояние между радиусами маленькое и добавлять юнитов в радиусе в группу, куда не заносить тех, кто уже в группе (не знаю, есть ли смысл в этом условии). В конце наносить урон всем в группе.
0
10
4 года назад
0
Drulia_san:
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
Принятый ответ
3
16
4 года назад
Отредактирован Drulia_san
3
noyl:
Drulia_san:
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
Нет. посмотри на картинку. Слева смещение кругов по радиусу по которому юниты получают урон, а справа на малую величину, где полоса урона приобретает более толстую однообразную форму. Как видишь если с малым интервалом так наносить урон - оно будет бить не всех юнитов, те что между окружностями слева просто не попадают под раздачу. Делай так как говорил 8gabriel8, записывай всех в группу и в конце наноси урон. Способ самый простой, не требующий математический возни. Чем меньше интервал между кругами (не важно какой там радиус), тем точнее линия урона.
Загруженные файлы
0
26
4 года назад
0
Когда делал по такому принципу способность, сталкивался с тем, что эти тоже не входят, типа радиус цепляет за середину юнитов. Хотя вроде как должен учитываться физический размер.
Короче, следует проверять.
Загруженные файлы
2
29
4 года назад
Отредактирован nazarpunk
2
Хотя вроде как должен учитываться физический размер.
При 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
0
27
4 года назад
Отредактирован MpW
0
NazarPunk, что возвращает Perpendicular? Вроде же длину перпендикуляра. верно? И как это работать должно в данном заклинании. Че-то никак не могу понять. Если я выберу всех юнитов, то какое условие надо задать в фильтре
0
26
4 года назад
0
NazarPunk:
При GroupEnumUnitsInRange не учитывается физический размер, поэтому нужно при наборе в группу добавлять к радиусу максимальный физ.размер, а уже при переборе проверять функцией IsUnitInRangeXY.
Ну вот и прояснилось.
Steal nerves:
И как это работать должно в данном заклинании
Максимальный физ. размер вроде у рыцаря, а минимальный у рабочего. Вроде от 8 до 32 они (или же от 16 до 24). Если перпендикуляр от прямой до юнита больше 32, то он урона не получает. А при меньшем расстоянии возможны разные варианты, но точно получит, если меньше 8.
0
29
4 года назад
Отредактирован nazarpunk
0
что возвращает Perpendicular?
Формула возвращает длинну от бесконечной прямой линии, которая проходит через [Xa,Ya] [Xb,Yb]. Тобишь нужно ещё сделать проверку на то, что цель находится перед кастером.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.