From: Rudolf Polzer Date: Sun, 4 Dec 2011 15:16:54 +0000 (+0100) Subject: detect local player properly X-Git-Tag: xonotic-v0.6.0~74^2~100^2~14 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=046a6ceab4ecd9bfe1d7ff64fe286190e01805b8;p=xonotic%2Fxonotic-data.pk3dir.git detect local player properly --- diff --git a/qcsrc/csqcmodel/cl_model.qc b/qcsrc/csqcmodel/cl_model.qc index 892626912..c6d2923d4 100644 --- a/qcsrc/csqcmodel/cl_model.qc +++ b/qcsrc/csqcmodel/cl_model.qc @@ -144,8 +144,8 @@ void CSQCModel_Draw() { // some nice flags for CSQCMODEL_IF and the hooks float isplayer = (self.entnum >= 1 && self.entnum <= maxclients); - float islocalplayer = (self.entnum == player_localentnum); - float isnolocalplayer = (isplayer && (self.entnum != player_localentnum)); + float islocalplayer = (self.entnum == player_localnum + 1); + float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1)); // we don't do this for the local player as that one is already handled // by CSQCPlayer_SetCamera() @@ -156,6 +156,16 @@ void CSQCModel_Draw() CSQCModel_InterpolateAnimation_Do(); { CSQCMODEL_HOOK_PREDRAW } + + // inherit draw flags easily + entity root = self; + while(root.tag_entity) + root = root.tag_entity; + if(self != root) + { + self.renderflags &~= RF_EXTERNALMODEL | RF_VIEWMODEL; + self.renderflags |= (root.renderflags & (RF_EXTERNALMODEL | RF_VIEWMODEL)); + } } void CSQCModel_Read() @@ -165,8 +175,8 @@ void CSQCModel_Read() // some nice flags for CSQCMODEL_IF and the hooks float isplayer = (self.entnum >= 1 && self.entnum <= maxclients); - float islocalplayer = (self.entnum == player_localentnum); - float isnolocalplayer = (isplayer && (self.entnum != player_localentnum)); + float islocalplayer = (self.entnum == player_localnum + 1); + float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1)); self.iflags |= IFLAG_ANGLES; // interpolate angles too @@ -213,6 +223,16 @@ void CSQCModel_Read() // relink setorigin(self, self.origin); + // set obvious render flags +#ifdef COMPAT_XON050_ENGINE + if(self.entnum == player_localentnum || self.entnum == spectatee_status) +#else + if(self.entnum == player_localentnum) +#endif + self.renderflags |= RF_EXTERNALMODEL; + else + self.renderflags &~= RF_EXTERNALMODEL; + // draw it self.drawmask = MASK_NORMAL; self.predraw = CSQCModel_Draw; diff --git a/qcsrc/csqcmodel/cl_player.qc b/qcsrc/csqcmodel/cl_player.qc index 9adfb23d9..adbe85977 100644 --- a/qcsrc/csqcmodel/cl_player.qc +++ b/qcsrc/csqcmodel/cl_player.qc @@ -221,7 +221,7 @@ void CSQCPlayer_SetCamera() void CSQCPlayer_Remove() { - if(self.entnum != player_localentnum) + if(self.entnum != player_localnum + 1) return; csqcplayer = world; cvar_clientsettemp("cl_movement_replay", "1"); @@ -229,7 +229,7 @@ void CSQCPlayer_Remove() 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) @@ -239,13 +239,6 @@ float CSQCPlayer_PreUpdate() 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;