Прошу сделать (кто может) наработку по координатам, на jass. То есть я хочу сделать круг из чего либо в виде координат Widget (x,y) или квадрат. Но у меня не получается и приходиться использовать полярные координаты триггеров. А и за этого карта лагает при использовании. Поэтому кто может прошу сделайте наработку по поводу координат на jass с комментариями. Или какую либо способность с использовании координат. Буду очень благодарен.
function Trig_Circle_Actions takes nothing returns nothing local real ux = GetWidgetX(GetTriggerUnit()) local real uy = GetWidgetY(GetTriggerUnit()) //Выбираем случайный базовый угол. local real a = GetRandomReal(.0, .20943)//bj_PI / 15 loop //Создаем эффект. call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", ux + Cos(a) * 500., uy + Sin(a) * 500.)) exitwhen a >= 6.28319//2 * bj_PI //Увеличиваем значение угла. set a = a + .20943 endloop endfunction
function InitTrig_Circle takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 15 set i = i + 1 endloop call Preload("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl") call TriggerAddCondition(trig, Condition(function Trig_Circle_Conditions)) call TriggerAddAction(trig, function Trig_Circle_Actions) set trig = null endfunction [/code][code=jass]function Trig_Square_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A001' endfunction
function Trig_Square_Actions takes nothing returns nothing local real ux = GetWidgetX(GetTriggerUnit()) local real uy = GetWidgetY(GetTriggerUnit()) //Выбираем случайный базовый угол. local real a = GetRandomReal(.0, 1.570796)//bj_PI / 2 local real x local real y local real r local real cosA local real sinA loop //Рассчитываем координаты очередной вершины многоугольника. set x = ux + Cos(a) * 500. set y = uy + Sin(a) * 500. //Проводим линию до следующей вершины. set cosA = Cos(a + 2.35619)//3 * bj_PI / 4 set sinA = Sin(a + 2.35619) set r = .0 loop call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", x + cosA * r, y + sinA * r)) //Диагональ квадрата равна стороне, умноженной на корень из двух. //Так как d / 2 = 500, то a = 500 * 2 / 1.41421 = 707.107 exitwhen r >= 707.107 set r = r + 50. endloop exitwhen a >= 6.28319//2 * bj_PI //Увеличиваем значение угла. set a = a + 1.570796 endloop endfunction
function InitTrig_Square takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 call Preload("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl") loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 15 set i = i + 1 endloop call TriggerAddCondition(trig, Condition(function Trig_Square_Conditions)) call TriggerAddAction(trig, function Trig_Square_Actions) set trig = null endfunction [/code]
Сделать меньше эффектов либо взять другой (этот достаточно сильно грузит). Просто это единственный, путь к которому я помню наизусть: код писал не в Редакторе.
Добавлено (30 Августа 2013, 10:31:52) --------------------------------------------- Ну и не забывать прелоадить при инициализации.