]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
use DP_CSQC_V_CALCREFDEF
authorRudolf Polzer <divverent@xonotic.org>
Tue, 15 Nov 2011 09:36:05 +0000 (10:36 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Tue, 15 Nov 2011 09:36:05 +0000 (10:36 +0100)
qcsrc/csqcmodel/cl_model.qc
qcsrc/csqcmodel/cl_player.qc

index bd9dcfd190f7b9b7c5cafdfa5b675f03b59b3a03..ae17eedd3446d84dc8558b4d8364365da7b2a738 100644 (file)
@@ -29,6 +29,7 @@ var float autocvar_cl_nolerp = 0;
 .float csqcmodel_lerpfrac2;
 .float csqcmodel_lerpfractime;
 .float csqcmodel_lerpfrac2time;
+.float csqcmodel_teleported;
 
 void CSQCModel_InterpolateAnimation_PreNote(float sf)
 {
@@ -181,7 +182,10 @@ void CSQCModel_Read()
                setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax
 
        if(sf & PROPERTY_TELEPORTED)
+       {
                self.iflags |= IFLAG_TELEPORTED;
+               self.csqcmodel_teleported = 1;
+       }
        
        CSQCModel_InterpolateAnimation_Note(sf);
        InterpolateOrigin_Note();
index 14c3b66c78833466b06ba20a83b0c141bad8b771..452703e66dfb89befd992a7664ef972b6d136360 100644 (file)
@@ -25,7 +25,9 @@ var float autocvar_chase_active;
 var float autocvar_chase_back;
 
 .float pmove_flags;
+
 #define PMF_DUCKED 4
+#define PMF_TELEPORTED 16
 
 entity csqcplayer;
 vector csqcplayer_origin, csqcplayer_velocity;
@@ -165,23 +167,21 @@ void CSQCPlayer_SetCamera()
                // relink
                setorigin(csqcplayer, csqcplayer.origin);
 
-               org = csqcplayer.origin + self.view_ofs + CSQCPlayer_GetPredictionError();
-               ang = R_SetView3fv(VF_ANGLES);
-
-               // simulate missing engine features
-               if(autocvar_chase_active)
+               if(checkextension("DP_CSQC_V_CALCREFDEF"))
                {
-                       float dist;
-                       vector chase_dest;
-                       dist = -autocvar_chase_back - 8;
-                       makevectors(ang);
-                       chase_dest = org + v_forward * dist;
-                       traceline(org, chase_dest, MOVE_NOMONSTERS, csqcplayer);
-                       org = trace_endpos + 8 * v_forward + 4 * trace_plane_normal;
-               }
+                       // set teleport bit
+                       if(csqcplayer.csqcmodel_teleported)
+                       {
+                               csqcplayer.pmove_flags |= PMF_TELEPORTED;
+                               csqcplayer.csqcmodel_teleported = 0;
+                       }
+                       else
+                               csqcplayer.pmove_flags &~= PMF_TELEPORTED;
 
-               R_SetView3fv(VF_ORIGIN, org);
-               R_SetView3fv(VF_ANGLES, ang);
+                       V_CalcRefdef(csqcplayer);
+               }
+               else
+                       R_SetView3fv(VF_ORIGIN, csqcplayer.origin + csqcplayer.view_ofs);
 
                { CSQCPLAYER_HOOK_POSTCAMERASETUP }
        }