--DESCRIPTION: [ROTATEX=0] --DESCRIPTION: [ROTATEY=0] --DESCRIPTION: [ROTATEZ=0] --DESCRIPTION: [ROTATESPEED=100] --DESCRIPTION: [ROTATELOOPTIME=0] --DESCRIPTION: [MOVEX=0] --DESCRIPTION: [MOVEY=0] --DESCRIPTION: [MOVEZ=0] --DESCRIPTION: [MOVESPEED=100] --DESCRIPTION: [MOVELOOPTIME=0] U = require "scriptbank\\utillib" V = require "scriptbank\\vectlib" Q = require "scriptbank\\quatlib" local rad = math.rad local nmlt = {} local nrlt = {} local sax,say,saz = {},{},{} local rotate_dir = {} local move_dir = {} g_move_and_rotate = {} function move_and_rotate_properties(e, rotatex,rotatey,rotatez,rotatespeed,rotatelooptime, movex,movey,movez,movespeed,movelooptime) local mar = g_move_and_rotate[e] mar.rotatex = rotatex mar.rotatey = rotatey mar.rotatez = rotatez mar.rotatespeed = rotatespeed mar.rotatelooptime = rotatelooptime mar.movex = movex mar.movey = movey mar.movez = movez mar.movespeed = movespeed mar.movelooptime = movelooptime nmlt[e] = 0 nrlt[e] = 0 _,_,_,sax[e],say[e],saz[e] = GetEntityPosAng(e) rotate_dir[e] = 1 move_dir[e] = 1 end function move_and_rotate_init(e) Include( "utillib.lua" ) Include( "vectlib.lua" ) Include( "quatlib.lua" ) g_move_and_rotate[e] = {} move_and_rotate_properties(e, 0,0,0,100,0, 0,0,0,100,0) CollisionOff(e) GravityOff(e) end function move_and_rotate_main(e) local mar = g_move_and_rotate[e] local ft = GetElapsedTime() local x,y,z, ax,ay,az = GetEntityPosAng(e) local tx,ty,tz local nms = mar.movespeed * ft if mar.movelooptime == 0 then move_dir[e] = 1 else nmlt[e] = nmlt[e] + ft if nmlt[e] >= mar.movelooptime then move_dir[e] = move_dir[e] * -1 nmlt[e] = 0 end end local ox,oy,oz = U.Rotate3D(mar.movex,mar.movey,mar.movez, rad(sax[e]),rad(say[e]),rad(saz[e])) tx = x + ox * nms * move_dir[e] ty = y + oy * nms * move_dir[e] tz = z + oz * nms * move_dir[e] SetPosition(e, tx,ty,tz) local nrs = mar.rotatespeed * ft if mar.rotatelooptime == 0 then rotate_dir[e] = 1 else nrlt[e] = nrlt[e] + ft if nrlt[e] >= mar.rotatelooptime then rotate_dir[e] = rotate_dir[e] * -1 nrlt[e] = 0 end end RotateX(e, mar.rotatex * nrs * rotate_dir[e]) RotateY(e, mar.rotatey * nrs * rotate_dir[e]) RotateZ(e, mar.rotatez * nrs * rotate_dir[e]) --Prompt("x = "..x..", y = "..y..", z = "..z..", ax = "..ax..", ay = "..ay..", az = "..az) end