Кто подскажет как раскрыть эту функции. можно ли в ней углы как то плюсовать.
local unit Unit = CreateUnitAtLoc(GetOwningPlayer(caster),UnitId, GetOwningPlayer(GetSpellAbilityUnit()), PolarProjectionBJ(PolarProjectionBJ(GetSpellTargetLoc(), 150.00, ( AngleBetweenPoints(GetSpellTargetLoc(), GetUnitLoc(GetSpellAbilityUnit())) + 90.00 )), 150.00, ( AngleBetweenPoints(GetUnitLoc(GetLastCreatedUnit()), GetSpellTargetLoc()) + 90.00 )), bj_UNIT_FACING )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
буду совершенствовать свой vJASS!
Удачи. Для начать можешь с перехода на радианы и отказа от Location.
function Test takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real cx = GetUnitX(caster)
    local real cy = GetUnitY(caster)
    local real tx = GetSpellTargetX()
    local real ty = GetSpellTargetY()
    local real a90 = bj_PI * .5
    local real d = Atan2(cy - ty, cx - tx)
    local real x = (tx + 150 * Cos(d + a90)) - 300 * Cos(d + bj_PI)
    local real y = (ty + 150 * Sin(d + a90 )) - 300 * Sin(d + bj_PI)
    local real x2 = (tx + 150 * Cos(d - a90 )) - 300 * Cos(d - bj_PI)
    local real y2 = (ty + 150 * Sin(d - a90 )) - 300 * Sin(d - bj_PI)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x, y, d + a90)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x2, y2, d - a90)
    set caster = null
endfunction
... и использования блоков кода.
2
буду совершенствовать свой vJASS!
Удачи. Для начать можешь с перехода на радианы и отказа от Location.
function Test takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real cx = GetUnitX(caster)
    local real cy = GetUnitY(caster)
    local real tx = GetSpellTargetX()
    local real ty = GetSpellTargetY()
    local real a90 = bj_PI * .5
    local real d = Atan2(cy - ty, cx - tx)
    local real x = (tx + 150 * Cos(d + a90)) - 300 * Cos(d + bj_PI)
    local real y = (ty + 150 * Sin(d + a90 )) - 300 * Sin(d + bj_PI)
    local real x2 = (tx + 150 * Cos(d - a90 )) - 300 * Cos(d - bj_PI)
    local real y2 = (ty + 150 * Sin(d - a90 )) - 300 * Sin(d - bj_PI)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x, y, d + a90)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x2, y2, d - a90)
    set caster = null
endfunction
... и использования блоков кода.
Может хоть ты мне обьяснишь откуда у вас кодеров мода расписывать каждую строчку и создавать локалку для каждого значения?
Почему не написать все то же самое в одну строку?
Да, может строка выйдет длинновата, но ты же сам знаешь что это просто точка со смещением, и менять в ней всего 2 значения...
Лично я бы сократил так:
unit t=GetTriggerUnit()
real a=Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())
CreateUnit(GetOwningPlayer(t),'h000',GetUnitX(t)+150*Cos(a), GetUnitY(t)+150*Sin(a),a*bj_RADTODEG)
30
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
2
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
Эта функция не создает утечек, поэтому не вижу причин её не вызывать. Всё программирование основывается на написании различных функций, которые ты потом вызываешь.
30
Nevermourne, ну да, сначала мы не экономим на вызовах функций, потом не видим разницы между O(1) и O(n^2), а потом Боинги падают.

Ну и в добавок, почему тогда вообще всё в одну строчку не засунуть? Так же лучше будет.
CreateUnit(GetOwningPlayer(GetTriggerUnit()),'h000',GetUnitX(GetTriggerUnit())+150*Cos(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())), GetUnitY(GetTriggerUnit())+150*Sin(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())),Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())*bj_RADTODEG)
2
Nevermourne, ну да, сначала мы не экономим на вызовах функций, потом не видим разницы между O(1) и O(n^2), а потом Боинги падают.

Ну и в добавок, почему тогда вообще всё в одну строчку не засунуть? Так же лучше будет.
CreateUnit(GetOwningPlayer(GetTriggerUnit()),'h000',GetUnitX(GetTriggerUnit())+150*Cos(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())), GetUnitY(GetTriggerUnit())+150*Sin(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())),Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())*bj_RADTODEG)
Ну не преувеличивай)
Я просто спросил почему ты считаешь такой вариант более комфортным.
30
Я просто спросил почему ты считаешь такой вариант более комфортным.
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
2
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
Мы же говорили про обьем кода, а не работоспособность функции.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.

Ну ладно. Это вопрос оптимизации - думаю, каждый привык оптимизировать по своему.
30
Мы же говорили про обьем кода, а не работоспособность функции.
Ну да, второй вызов функции никак на объём кода не влияет.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.
Ога, код мы я так понимаю ради пространства пишем? Однобуквенные переменные кстати намного меньше его занимают.
2
Мы же говорили про обьем кода, а не работоспособность функции.
Ну да, второй вызов функции никак на объём кода не влияет.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.
Ога, код мы я так понимаю ради пространства пишем? Однобуквенные переменные кстати намного меньше его занимают.
Ладно, в твоих словах тоже есть истина. Я не хочу спорить)
28
Nevermourne, то, о чем ты говоришь называется инкапсуляцией, она не всегда имеет место быть. То есть в качестве оптимизации реально лучше сократить количество вызовов одной и той же функции, если она используется 2+ раз, путём заноса в переменную
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.