Добавлен Deepire
Приветствую, я не так давно начал изучать JASS. Я Столкнулся с проблемой разницы Rect и Region
Мне надо заставить разных юнитов в hashtable играть анимацию в зависимости от того какой из регионов (rect) стригерился
я кое что уже пробовал, например пытался преобразовывать rect в region и сравнивать с GetTriggeringRegion(), что очевидно не сработало ибо там я получал просто другой объект типа region(то как я это понял).
Мне надо заставить разных юнитов в hashtable играть анимацию в зависимости от того какой из регионов (rect) стригерился
я кое что уже пробовал, например пытался преобразовывать rect в region и сравнивать с GetTriggeringRegion(), что очевидно не сработало ибо там я получал просто другой объект типа region(то как я это понял).
В общем, очень прошу помочь.
Принятый ответ
Deepire,
В той теме есть все необходимые ответы, просто нужно немного технической подкованности.
Если ты конвертнешь свой триггер в текст то увидишь следующую функцию регистрации события TriggerRegisterEnterRectSimple(gg_trg_EnterRegion1,gg_rct_CastRegion1) , которая является бж-функцией (кастом функцией написанной близами) и на самом деле она выглядит так:
В той теме есть все необходимые ответы, просто нужно немного технической подкованности.
Если ты конвертнешь свой триггер в текст то увидишь следующую функцию регистрации события TriggerRegisterEnterRectSimple(gg_trg_EnterRegion1,gg_rct_CastRegion1) , которая является бж-функцией (кастом функцией написанной близами) и на самом деле она выглядит так:
function TriggerRegisterEnterRectSimple takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction
То есть функция конвертирует rect gg_rct_CastRegion1 в локально созданный регион и вешает на этот регион событие входа, таким образом твой изначальный рект никак не связан с самим триггером, а регион оказывается потерянным, так как на него не сохранятся ссылок (да и функции GetTriggerRegion() не существует все равно).
В твоем случае, для проигрывания нужной анимации будет достаточно проверить лежит ли координата вошедшего юнита внутри каждого из изначальных ректов:
В твоем случае, для проигрывания нужной анимации будет достаточно проверить лежит ли координата вошедшего юнита внутри каждого из изначальных ректов:
local real x = GetUnitX(GetTriggerUnit())
local real y = GetUnitY(GetTriggerUnit())
if RectContainsCoords(gg_rct_CastRegion1,x,y) then
// bla bla
elseif RectContainsCoords(gg_rct_CastRegion2,x,y) then
// bla bla bla
elseif ...
Стоит отметить что плодить много elseif-ов это моветон.
И в сразу советую называть "Регионы" которые ты создаешь в редакторе Rect-ами, которыми они являются на самом деле.
И в сразу советую называть "Регионы" которые ты создаешь в редакторе Rect-ами, которыми они являются на самом деле.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. EugeAl
В той теме есть все необходимые ответы, просто нужно немного технической подкованности.
Если ты конвертнешь свой триггер в текст то увидишь следующую функцию регистрации события TriggerRegisterEnterRectSimple(gg_trg_EnterRegion1,gg_rct_CastRegion1) , которая является бж-функцией (кастом функцией написанной близами) и на самом деле она выглядит так:
В твоем случае, для проигрывания нужной анимации будет достаточно проверить лежит ли координата вошедшего юнита внутри каждого из изначальных ректов:
И в сразу советую называть "Регионы" которые ты создаешь в редакторе Rect-ами, которыми они являются на самом деле.