In IsBarrelMoveing() function why dose not work GetSocketLocation(); instead of GetForwardVector() I mean follow:
auto BarrelForward = Barrel->GetSocketLocation(FName("Projectile")).GetSafeNormal();
return BarrelForward = Equals(AimDirection,0.01);
because from my viewpoint BarrelForwardVector and ProjectileSocketVector must have the same directon