#610 | Тема: [Статья]Jass поляризация
SunCreep, Дело в том, что в шар можно вписать любую фигуру, т.е. эта формула уже произвольная ;)От неё и квадрат и пирамида и т.д.
 
[jass] globals array lightning udg_l array real udg_x array real udg_y array real udg_z real udg_an string udg_s endglobals
function act takes nothing returns nothing
local integer i = 0 local real a = 275 local real r = 0 local integer an = 0 local integer an2 = 0 local real atan = 0 local real znull = (a/Sin(45*.0174532))-a local real xc = 0 local real yc = 0 local real zc = a + znull
if udg_s == "ball" then
loop exitwhen an == 360 set an2 = 0 loop exitwhen an2 == 360 set udg_x[i] = xc + (a*Cos(.0174532*an))*Cos(.0174532*an2) set udg_y[i] = yc + (a*Cos(.0174532*an))*Sin(.0174532*an2) set udg_z[i] = zc + a * Sin(.0174532*an)
set atan = bj_RADTODEG * Atan2(udg_y[i]-yc, udg_z[i]-zc) set r = SquareRoot(((a*a)-Pow(SquareRoot((xc-udg_x[i])*(xc-udg_x[i])),2))) set udg_y[i] = yc + r * Cos(.0174532 * (udg_an+atan)) set udg_z[i] = zc + r * Sin(.0174532 * (udg_an+atan))
set i = i + 1 set an2 = an2 + 36 endloop set an = an + 36 endloop
set i = 0
loop exitwhen i==110
call MoveLightningEx(udg_l[i],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+1],udg_y[i+1],udg_z[i+1]) call MoveLightningEx(udg_l[i+1],true,udg_x[i+1],udg_y[i+1],udg_z[i+1],udg_x[i+2],udg_y[i+2],udg_z[i+2]) call MoveLightningEx(udg_l[i+2],true,udg_x[i+2],udg_y[i+2],udg_z[i+2],udg_x[i+3],udg_y[i+3],udg_z[i+3]) call MoveLightningEx(udg_l[i+3],true,udg_x[i+3],udg_y[i+3],udg_z[i+3],udg_x[i+4],udg_y[i+4],udg_z[i+4]) call MoveLightningEx(udg_l[i+4],true,udg_x[i+4],udg_y[i+4],udg_z[i+4],udg_x[i+5],udg_y[i+5],udg_z[i+5]) call MoveLightningEx(udg_l[i+5],true,udg_x[i+5],udg_y[i+5],udg_z[i+5],udg_x[i+6],udg_y[i+6],udg_z[i+6]) call MoveLightningEx(udg_l[i+6],true,udg_x[i+6],udg_y[i+6],udg_z[i+6],udg_x[i+7],udg_y[i+7],udg_z[i+7]) call MoveLightningEx(udg_l[i+7],true,udg_x[i+7],udg_y[i+7],udg_z[i+7],udg_x[i+8],udg_y[i+8],udg_z[i+8]) call MoveLightningEx(udg_l[i+8],true,udg_x[i+8],udg_y[i+8],udg_z[i+8],udg_x[i+9],udg_y[i+9],udg_z[i+9]) call MoveLightningEx(udg_l[i+9],true,udg_x[i+9],udg_y[i+9],udg_z[i+9],udg_x[i],udg_y[i],udg_z[i])
set i = i + 10 endloop
set i = 0 loop exitwhen i >= 90 call MoveLightningEx(udg_l[i+100],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+10],udg_y[i+10],udg_z[i+10]) set i = i + 1 endloop
endif
if udg_s == "Cube" then
set udg_x[0] = xc + a set udg_y[0] = yc + a set udg_z[0] = znull
set udg_x[1] = xc + a set udg_y[1] = yc - a set udg_z[1] = znull
set udg_x[2] = xc - a set udg_y[2] = yc - a set udg_z[2] = znull
set udg_x[3] = xc - a set udg_y[3] = yc + a set udg_z[3] = znull
set udg_x[4] = xc + a set udg_y[4] = yc + a set udg_z[4] = znull+(a*2)
set udg_x[5] = xc + a set udg_y[5] = yc - a set udg_z[5] = znull+(a*2)
set udg_x[6] = xc - a set udg_y[6] = yc - a set udg_z[6] = znull+(a*2)
set udg_x[7] = xc - a set udg_y[7] = yc + a set udg_z[7] = znull+(a*2) set i = 0
loop set atan = bj_RADTODEG * Atan2(udg_x[i]-xc, udg_y[i]-yc) set udg_x[i] = xc + a * Cos(.0174532 * (udg_an+atan)) set udg_y[i] = yc + a * Sin(.0174532 * (udg_an+atan)) set i = i + 1 exitwhen i == 8 endloop set i = 0
loop exitwhen i >= 7 call MoveLightningEx(udg_l[i],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+1],udg_y[i+1],udg_z[i+1]) call MoveLightningEx(udg_l[i+1],true,udg_x[i+1],udg_y[i+1],udg_z[i+1],udg_x[i+2],udg_y[i+2],udg_z[i+2]) call MoveLightningEx(udg_l[i+2],true,udg_x[i+2],udg_y[i+2],udg_z[i+2],udg_x[i+3],udg_y[i+3],udg_z[i+3]) call MoveLightningEx(udg_l[i+3],true,udg_x[i+3],udg_y[i+3],udg_z[i+3],udg_x[i],udg_y[i],udg_z[i]) set i = i + 4 endloop
set i = 0 loop exitwhen i >= 4 call MoveLightningEx(udg_l[i+8],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+4],udg_y[i+4],udg_z[i+4]) set i = i + 1 endloop
endif
if udg_s == "Tripp" then
set udg_x[0] = xc + a set udg_y[0] = yc + a set udg_z[0] = znull
set udg_x[1] = xc - a set udg_y[1] = yc + a set udg_z[1] = znull
set udg_x[2] = xc set udg_y[2] = yc - a set udg_z[2] = znull
set udg_x[3] = xc set udg_y[3] = yc set udg_z[3] = zc + a/2
set i = 0 loop set atan = bj_RADTODEG * Atan2(udg_x[i]-xc, udg_z[i]-zc) set udg_x[i] = xc + a * Cos(.0174532 * (udg_an+atan)) set udg_z[i] = zc + a * Sin(.0174532 * (udg_an+atan)) set i = i + 1 exitwhen i == 4 endloop
call MoveLightningEx(udg_l[0],true,udg_x[0],udg_y[0],udg_z[0],udg_x[1],udg_y[1],udg_z[1]) call MoveLightningEx(udg_l[1],true,udg_x[1],udg_y[1],udg_z[1],udg_x[2],udg_y[2],udg_z[2]) call MoveLightningEx(udg_l[2],true,udg_x[2],udg_y[2],udg_z[2],udg_x[0],udg_y[0],udg_z[0])
call MoveLightningEx(udg_l[3],true,udg_x[0],udg_y[0],udg_z[0],udg_x[3],udg_y[3],udg_z[3]) call MoveLightningEx(udg_l[4],true,udg_x[1],udg_y[1],udg_z[1],udg_x[3],udg_y[3],udg_z[3]) call MoveLightningEx(udg_l[5],true,udg_x[2],udg_y[2],udg_z[2],udg_x[3],udg_y[3],udg_z[3])
endif set udg_an = udg_an + 3
endfunction
function InitTrig_g2 takes nothing returns nothing
local trigger t = CreateTrigger() local integer i = 0
call TriggerRegisterTimerEventPeriodic(t, 0.025) call TriggerAddAction(t, function act )
call FogEnableOff() call FogMaskEnableOff() set udg_s = "ball"
loop call AddLightningLoc( "LEAS", GetRectCenter(GetPlayableMapRect()), GetRectCenter(GetPlayableMapRect()) ) set udg_l[i] = GetLastCreatedLightningBJ() set i = i + 1 exitwhen i == 191 endloop
endfunction [/jass]
Если кому интересно конечно 
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|