X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcsqcmodel%2Fcl_player.qc;h=bcb0c08311c9e98f77121e46ef973e459996d517;hb=21836a0c615c95db00ec3993f13f91330d5d9d39;hp=4a7cf2e1003e8ed57cebea08230d36a853748455;hpb=f39915fb93a23a3c289000da21e7b16125b8f030;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/csqcmodel/cl_player.qc b/qcsrc/csqcmodel/cl_player.qc index 4a7cf2e10..bcb0c0831 100644 --- a/qcsrc/csqcmodel/cl_player.qc +++ b/qcsrc/csqcmodel/cl_player.qc @@ -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 && !(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, refdefflags); + if(view.csqcmodel_teleported) + { + refdefflags |= REFDEFFLAG_TELEPORTED; + view.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(view, refdefflags); } + 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 -}