]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
also properly calc WarpZone_TraceToss_velocity
authorRudolf Polzer <divverent@alientrap.org>
Sun, 15 Aug 2010 12:51:52 +0000 (14:51 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sun, 15 Aug 2010 12:51:52 +0000 (14:51 +0200)
qcsrc/warpzonelib/common.qc

index cf8da710dc7c1e6a3bbecb8259a988bfd1cca002..d9af61894f5a515be2a5d1932e8bc62146018d68 100644 (file)
@@ -304,6 +304,7 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
        entity wz;
 
        o0 = e.origin;
+       v0 = e.velocity;
 
        WarpZone_Trace_InitTransform();
        WarpZone_tracetoss_time = 0;
@@ -314,13 +315,15 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
                        cb(e.origin, trace_endpos, trace_endpos);
                dt = vlen(e.origin - o0) / vlen(e.velocity);
                WarpZone_tracetoss_time += dt;
+               e.velocity_z -= dt * g;
+               WarpZone_tracetoss_velocity = e.velocity;
+               e.velocity = v0;
                return;
        }
 
        vf = v_forward;
        vr = v_right;
        vu = v_up;
-       v0 = e.velocity;
 
        // if starting in warpzone, first transform
        wz = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
@@ -355,7 +358,7 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
                e.origin = trace_endpos;
                dt = vlen(e.origin - o0) / vlen(e.velocity);
                WarpZone_tracetoss_time += dt;
-               e.velocity_z -= WarpZone_tracetoss_time * g;
+               e.velocity_z -= dt * g;
                if(trace_fraction >= 1)
                        break;
                if(trace_ent.classname != "trigger_warpzone")