From: Rudolf Polzer Date: Tue, 15 Nov 2011 08:16:47 +0000 (+0100) Subject: do setorigin and setmodelindex properly (preparation for LOD support) X-Git-Tag: xonotic-v0.6.0~74^2~100^2~67 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=fbda0f33f7e8cccfe0560b2c9e6a16791405fcc7;p=xonotic%2Fxonotic-data.pk3dir.git do setorigin and setmodelindex properly (preparation for LOD support) --- diff --git a/qcsrc/csqcmodel/cl_model.qc b/qcsrc/csqcmodel/cl_model.qc index e5bf9c54a..9039da49a 100644 --- a/qcsrc/csqcmodel/cl_model.qc +++ b/qcsrc/csqcmodel/cl_model.qc @@ -177,6 +177,9 @@ void CSQCModel_Read() #undef PROPERTY_SCALED #undef PROPERTY + if(sf & PROPERTY_MODELINDEX) + setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax + if(sf & PROPERTY_TELEPORTED) self.iflags |= IFLAG_TELEPORTED; @@ -191,6 +194,9 @@ void CSQCModel_Read() CSQCModel_InterpolateAnimation_Do(); #endif + // relink + setorigin(self, self.origin); + // 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 29b0ed9c3..ae24e6dd8 100644 --- a/qcsrc/csqcmodel/cl_player.qc +++ b/qcsrc/csqcmodel/cl_player.qc @@ -162,6 +162,9 @@ void CSQCPlayer_SetCamera() self = oldself; + // relink + setorigin(csqcplayer, csqcplayer.origin); + org = csqcplayer.origin + self.view_ofs + CSQCPlayer_GetPredictionError(); ang = R_SetView3fv(VF_ANGLES); diff --git a/qcsrc/csqcmodel/common.qc b/qcsrc/csqcmodel/common.qc index 452674946..a0a9cbfd7 100644 --- a/qcsrc/csqcmodel/common.qc +++ b/qcsrc/csqcmodel/common.qc @@ -10,17 +10,21 @@ #define PROPERTY_FRAME2 16384 #define PROPERTY_LERPFRAC 8192 #define PROPERTY_TELEPORTED 4096 // the "teleport bit" cancelling interpolation +#define PROPERTY_MODELINDEX 2048 +#define PROPERTY_ORIGIN 1024 +#define PROPERTY_YAW 512 +#define PROPERTY_PITCHROLL 256 #define ALLPROPERTIES_COMMON \ PROPERTY(PROPERTY_FRAME, ReadByte, WriteByte, frame) \ - PROPERTY(1, ReadCoord, WriteCoord, origin_x) \ - PROPERTY(1, ReadCoord, WriteCoord, origin_y) \ - PROPERTY(1, ReadCoord, WriteCoord, origin_z) \ - PROPERTY(2, ReadAngle, WriteAngle, angles_x) \ - PROPERTY(2, ReadAngle, WriteAngle, angles_y) \ - PROPERTY(2, ReadAngle, WriteAngle, angles_z) \ - PROPERTY(4, ReadShort, WriteShort, modelindex) \ - CSQCMODELS_EXTRAPROPERTIES(8) + PROPERTY(PROPERTY_MODELINDEX, ReadShort, WriteShort, modelindex) \ + PROPERTY(PROPERTY_ORIGIN, ReadCoord, WriteCoord, origin_x) \ + PROPERTY(PROPERTY_ORIGIN, ReadCoord, WriteCoord, origin_y) \ + PROPERTY(PROPERTY_ORIGIN, ReadCoord, WriteCoord, origin_z) \ + PROPERTY(PROPERTY_PITCHROLL, ReadAngle, WriteAngle, angles_x) \ + PROPERTY(PROPERTY_YAW, ReadAngle, WriteAngle, angles_y) \ + PROPERTY(PROPERTY_PITCHROLL, ReadAngle, WriteAngle, angles_z) \ + CSQCMODELS_EXTRAPROPERTIES #ifdef CSQCMODELS_HAVE_TWO_FRAMES .float frame3; diff --git a/qcsrc/csqcmodel/settings.qh b/qcsrc/csqcmodel/settings.qh index cb1f7822a..e5bb86bc4 100644 --- a/qcsrc/csqcmodel/settings.qh +++ b/qcsrc/csqcmodel/settings.qh @@ -5,11 +5,11 @@ //#define CSQCMODELS_SUPPORT_GETTAGINFO_BEFORE_DRAW // add properties you want networked to CSQC here -#define CSQCMODELS_EXTRAPROPERTIES(multiplier) \ - PROPERTY(multiplier*1, ReadByte, WriteByte, skin) \ - PROPERTY(multiplier*2, ReadShort, WriteShort, colormap) \ - PROPERTY(multiplier*4, ReadInt24_t, WriteInt24_t, effects) \ - PROPERTY_SCALED(multiplier*8, ReadByte, WriteByte, alpha, 255, 0, 255) +#define CSQCMODELS_EXTRAPROPERTIES \ + PROPERTY(1, ReadByte, WriteByte, skin) \ + PROPERTY(2, ReadShort, WriteShort, colormap) \ + PROPERTY(4, ReadInt24_t, WriteInt24_t, effects) \ + PROPERTY_SCALED(8, ReadByte, WriteByte, alpha, 255, 0, 255) // add hook function calls here #define CSQCMODELS_HOOK_PREUPDATE