Дано:
  • Регион 1 где стоят кучка юнитов
  • Регион 2 и Регион 3 которые будут являются спавном юнитов
Как можно проще всего не затрагивая производительность игры сделать создание копий юнитов из региона 1 в регионах 2 и 3 чтобы не только юниты копировались, но игра корректно разворачивала юнитов.
Нужно реализовать на рефе с минимумом костылей
Подобное я помню было в карте Holy War.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
8
3 года назад
2
Берешь рект 1, берешь рект 2, считаешь расстояние по x и y - dx, dy между их центрами.
Для каждого юнита из ректа 1 берешь x,y, поворот и создаешь юнита с теми же типами, x+dx,y + dy, и тем же поворотом. Не сильно просадит производительность даже если юнитов будет прилично.
0
27
3 года назад
Отредактирован MpW
0
2
28
3 года назад
Отредактирован PT153
2
Это либа для телепортации, то можно переписать на копиравание.
scope RelationalTeleporter initializer init
globals
    constant group EmptyGroup = CreateGroup()
    
    real RatioX
    real RatioY
    real MinX_A
    real MinX_B
    real MinY_A
    real MinY_B
    
    private boolexpr filter
endglobals

function TeleportAllUnitsFromRectAToRectB takes rect a, rect b returns nothing
    // X
    set MinX_A = GetRectMinX(a)
    set MinX_B = GetRectMinX(b)
    set RatioX = (GetRectMaxX(b) - MinX_B) / (GetRectMaxX(a) - MinX_A)
    // Y
    set MinY_A = GetRectMinY(a)
    set MinY_B = GetRectMinY(b)
    set RatioY = (GetRectMaxY(b) - MinY_B) / (GetRectMaxY(a) - MinY_A)
    
    call GroupEnumUnitsInRect(EmptyGroup, a, filter)
endfunction

function TeleportFromAToB_Filter takes nothing returns nothing
    local unit u = GetFilterUnit()
    call SetUnitX(u, (GetUnitX(u) - MinX_A) * RatioX + MinX_B)
    call SetUnitY(u, (GetUnitY(u) - MinY_A) * RatioY + MinY_B)
    set u = null
endfunction

function init takes nothing returns nothing
    set filter = Filter(function TeleportFromAToB_Filter)
endfunction

endscope
Чтобы оставить комментарий, пожалуйста, войдите на сайт.