Как наносить урон по линии?
Может есть у кого написанная функция? Поделитесь, если не жалко :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
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.