var float autocvar_chase_active;
var float autocvar_chase_back;
+// engine stuff
.float pmove_flags;
-
+float pmove_onground; // weird engine flag we shouldn't really use but have to for now
#define PMF_DUCKED 4
-#define PMF_TELEPORTED 16
+#define PMF_ONGROUND 8
+#define REFDEFFLAG_TELEPORTED 1
+#define REFDEFFLAG_JUMPING 2
entity csqcplayer;
vector csqcplayer_origin, csqcplayer_velocity;
return (self == csqcplayer);
}
+void(entity e) V_CalcRefdef = #640; // DP_CSQC_V_CALCREFDEF
+
void CSQCPlayer_SetCamera()
{
if(csqcplayer)
{
InterpolateOrigin_Do();
self.view_ofs = '0 0 1' * getstati(STAT_VIEWHEIGHT);
+
+ // get crouch state from the server
+ if(getstati(STAT_VIEWHEIGHT) == PL_VIEW_OFS_z)
+ self.pmove_flags &~= PMF_DUCKED;
+ else if(getstati(STAT_VIEWHEIGHT) == PL_CROUCH_VIEW_OFS_z)
+ self.pmove_flags |= PMF_DUCKED;
+
+ // get onground state from the server
+ if(pmove_onground)
+ self.pmove_flags |= PMF_ONGROUND;
+ else
+ self.pmove_flags &~= PMF_ONGROUND;
+
+ CSQCPlayer_SetMinsMaxs();
+
+ // override it back just in case
+ self.view_ofs = '0 0 1' * getstati(STAT_VIEWHEIGHT);
}
else
{
else if(getstati(STAT_VIEWHEIGHT) == PL_CROUCH_VIEW_OFS_z)
self.pmove_flags |= PMF_DUCKED;
+ // get onground state from the server
+ if(pmove_onground)
+ self.pmove_flags |= PMF_ONGROUND;
+ else
+ self.pmove_flags &~= PMF_ONGROUND;
+
CSQCPlayer_SavePrediction();
}
CSQCPlayer_PredictTo(clientcommandframe);
- }
- self = oldself;
+ CSQCPlayer_SetMinsMaxs();
+ }
// relink
- setorigin(csqcplayer, csqcplayer.origin);
+ setorigin(self, self.origin);
+
+ // FIXME support svc_setview?
if(checkextension("DP_CSQC_V_CALCREFDEF"))
{
- // set teleport bit
- if(csqcplayer.csqcmodel_teleported)
+ var float refdefflags = 0;
+
+ if(self.csqcmodel_teleported)
{
- csqcplayer.pmove_flags |= PMF_TELEPORTED;
- csqcplayer.csqcmodel_teleported = 0;
+ refdefflags |= REFDEFFLAG_TELEPORTED;
+ self.csqcmodel_teleported = 0;
}
- else
- csqcplayer.pmove_flags &~= PMF_TELEPORTED;
- V_CalcRefdef(csqcplayer);
+ if(input_buttons & 4)
+ refdefflags |= REFDEFFLAG_JUMPING;
+
+ V_CalcRefdef(self);
}
else
- R_SetView3fv(VF_ORIGIN, csqcplayer.origin + csqcplayer.view_ofs);
+ R_SetView3fv(VF_ORIGIN, self.origin + self.view_ofs);
{ CSQCPLAYER_HOOK_POSTCAMERASETUP }
+
+ self = oldself;
}
}
float CSQCPlayer_PostUpdate()
{
+ /*
if(self.entnum == player_localentnum)
self.renderflags |= RF_EXTERNALMODEL;
else
self.renderflags &~= RF_EXTERNALMODEL;
+ */
+
if(self.entnum != player_localentnum)
return 0;
csqcplayer_status = CSQCPLAYERSTATUS_FROMSERVER;