Добавлен Desgul
Хочу оптимизировать области и перемещение между ними, что бы было всё в 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 сек тоже нельзя воспользоваться, он слишком быстрый для вара
хотя я вижу в твоём триггере, что юнит не может вернуться обратно через ту же область, поэтому тебе даже задержка не нужна
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован biridius
Отредактирован rsfghd
Отредактирован rsfghd
Отредактирован Desgul