*/
var float autocvar_cl_predictionerrorcompensation = 0;
-var float autocvar_chase_active;
-var float autocvar_chase_back;
// engine stuff
.float pmove_flags;
return (self == csqcplayer);
}
-void(entity e) V_CalcRefdef = #640; // DP_CSQC_V_CALCREFDEF
+void(entity e, float fl) V_CalcRefdef = #640; // DP_CSQC_V_CALCREFDEF
void CSQCPlayer_SetCamera()
{
if(csqcplayer)
{
- vector org, ang;
entity oldself;
oldself = self;
self = csqcplayer;
+#ifdef COMPAT_XON050_ENGINE
+ if(servercommandframe == 0 || !(checkextension("DP_CSQC_V_CALCREFDEF") || checkextension("DP_CSQC_V_CALCREFDEF_WIP1")))
+#else
if(servercommandframe == 0)
+#endif
{
InterpolateOrigin_Do();
self.view_ofs = '0 0 1' * getstati(STAT_VIEWHEIGHT);
// relink
setorigin(self, self.origin);
- // FIXME support svc_setview?
+ self.angles_y = input_angles_y;
- if(checkextension("DP_CSQC_V_CALCREFDEF"))
- {
- var float refdefflags = 0;
+ self = oldself;
+ }
- if(self.csqcmodel_teleported)
- {
- refdefflags |= REFDEFFLAG_TELEPORTED;
- self.csqcmodel_teleported = 0;
- }
+ entity view;
+#ifdef COMPAT_XON050_ENGINE
+ view = CSQCModel_server2csqc((spectatee_status > 0) ? spectatee_status : player_localentnum);
+#else
+ view = CSQCModel_server2csqc(player_localentnum);
+#endif
- if(input_buttons & 4)
- refdefflags |= REFDEFFLAG_JUMPING;
+#ifdef COMPAT_XON050_ENGINE
+ if(view && !(checkextension("DP_CSQC_V_CALCREFDEF") || checkextension("DP_CSQC_V_CALCREFDEF_WIP1")))
+ {
+ // legacy code, not totally correct, but good enough for not having V_CalcRefdef
+ setproperty(VF_ORIGIN, view.origin + '0 0 1' * getstati(STAT_VIEWHEIGHT));
+ setproperty(VF_ANGLES, view.angles);
+ }
+ else
+#endif
+ if(view)
+ {
+ var float refdefflags = 0;
- V_CalcRefdef(self);
+ if(view.csqcmodel_teleported)
+ {
+ refdefflags |= REFDEFFLAG_TELEPORTED;
+ view.csqcmodel_teleported = 0;
}
- else
- R_SetView3fv(VF_ORIGIN, self.origin + self.view_ofs);
- { CSQCPLAYER_HOOK_POSTCAMERASETUP }
+ if(input_buttons & 4)
+ refdefflags |= REFDEFFLAG_JUMPING;
- self = oldself;
+ V_CalcRefdef(view, refdefflags);
}
+ else
+ {
+ // no setup, keep engine provided values
+ // to support a legacy entity being the view
+ }
+
+ { CSQCPLAYER_HOOK_POSTCAMERASETUP }
}
void CSQCPlayer_Remove()
{
- if(self.entnum != player_localentnum)
+ if(self.entnum != player_localnum + 1)
return;
csqcplayer = world;
cvar_clientsettemp("cl_movement_replay", "1");
float CSQCPlayer_PreUpdate()
{
- if(self.entnum != player_localentnum)
+ if(self.entnum != player_localnum + 1)
return 0;
cvar_clientsettemp("cl_movement_replay", "0");
if(csqcplayer_status != CSQCPLAYERSTATUS_FROMSERVER)
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;
self.entremove = CSQCPlayer_Remove;
return 1;
}
-
-entity CSQCPlayer_GetPlayer(float pl)
-{
- return findfloat(world, entnum, pl); // FIXME optimize this using an array
-}