Этот код не работает.
Нужна функция, где я буду указывать Х,У,Радиус - и в этом АОЕ ломаются деревья.
(Для всяких способностей со взрывами итд.)
Что я делаю не так?

Написал общую функцию EnumDestructablesInRange.
раскрыть
globals
    real TrasmittedX
    real TrasmittedY
    real TrasmittedRange
endglobals

function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction

function FilterFunc takes nothing returns boolean
    return TrasmittedRange >= GetDistancePoints(TrasmittedX, TrasmittedY,/*
        */ GetDestructableX(GetFilterDestructable()), GetDestructableY(GetFilterDestructable()))
endfunction

function EnumDestructablesInRange takes real x, real y, real range, code callback returns nothing
    set TrasmittedX = x
    set TrasmittedY = y
    set TrasmittedRange = range
    call EnumDestructablesInRect(GetWorldBounds(), Filter(function FilterFunc), callback)
endfunction

function KillDestructiblesInRangeCallback takes nothing returns boolean
    call KillDestructable(GetEnumDestructable())
endfunction

function KillDestructiblesInRange takes real x, real y, real range returns boolean
    call EnumDestructablesInRange(x, y, range, function KillDestructiblesInRangeCallback)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
Darknessay, эмм, GetEnumDestrubale
Тебе передать нужно только значение радиуса и исходной точки
И относительно их проверять удаленность декора
19
PrincePhoenix:
Darknessay, эмм, GetEnumDestrubale
Тебе передать нужно только значение радиуса и исходной точки
И относительно их проверять удаленность декора
Что куда передать, я не понимаю, я хочу сделать это дерьмо на координатах, а не на точках. Ты приводишь мне скверрут для сравнения ХУ между точкой центра и декором.
На гуи есть БЖ с выбором декора в радиусе от точки, а я пытаюсь ее раскрыть и сделать на коордах, без создания точки, понял?
И то что я привел в самом начале - и есть моя попытка сделать это. Но получается, что там квадрат, а квадрат мне не подходит.
Я не могу сравнить ХУ-ХУ центра и декора, потому что нет никакой "группы декорации", куда можно было бы их занести для дальнейшего сравнения, как GroupEnumUnits, есть только эта функция ЭнамДеструктибл, которая ссылает на другую функцию(действия, применяемые к энамДеструктам), но в нее нельзя передать ХУ центра для дальнейшего сравнения дистанции.
29
Я конечно могу быть аутистом, но что мешает перебирать весь декор в игровой карте? То есть ты создаёшь группу декораций занося туда их все, затем проверяешь на удалённость и выполняешь соответствующие действия
19
PrincePhoenix:
Я конечно могу быть аутистом, но что мешает перебирать весь декор в игровой карте? То есть ты создаёшь группу декораций занося туда их все, затем проверяешь на удалённость и выполняешь соответствующие действия
Может я аутист, но по моему группы декораций не существует
.-.
29
В качестве ректа игровая карта, внутри функции DestructableKill проверку удалённости этого декора от центра
Кодом скинь, покажу
19
function DestructibleKill takes nothing returns nothing
KillDestructable(GetEnumDestructable())
endfunction
function KillDest takes real x,real y,real rad returns nothing
rect r=Rect(x-rad,y-rad,x+rad,y+rad)
EnumDestructablesInRect(r,null,function DestructibleKill)
RemoveRect(r)
set r=null
endfunction
Удаленности от центра игровой карты? Мне нужен конкретный ХУ... -.-
Короче, без глобалок не обойтись походу?
29
globals
    x = //твой х
    y = //твой y
    rad = //твой радиус
endglobals
function DestructibleKill takes nothing returns nothing
if SquareRoot((x1-GetDestructableX(GetEnumDestructable()))*(x1-GetDestructableX(GetEnumDestructable())) + (y1-GetDestructableY(GetEnumDestructable())*y1-GetDestructableY(GetEnumDestructable())) <= rad
KillDestructable(GetEnumDestructable())
endif
endfunction
function KillDest takes real x,real y,real rad returns nothing
EnumDestructablesInRect(GetPlayableMapRect(),null,function DestructibleKill)
endfunction
28
Написал общую функцию EnumDestructablesInRange.
раскрыть
globals
    real TrasmittedX
    real TrasmittedY
    real TrasmittedRange
endglobals

function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction

function FilterFunc takes nothing returns boolean
    return TrasmittedRange >= GetDistancePoints(TrasmittedX, TrasmittedY,/*
        */ GetDestructableX(GetFilterDestructable()), GetDestructableY(GetFilterDestructable()))
endfunction

function EnumDestructablesInRange takes real x, real y, real range, code callback returns nothing
    set TrasmittedX = x
    set TrasmittedY = y
    set TrasmittedRange = range
    call EnumDestructablesInRect(GetWorldBounds(), Filter(function FilterFunc), callback)
endfunction

function KillDestructiblesInRangeCallback takes nothing returns boolean
    call KillDestructable(GetEnumDestructable())
endfunction

function KillDestructiblesInRange takes real x, real y, real range returns boolean
    call EnumDestructablesInRange(x, y, range, function KillDestructiblesInRangeCallback)
endfunction
Принятый ответ
29
PT153, Спасибо, показательный пример красивого кода
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.