Speicher einfach die originale Distanz in einer Variable und verwende eine andere Variable für die aktuelle Distanz zwischen Kamera und Modell.
Führ' dann c_trace von my.x (my sollte natürlich das U-Boot sein) bis camera.x aus.
Wenn etwas getroffen wurde, verringerst du die aktuelle Distanz um den die Distanz, die durch c_trace ermittelt wurde. Ansonsten setzt du die aktuelle Distanz wieder auf die normale.
var dist_normal = 400;
var dist_now = 400; //aktuelle Distanz zwischen Kamera und Spieler
function test_camera()
{
camera.x = my.x - dist_now * cos(my.pan);
camera.y = my.y - dist_now * sin(my.pan);
...
c_trace(my.x, camera.x, IGNORE_ME | IGNORE_PASSABLE | IGNORE_MODELS);
if(result != 0)
{
dist_now = result;
}else
{
dist_now = dist_normal;
}
smooth(dist_now, 0.9); //<-- nicht notwendig, wird aber besser aussehen ;)
}