Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Алгоритм
Функция, позволяющая задать зданию угол поворота во время игры. Работает за счет какой-то внутриигровой ошибки.
Концепция: если здание переместить или скрыть, ему можно задать угол поворота, но фактически здание повернется не на заданный угол, а на предыдущий. Т. е. если попытаться повернуть здание на 180.0 градусов, а потом на 45.0, то в итоге здание будет повернуто на 180.0 градусов (если повезёт — погрешность может составлять до 30 градусов). Чтобы эту ошибку можно было использовать в одной функции, приходится использовать TriggerSleepAction.
При перемещении здания с помощью скрипта поворот сохраняется.
Функция использует рекурсию, так что осторожней с ней.
globals
    constant real DIVERGENCE = 1.0
endglobals

function SetBuildingFacing takes unit whichBuilding, real angle returns nothing
    local real currentUnitFacing = GetUnitFacing(whichBuilding)
    
    call SetUnitPosition(whichBuilding, GetUnitX(whichBuilding), GetUnitY(whichBuilding))
    call SetUnitFacing(whichBuilding, angle)
    call TriggerSleepAction(0.01)
    if (currentUnitFacing <= angle-DIVERGENCE or currentUnitFacing >= angle+DIVERGENCE) then
        call SetBuildingFacing(whichBuilding, angle)
    endif
endfunction