Доброго времени суток!
Подскажите, пожалуйста, можно ли создать событие, которое запускает триггер тогда, когда юнит входит/выходит из воды?
Если нет, то проверить расположение юнита в воде можно с помощью PATHING_TYPE_FLOATABILITY, но тогда каким событием запустить эту проверку?
Подскажите, пожалуйста, можно ли создать событие, которое запускает триггер тогда, когда юнит входит/выходит из воды?
Если нет, то проверить расположение юнита в воде можно с помощью PATHING_TYPE_FLOATABILITY, но тогда каким событием запустить эту проверку?
Принятый ответ
Почему то на таймере всё забагалось и прилетало по несколько ивентов, сделал на периодическом триггере и всё стало нормально.
Код
globals
region region123
trigger trg = CreateTrigger()
real maxX
real minX
real maxY
real minY
real pointX
real pointY
endglobals
function Run takes nothing returns nothing
if pointY < minY then
call TriggerRegisterEnterRegion( gg_trg_enter, region123, null )
call TriggerRegisterLeaveRegion( gg_trg_leave, region123, null )
call DisableTrigger( trg )
endif
if pointX > maxX then
set pointY = pointY-32.00
set pointX = minX
endif
if IsTerrainPathable(pointX, pointY, PATHING_TYPE_FLOATABILITY) == false then
call RegionAddCell( region123, pointX, pointY )
endif
set pointX = pointX+32.00
endfunction
function Trig_trg_Actions takes nothing returns nothing
set region123 = CreateRegion()
set maxX = GetRectMaxX(bj_mapInitialPlayableArea)
set minX = GetRectMinX(bj_mapInitialPlayableArea)
set maxY = GetRectMaxY(bj_mapInitialPlayableArea)
set minY = GetRectMinY(bj_mapInitialPlayableArea)
set pointX = minX
set pointY = maxY
call TriggerRegisterTimerEvent( trg, 0., true )
call TriggerAddCondition( trg, Condition(function Run) )
endfunction
//===========================================================================
function InitTrig_trg takes nothing returns nothing
call Trig_trg_Actions()
endfunction
Вот карта с примером (карту сохранить не сможешь, т.к тебе нужен будет JNGP, это просто чтобы ты посмотрел сам алгоритм)
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ImbaState
Или я не так понял, и фактически мне нужно будет искать такие регионы с водой и добавлять событие входа в них в нужный триггер? В создании события значит ничего трудного, вроде.
Но... Опять но... Я пока не представляю как искать области с водой :с
Отредактирован ImbaState
Но даже без объединения регионов (областей) я могу просто добавить для каждого событие в триггер.
У меня скорее вопрос уже по поиску регионов с водой. Как их искать, не подскажите?
Upd:
Здесь, в статье про JASS, написано, что в Region можно добавлять точки размером 32х32. То есть мне каждый квадрат, где "расположена" вода, нужно заносить в регион? Я изучаю, но пока не знаю как эти точки добавлять в регион :D
Отредактирован Hodor
Отредактирован ImbaState
UrsaBoss:
Отредактирован Hodor
И если без гуи, то берёшь обычный GUI триггер с любым ивентом на вход в регион, далее конвертируешь его в jass.
Потом в функции инициализации триггера локально объявляешь регион и вносишь все свои области с водой в него, ну и потом вписываешь регион в ивент
UrsaBoss:
Отредактирован Hodor
в теории можно построить алгоритм который обыщет всю карту начиная с верхнего левого угла карты
далее двигаешь координаты с шагом приблизительно 30.00 сначала по оси X, далее снижаешь на 30.00 по Y и повторяешь.
Добавлять координаты в регион нужно через RegionAddCell
Но чую вызовет лаги во время такого "поиска"))) Если нужно один раз во время инициализации это сделать, то запросто
и учти что PATHING_TYPE_FLOATABILITY вернёт true если в этом месте нельзя плавать (т.е нету воды)
Отредактирован ImbaState
Отредактирован Hodor
Отредактирован Hodor
Отредактирован Пушистый
Отредактирован Hodor
зачем такую нагрузку лишнюю, есть же прекрасные ивенты на вход/выход. И тем более у него видимо карты с разными ландшафтами.
Я тут подсчитал, мой алгоритм сьел 4 фпс на карте 64x64 за пол секунды, поставил его в инициализацию, так вообще незаметно стало.
Щас пока что настраиваю
ыыы, затупил, варкрафт тупо завершает поток из за loop, ща на таймере переделаю
ну там включить и выключить пассивку у него
Я алгоритм собрал, но вот че то не пойму почему при входе в воду прилетает 10-20 ивентов, вроде шаг стоит на 30.00.
Тем более таймер очень медленный, примерно за 2-3 собирает регион. Мне кажется шаг в 30.00 слишком большой и нужно его уменьшить, но чем больше уменьшаю тем медленнее таймер собирает регион.
Там у таймера если что периодичность 0.000
Попробую сделать периодический триггер или разбить потоки с помощью Execute и loop, (т.к loop гораздо быстрее таймера, но в одном потоке нереально сделать сборку региона)
Отредактирован Hodor
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
Отредактирован ImbaState
кстати, чтобы быстрее искало - добавь ещё 9 таких строчек