function baseRotate(x, y, rz) local x2 = x * cos(rz) - y * sin(rz) local y2 = x * sin(rz) + y * 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, y2, z2 = x * v / r, y * v / r, z * v / r -- Rotate vector local rx, ry, rz = getElementRotation(vehElement, "ZYX") x, y, z = rotate(x2, y2, z2, rx, ry, rz) -- Set turn velocity return setVehicleTurnVelocity(vehElement, x, y, z) end