]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
csqcmodels: change to allow any csqcmodel, or any non-csqcmodel, to be the view entity
authorRudolf Polzer <divverent@alientrap.org>
Tue, 20 Dec 2011 12:54:17 +0000 (13:54 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Tue, 20 Dec 2011 12:54:17 +0000 (13:54 +0100)
qcsrc/client/miscfunctions.qc
qcsrc/csqcmodel/cl_model.qc
qcsrc/csqcmodel/cl_model.qh
qcsrc/csqcmodel/cl_player.qc
qcsrc/csqcmodel/cl_player.qh

index 6ad35331ea5e67423a75c51afca8e5c197843fcf..2bc20e9510f17f1c4513521e9cd9a217dca9933d 100644 (file)
@@ -575,7 +575,7 @@ vector getplayerorigin(float pl)
        string s;
        entity e;
 
-       e = CSQCPlayer_GetPlayer(pl + 1);
+       e = CSQCModel_server2csqc(pl + 1);
        if(e)
                return e.origin;
 
index c6d2923d4514c9cc8da2ad41caaf91ae57e326f7..00ff8a8a7fe1eeb98e43fa46c6477062068e1d27 100644 (file)
@@ -237,3 +237,8 @@ void CSQCModel_Read()
        self.drawmask = MASK_NORMAL;
        self.predraw = CSQCModel_Draw;
 }
+
+entity CSQCModel_server2csqc(float pl)
+{
+       return findfloat(world, entnum, pl); // FIXME optimize this using an array
+}
index fba21518ffc2355fa2c0aa98968e11d422cea774..5b98ae19f9813d5236b9b75b6e9187153369b285 100644 (file)
@@ -32,3 +32,5 @@ void CSQCModel_Read();
 #undef CSQCMODEL_PROPERTY
 #undef CSQCMODEL_ENDIF
 #undef CSQCMODEL_IF
+
+entity CSQCModel_server2csqc(float pl);
index 4a7cf2e1003e8ed57cebea08230d36a853748455..70d29592b8ecf725aa995767a028bb5bfb19e437 100644 (file)
@@ -196,31 +196,49 @@ void CSQCPlayer_SetCamera()
                // relink
                setorigin(self, self.origin);
 
-               // FIXME support svc_setview?
+               self.angles_y = input_angles_y;
 
-               if(checkextension("DP_CSQC_V_CALCREFDEF") || checkextension("DP_CSQC_V_CALCREFDEF_WIP1"))
-               {
-                       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 == self) && (checkextension("DP_CSQC_V_CALCREFDEF") || checkextension("DP_CSQC_V_CALCREFDEF_WIP1")))
+#else
+       if(view == self)
+#endif
+       {
+               var float refdefflags = 0;
 
-                       V_CalcRefdef(self, refdefflags);
+               if(self.csqcmodel_teleported)
+               {
+                       refdefflags |= REFDEFFLAG_TELEPORTED;
+                       self.csqcmodel_teleported = 0;
                }
-               else
-                       setproperty(VF_ORIGIN, self.origin + self.view_ofs);
-               self.angles_y = input_angles_y;
 
-               { CSQCPLAYER_HOOK_POSTCAMERASETUP }
+               if(input_buttons & 4)
+                       refdefflags |= REFDEFFLAG_JUMPING;
 
-               self = oldself;
+               V_CalcRefdef(self, refdefflags);
        }
+       else if(view)
+       {
+               setproperty(VF_ORIGIN, view.origin + view.view_ofs);
+               setproperty(VF_ANGLES, view.angles);
+       }
+       else
+       {
+               // no setup, keep engine provided values
+               // to support a legacy entity being the view
+       }
+
+       { CSQCPLAYER_HOOK_POSTCAMERASETUP }
 }
 
 void CSQCPlayer_Remove()
@@ -250,8 +268,3 @@ float CSQCPlayer_PostUpdate()
        self.entremove = CSQCPlayer_Remove;
        return 1;
 }
-
-entity CSQCPlayer_GetPlayer(float pl)
-{
-       return findfloat(world, entnum, pl); // FIXME optimize this using an array
-}
index f85c4e7cd03cf0b2d5c8427a07178d82c8281ad7..0eecabed88e05e626d5be5a98799480de7bc4a21 100644 (file)
@@ -29,4 +29,3 @@ void CSQCPlayer_SetCamera();
 float CSQCPlayer_PreUpdate();
 float CSQCPlayer_PostUpdate();
 float CSQCPlayer_IsLocalPlayer();
-entity CSQCPlayer_GetPlayer(float pl);