it's not really a lot of work - you just specify a recoil magnitude (m) - the recoil barrel speed will be something like 1/2 or 1/4 the projects velocity - you then take the barrels current normal (n)- invert the vector (n') (so n(1,1,1) would become n'(-1,-1,-1))
then figure out [RC =] OC + (n' * m) and translate the barrel down by correct fractions of RC-OC to produce the velocity
(OC = Object Center)
(RC = Recoiled Object Center)
and then there would be a "return velocity"
while it's translating the turrets rotation would probably have to be locked for simplicities sake
================
or for complexities sake -- this one makes it so you dont have to lock the position - you just have to perofmr a quick recalculation of your offset each frame [execution cost: 1 comparison, maximum of 3 mulitplications and 2 additions]
take
{ Scalar} Recoil Magnitude (m)
{ Scalar} Recoil Velocity (Vr)
{ Scalar} Return Velocity (Vc) [speed to return to normal from recoil position]
{vector} Current Normal (n) (may change) [and it's inverse n']
{ Scalar} Time since recoil event start (T)
{vector} Object Center (OC)
{ Scalar} Calculate Recoil Time (Rt = m/Vr)
{vector} Based upon T calculate Current Object Position (Position)
if (T < Rt)
Position = OC + n' * T
else
Position = (OC + n' * m) + n * (Vc * T-Rt);
=======
edit - the adititional translation can be performed by the internal T&L engine