]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
detect local player properly
authorRudolf Polzer <divverent@xonotic.org>
Sun, 4 Dec 2011 15:16:54 +0000 (16:16 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Sun, 4 Dec 2011 15:16:54 +0000 (16:16 +0100)
qcsrc/csqcmodel/cl_model.qc
qcsrc/csqcmodel/cl_player.qc

index 8926269127496a88a0e4cff271eacc454c58bec3..c6d2923d4514c9cc8da2ad41caaf91ae57e326f7 100644 (file)
@@ -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;
index 9adfb23d93ff970edb698b7e928a1d537ab0810a..adbe85977736a2ec16fe828ced49d17c2eb0d66d 100644 (file)
@@ -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;