Кто подскажет как раскрыть эту функции. можно ли в ней углы как то плюсовать.
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 )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
2
4 месяца назад
Отредактирован Nevermourne
0
буду совершенствовать свой 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)
2
29
4 месяца назад
2
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
0
2
4 месяца назад
0
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
Эта функция не создает утечек, поэтому не вижу причин её не вызывать. Всё программирование основывается на написании различных функций, которые ты потом вызываешь.
2
29
4 месяца назад
Отредактирован nazarpunk
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)
0
2
4 месяца назад
0
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)
Ну не преувеличивай)
Я просто спросил почему ты считаешь такой вариант более комфортным.
0
29
4 месяца назад
0
Я просто спросил почему ты считаешь такой вариант более комфортным.
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
0
2
4 месяца назад
0
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
Мы же говорили про обьем кода, а не работоспособность функции.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.

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