X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcsqcmodellib%2Fcl_model.qc;h=83355d654bf7386209e1e700f4b51f72460caedf;hb=ba0988ca930f50286f8cf3b6c114ebc6584964af;hp=c4882d8d20c0c4da5a28e87a02adf6e22d7db6c7;hpb=d15a2b33681ddfeb3d734846505fd55339ac4054;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/csqcmodellib/cl_model.qc b/qcsrc/csqcmodellib/cl_model.qc index c4882d8d2..83355d654 100644 --- a/qcsrc/csqcmodellib/cl_model.qc +++ b/qcsrc/csqcmodellib/cl_model.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 Rudolf Polzer + * Copyright (c) 2011 Rudolf PolzerCSQCModel_InterpolateAnimation_2To4_PreNote * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -19,16 +19,29 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ - -var float autocvar_cl_lerpanim_maxdelta_framegroups = 0.1; -var float autocvar_cl_nolerp = 0; + #if defined(CSQC) + #include "../dpdefs/csprogsdefs.qc" + #include "../client/Defs.qc" + #include "../common/util.qh" + #include "../common/animdecide.qh" + #include "interpolate.qh" + #include "../common/csqcmodel_settings.qh" + #include "common.qh" + #include "cl_model.qh" + #include "cl_player.qh" + #elif defined(MENUQC) + #elif defined(SVQC) + #endif + +float autocvar_cl_lerpanim_maxdelta_framegroups = 0.1; +float autocvar_cl_nolerp = 0; .float csqcmodel_lerpfrac; .float csqcmodel_lerpfrac2; .float csqcmodel_lerpfractime; .float csqcmodel_lerpfrac2time; -void CSQCModel_InterpolateAnimation_2To4_PreNote(float sf) +void CSQCModel_InterpolateAnimation_2To4_PreNote(int sf) { if(sf & CSQCMODEL_PROPERTY_FRAME) { @@ -47,7 +60,7 @@ void CSQCModel_InterpolateAnimation_2To4_PreNote(float sf) self.lerpfrac = self.csqcmodel_lerpfrac; } } -void CSQCModel_InterpolateAnimation_1To2_PreNote(float sf) +void CSQCModel_InterpolateAnimation_1To2_PreNote(int sf) { if(sf & CSQCMODEL_PROPERTY_FRAME) { @@ -64,7 +77,7 @@ void CSQCModel_InterpolateAnimation_PreNote(float sf) #endif } -void CSQCModel_InterpolateAnimation_2To4_Note(float sf, float set_times) +void CSQCModel_InterpolateAnimation_2To4_Note(int sf, float set_times) { if(sf & CSQCMODEL_PROPERTY_FRAME) { @@ -83,7 +96,7 @@ void CSQCModel_InterpolateAnimation_2To4_Note(float sf, float set_times) self.csqcmodel_lerpfractime = time; } } -void CSQCModel_InterpolateAnimation_1To2_Note(float sf, float set_times) +void CSQCModel_InterpolateAnimation_1To2_Note(int sf, float set_times) { if(sf & CSQCMODEL_PROPERTY_FRAME) { @@ -94,9 +107,9 @@ void CSQCModel_InterpolateAnimation_1To2_Note(float sf, float set_times) void CSQCModel_InterpolateAnimation_Note(float sf) { #ifdef CSQCMODEL_HAVE_TWO_FRAMES - CSQCModel_InterpolateAnimation_2To4_Note(sf, TRUE); + CSQCModel_InterpolateAnimation_2To4_Note(sf, true); #else - CSQCModel_InterpolateAnimation_1To2_Note(sf, TRUE); + CSQCModel_InterpolateAnimation_1To2_Note(sf, true); #endif } @@ -173,9 +186,9 @@ void CSQCModel_InterpolateAnimation_Do() void CSQCModel_Draw() { // some nice flags for CSQCMODEL_IF and the hooks - local noref float isplayer = (self.entnum >= 1 && self.entnum <= maxclients); - local noref float islocalplayer = (self.entnum == player_localnum + 1); - local noref float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1)); + bool isplayer = (self.entnum >= 1 && self.entnum <= maxclients); + noref bool islocalplayer = (self.entnum == player_localnum + 1); + noref bool 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() @@ -192,7 +205,7 @@ void CSQCModel_Draw() root = root.tag_entity; if(self != root) { - self.renderflags &~= RF_EXTERNALMODEL | RF_VIEWMODEL; + self.renderflags &= ~(RF_EXTERNALMODEL | RF_VIEWMODEL); self.renderflags |= (root.renderflags & (RF_EXTERNALMODEL | RF_VIEWMODEL)); } @@ -202,13 +215,12 @@ void CSQCModel_Draw() void CSQCModel_Read(float isnew) { - float sf; - sf = ReadShort(); + int sf = ReadInt24_t(); // some nice flags for CSQCMODEL_IF and the hooks - local noref float isplayer = (self.entnum >= 1 && self.entnum <= maxclients); - local noref float islocalplayer = (self.entnum == player_localnum + 1); - local noref float isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1)); + bool isplayer = (self.entnum >= 1 && self.entnum <= maxclients); + bool islocalplayer = (self.entnum == player_localnum + 1); + noref bool isnolocalplayer = (isplayer && (self.entnum != player_localnum + 1)); self.classname = "csqcmodel"; self.iflags |= IFLAG_ORIGIN; // interpolate origin too @@ -236,15 +248,18 @@ void CSQCModel_Read(float isnew) #undef CSQCMODEL_IF if(sf & CSQCMODEL_PROPERTY_MODELINDEX) + { + vector pmin = self.mins, pmax = self.maxs; setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax - // FIXME do we WANT this to override mins/maxs? + setsize(self, pmin, pmax); + } if(sf & CSQCMODEL_PROPERTY_TELEPORTED) { self.iflags |= IFLAG_TELEPORTED; self.csqcmodel_teleported = 1; } - + CSQCModel_InterpolateAnimation_Note(sf); InterpolateOrigin_Note(); CSQCPlayer_PostUpdate(); @@ -260,14 +275,10 @@ void CSQCModel_Read(float isnew) 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; + self.renderflags &= ~RF_EXTERNALMODEL; // draw it self.drawmask = MASK_NORMAL;