]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/csqcmodel_hooks.qc
csad: fix a typo breaking interpolation
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / csqcmodel_hooks.qc
index f3c1c198689ed307dbb5b9325e995ce05852e708..02ce4bcdd139ea5d4b6479e9dcb09ff5fb1994a5 100644 (file)
@@ -583,21 +583,17 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                CSQCPlayer_ForceModel_Apply(self.entnum == player_localnum + 1);
                CSQCPlayer_GlowMod_Apply();
                CSQCPlayer_LOD_Apply();
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_Apply();
                else
                {
                        // we know that frame3 and frame4 fields, used by InterpolateAnimation, are left alone - but that is all we know!
-                       float doblend = FALSE;
-                       float flg = 0;
+                       float doblend = autocvar__animblend;
+                       float onground = 0;
                        if(self == csqcplayer)
                        {
                                if(self.pmove_flags & PMF_ONGROUND)
-                                       flg |= FL_ONGROUND;
-                               // FIXME add proper detection whether csqc prediction did a jump, this one is a hack!
-                               if(self.pmove_flags & PMF_JUMP_HELD)
-                                       if(!(self.anim_prev_pmove_flags & PMF_JUMP_HELD))
-                                               animdecide_setaction(self, ANIMACTION_JUMP, TRUE);
+                                       onground = 1;
                                self.anim_prev_pmove_flags = self.pmove_flags;
                                if(self.pmove_flags & PMF_DUCKED)
                                        animdecide_setstate(self, self.anim_state | ANIMSTATE_DUCK, FALSE);
@@ -608,10 +604,11 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                        {
                                traceline(self.origin + '0 0 1' * self.maxs_z, self.origin + '0 0 1' * (self.mins_z - 4), MOVE_NOMONSTERS, self);
                                if(trace_startsolid || trace_fraction < 1)
-                                       flg |= FL_ONGROUND;
+                                       onground = 1;
                        }
                        animdecide_init(self); // FIXME only do this on model change
-                       animdecide_setframes(self, flg, doblend, anim_frame, anim_frame1time, anim_frame2, anim_frame2time);
+                       animdecide_setimplicitstate(self, onground);
+                       animdecide_setframes(self, doblend, anim_frame, anim_frame1time, anim_frame2, anim_frame2time);
                        float sf = 0;
                        if(self.anim_saveframe != self.anim_frame || self.anim_saveframe1time != self.anim_frame1time)
                                sf |= CSQCMODEL_PROPERTY_FRAME;
@@ -619,7 +616,7 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                                sf |= CSQCMODEL_PROPERTY_FRAME2;
                        self.anim_saveframe = self.anim_frame;
                        self.anim_saveframe1time = self.anim_frame1time;
-                       self.anim_saveframe = self.anim_frame2;
+                       self.anim_saveframe2 = self.anim_frame2;
                        self.anim_saveframe2time = self.anim_frame2time;
                        if(sf)
                        {
@@ -634,12 +631,14 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                        CSQCModel_InterpolateAnimation_2To4_Do();
                        if(doblend)
                        {
-                               // build a skeletonobject
+                               skeleton_from_frames(self);
                        }
                        else
                        {
-                               // remove skeletonobject if any
-                               // all is done
+                               free_skeleton_from_frames(self);
+                               // just in case, clear these
+                               self.lerpfrac3 = 0;
+                               self.lerpfrac4 = 0;
                        }
                }
        }
@@ -655,7 +654,7 @@ void CSQCModel_Hook_PreUpdate(float isnew, float isplayer, float islocalplayer)
        CSQCModel_Effects_PreUpdate();
        if(self.isplayermodel)
        {
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_PreUpdate();
                CSQCPlayer_ForceModel_PreUpdate();
        }
@@ -670,7 +669,7 @@ void CSQCModel_Hook_PostUpdate(float isnew, float isplayer, float islocalplayer)
        if(self.isplayermodel)
        {
                CSQCPlayer_ForceModel_PostUpdate();
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_PostUpdate(isnew);
        }
        CSQCModel_Effects_PostUpdate();