|
楼主 |
发表于 2011-4-1 16:00:10
|
显示全部楼层
function SetGround takes real x0,real y0,real z0,real x,real y,real z,string dire,real angle returns nothing
local real new_x
local real new_y
local real new_z
local real angle_x
local real angle_y
local real angle_z_x
local real angle_z_y
set x=x-x0
set y=y-y0
set z=z-z0
if dire=="x" then
set angle_x=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_x"))
set new_y=y*Cos(-angle)-z*Sin(-angle)
set new_z=y*Sin(-angle)+z*Cos(-angle)
set new_x=x
if angle_x!=0 then
set x=new_x*Cos(angle_x)-new_z*Sin(angle_x)
set z=new_x*Sin(angle_x)+new_z*Cos(angle_x)
set new_x=x
set new_z=z
endif
set angle_y=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_y"))
set angle_y=angle_y-angle
set angle_z_x=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_x"))
set angle_z_x=angle_z_x-angle
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("angle_y"),angle_y)
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_x"),angle_z_x)
elseif dire=="y" then
set angle_y=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_y"))
set new_x=x*Cos(angle)-z*Sin(angle)
set new_z=x*Sin(angle)+z*Cos(angle)
set new_y=y
if angle_y!=0 then
set y=new_y*Cos(angle_y)-new_z*Sin(angle_y)
set z=new_y*Sin(angle_y)+new_z*Cos(angle_y)
set new_y=y
set new_z=z
endif
set angle_x=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_x"))
set angle_x=angle_x+angle
set angle_z_y=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_y"))
set angle_z_y=angle_z_y+angle
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("angle_x"),angle_x)
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_y"),angle_z_y)
else
set angle_z_y=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_y"))//y旋转导致,规定是先旋x然后y,所以回复时候是先回复y然后x。
set angle_z_x=LoadReal(udg_HT,StringHash("SetGround"),StringHash("angle_z_x"))//x旋转导致
set new_x=x*Cos(-angle)-y*Sin(-angle)
set new_y=x*Sin(-angle)+y*Cos(-angle)
set new_z=z
if angle_z_y!=0 then
set x=new_x*Cos(angle_z_y)-new_z*Sin(angle_z_y)
set z=new_x*Sin(angle_z_y)+new_z*Cos(angle_z_y)
set new_x=x
set new_z=z
call DisplayTextToPlayer(Player(0),0,0,"fff")
endif
if angle_z_x!=0 then
set y=new_y*Cos(angle_z_x)-new_z*Sin(angle_z_x)
set z=new_y*Sin(angle_z_x)+new_z*Cos(angle_z_x)
set new_y=y
set new_z=z
endif
endif
set new_x=new_x+x0
set new_y=new_y+y0
set new_z=new_z+z0
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("x"),new_x)
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("y"),new_y)
call SaveReal(udg_HT,StringHash("SetGround"),StringHash("z"),new_z)
endfunction |
|