also expose the last zone
authorRudolf Polzer <divverent@alientrap.org>
Sat, 4 Dec 2010 12:34:48 +0000 (13:34 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 4 Dec 2010 12:34:48 +0000 (13:34 +0100)
qcsrc/warpzonelib/common.qc
qcsrc/warpzonelib/common.qh

index 48f2098..62e7468 100644 (file)
@@ -192,6 +192,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
        vector vf, vr, vu;
 
        WarpZone_trace_firstzone = world;
        vector vf, vr, vu;
 
        WarpZone_trace_firstzone = world;
+       WarpZone_trace_lastzone = world;
        WarpZone_Trace_InitTransform();
        if(!warpzone_warpzones_exist)
        {
        WarpZone_Trace_InitTransform();
        if(!warpzone_warpzones_exist)
        {
@@ -236,6 +237,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
        if(wz)
        {
                WarpZone_trace_firstzone = wz;
        if(wz)
        {
                WarpZone_trace_firstzone = wz;
+               WarpZone_trace_lastzone = wz;
                if(zone && wz != zone)
                {
                        // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
                if(zone && wz != zone)
                {
                        // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
@@ -289,7 +291,9 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
                        break;
                }
                wz = trace_ent;
                        break;
                }
                wz = trace_ent;
-               WarpZone_trace_firstzone = wz;
+               if(!WarpZone_trace_firstzone)
+                       WarpZone_trace_firstzone = wz;
+               WarpZone_trace_lastzone = wz;
                if(zone && wz != zone)
                        break;
                WarpZone_Trace_AddTransform(wz);
                if(zone && wz != zone)
                        break;
                WarpZone_Trace_AddTransform(wz);
@@ -326,8 +330,9 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
        o0 = e.origin;
        v0 = e.velocity;
 
        o0 = e.origin;
        v0 = e.velocity;
 
-       WarpZone_Trace_InitTransform();
        WarpZone_trace_firstzone = world;
        WarpZone_trace_firstzone = world;
+       WarpZone_trace_lastzone = world;
+       WarpZone_Trace_InitTransform();
        WarpZone_tracetoss_time = 0;
        if(!warpzone_warpzones_exist)
        {
        WarpZone_tracetoss_time = 0;
        if(!warpzone_warpzones_exist)
        {
@@ -351,6 +356,7 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
        if(wz)
        {
                WarpZone_trace_firstzone = wz;
        if(wz)
        {
                WarpZone_trace_firstzone = wz;
+               WarpZone_trace_lastzone = wz;
                if(zone && wz != zone)
                {
                        // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
                if(zone && wz != zone)
                {
                        // we are in ANOTHER warpzone. This is bad. Make a zero length trace and return.
@@ -393,7 +399,9 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo
                        break;
                }
                wz = trace_ent;
                        break;
                }
                wz = trace_ent;
-               WarpZone_trace_firstzone = wz;
+               if(!WarpZone_trace_firstzone)
+                       WarpZone_trace_firstzone = wz;
+               WarpZone_trace_lastzone = wz;
                if(zone && wz != zone)
                        break;
                WarpZone_Trace_AddTransform(wz);
                if(zone && wz != zone)
                        break;
                WarpZone_Trace_AddTransform(wz);
index fce5387..72485f2 100644 (file)
@@ -31,6 +31,7 @@ typedef void(vector start, vector hit, vector end) WarpZone_trace_callback_t; //
 const var WarpZone_trace_callback_t WarpZone_trace_callback_t_null;
 entity WarpZone_trace_transform; // transform accumulator during a trace
 entity WarpZone_trace_firstzone; // first warpzone hit by a trace (can differ from the requested zone in case of _ThroughZone, the trace is aborted then)
 const var WarpZone_trace_callback_t WarpZone_trace_callback_t_null;
 entity WarpZone_trace_transform; // transform accumulator during a trace
 entity WarpZone_trace_firstzone; // first warpzone hit by a trace (can differ from the requested zone in case of _ThroughZone, the trace is aborted then)
+entity WarpZone_trace_lastzone; // first warpzone hit by a trace (can differ from the requested zone in case of _ThroughZone, the trace is aborted then)
 vector WarpZone_tracetoss_velocity; // ending velocity of a tracetoss (post-transform)
 float WarpZone_tracetoss_time; // duration of toss (approximate)
 void WarpZone_TraceBox(vector org, vector min, vector max, vector end, float nomonsters, entity forent);
 vector WarpZone_tracetoss_velocity; // ending velocity of a tracetoss (post-transform)
 float WarpZone_tracetoss_time; // duration of toss (approximate)
 void WarpZone_TraceBox(vector org, vector min, vector max, vector end, float nomonsters, entity forent);