Хочу оптимизировать области и перемещение между ними, что бы было всё в 1 триггере
я сделал, но мне кажется что это плохой вариант, можно сделать лучше?

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

Desgul, сейчас пытаюсь с помощью джасса и команды IsPointInRegion(R,x,y) реализовать

Ору, не понимал почему игра крашилась, оказывается инициализировать глобалку региона и сразу же присваивать ей значение нельзя)
код
globals
    region TR
    rect lastRect = null
endglobals
function Trig_ddd_Conditions takes nothing returns boolean
    return IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO)
endfunction

function IsPointInRect takes rect a, real x, real y returns boolean
    call RegionClearRect(TR,lastRect)
    call RegionAddRect(TR,a)
    set lastRect = a
    return IsPointInRegion(TR,x,y)
endfunction

function Trig_ddd_Actions takes nothing returns nothing
    local real x = GetUnitX(GetTriggerUnit())
    local real y = GetUnitY(GetTriggerUnit())
    call DisableTrigger(GetTriggeringTrigger())
    if IsPointInRect(gg_rct_rect_000,x,y) then
        set udg_Point[0] = GetRectCenter(gg_rct_rect_002)
    elseif IsPointInRect(gg_rct_rect_001,x,y) then
        set udg_Point[0] = GetRectCenter(gg_rct_rect_003)
    elseif IsPointInRect(gg_rct_rect_002,x,y) then
        set udg_Point[0] = GetRectCenter(gg_rct_rect_000)
    elseif IsPointInRect(gg_rct_rect_003,x,y) then
        set udg_Point[0] = GetRectCenter(gg_rct_rect_001)
    endif
    call SetUnitPositionLoc( GetTriggerUnit(), udg_Point[0] )
    call RemoveLocation(udg_Point[0])
    set udg_Point[0] = null
    call TriggerSleepAction(0.)
    call EnableTrigger(GetTriggeringTrigger())
endfunction

//===========================================================================
function InitTrig_ddd takes nothing returns nothing
    set gg_trg_ddd = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_ddd, gg_rct_rect_000 )
    call TriggerRegisterEnterRectSimple( gg_trg_ddd, gg_rct_rect_001 )
    call TriggerRegisterEnterRectSimple( gg_trg_ddd, gg_rct_rect_002 )
    call TriggerRegisterEnterRectSimple( gg_trg_ddd, gg_rct_rect_003 )
    call TriggerAddCondition( gg_trg_ddd, Condition( function Trig_ddd_Conditions ) )
    call TriggerAddAction( gg_trg_ddd, function Trig_ddd_Actions )
    set TR = CreateRegion()
endfunction

Бтв, Region Comprasion не помог бы

Единственное, что из-за микрозадержки могут быть случаи, когда некоторых юнитов не телепотирует и им ещё раз в область зайти нужно. Задержка нужна чтобы не вызвать бесконечный цикл, к сожалению, таймером в 0.00 сек тоже нельзя воспользоваться, он слишком быстрый для вара

хотя я вижу в твоём триггере, что юнит не может вернуться обратно через ту же область, поэтому тебе даже задержка не нужна
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
9
3 года назад
0
Почему нельзя сделать двумя триггерами?
0
15
3 года назад
0
map_maiker, Потому что много областей с телепортом
0
27
3 года назад
0
Desgul, ну так понятное дело не будет телепортировать, у тебя же события нет для верхних областей, только для нижних

+ там нужно большее кол-во областей чтобы не зациклить триггер, либо отключить триггер на время с определенной задержкой перед включением
0
20
3 года назад
Отредактирован biridius
0
если заходит с низу герой то его портает, если с верху то не портает=)
Там еще такая фигня, проверка на нахождение юнита в области не всегда правильно работает сразу после срабатывания события на вход в нее. Видимо ошибка округления. Если добавить вейт перед проверкой нахождения в области, должно работать.
2
15
3 года назад
2
rsfghd, Ты не понял, зайди на нижнюю область с верху и она не портнит тебя


Попробуй так зайти и он тебя не портнит, а если зайти снизу то портнит
Загруженные файлы
0
20
3 года назад
Отредактирован biridius
0
Desgul, походу физический размер юнита играет роль при отлове События входа в область... а вот при проверке Условия нахождения в области не влияет (там только координаты центра), и может получиться так что кусок юнита вошел в область но его центр еще не в ней, и условие не срабатывает...
Придется походу делать через перебор групп лол
0
15
3 года назад
0
biridius, Но почему с низу когда заходишь всё ок, всегда портает, а если зайти с верху то не когда не портает, вам не кажется это странным?
0
27
3 года назад
Отредактирован rsfghd
0
Почему бы не воспользоваться тогда Region Comprasion?
0
20
3 года назад
0
Desgul, Событие срабатывает (попробуй поставить туда вывод текста например). А вот условие не всегда. Из-за "физ.размера" юнита.
0
15
3 года назад
0
biridius, я проверил и мне показывает что в области есть герой, но не портает его
0
20
3 года назад
0
Desgul, у меня не говорит что в области есть герой, только что событие сработало
зашел снизу, условие сработало, зашел сверху нет
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.