function baseRotate(x, y, rz) local x2 = x * cos(rz) - y * sin(rz) local y2 = x * sin(rz) + x * cos(rz) return x2, y2 end -- ZYX rotation function rotate(x, y, z, rx, ry, rz) y, z = baseRotate(y, z, rx) x, z = baseRotate(-x, z, ry) x = -x x, y = baseRotate(x, y, rz) return x, y, z end function setTurnVelocityAlong(vehElement, x, y, z, v) -- Normalize vector local r = sqrt(x * x + y * y + z * z) local x2 = x / r local y2 = y / r local z2 = z / r -- Rotate vector local rx, ry, rz = getElementRotation(vehElement, "ZYX") x, y, z = rotate(x2, y2, z2, rx, ry, rz) -- Set turn velocity x, y, z = x * v, y * v, z * v return setVehicleTurnVelocity(vehElement, x, y, z) end