From: Rudolf Polzer Date: Sat, 12 Nov 2011 16:38:10 +0000 (+0100) Subject: VERY simple and stupid code to make the player entity handled by this, is currently... X-Git-Tag: xonotic-v0.6.0~74^2~100^2~103 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=357918379edc618c840cc761f051e7281c232cda;p=xonotic%2Fxonotic-data.pk3dir.git VERY simple and stupid code to make the player entity handled by this, is currently broken --- diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 326bae22b..51d1694cb 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -1008,6 +1008,7 @@ void CSQC_Ent_Update(float bIsNewEntity) case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break; case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break; case ENT_CLIENT_TURRET: ent_turret(); break; + case ENT_CLIENT_MODEL: CSQCModel_Read(); break; default: //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype)); error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname)); diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 2d79f8f10..a8acc0869 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -398,6 +398,12 @@ void CSQC_UpdateView(float w, float h) WaypointSprite_Load(); + if((e = findfloat(world, entnum, player_localentnum))) + { + R_SetView3fv(VF_ORIGIN, e.origin + e.view_ofs); + R_SetView3fv(VF_ANGLES, e.angles); + } + if(spectatee_status) myteam = GetPlayerColor(spectatee_status - 1); else diff --git a/qcsrc/client/progs.src b/qcsrc/client/progs.src index f650d04bd..41671f6c3 100644 --- a/qcsrc/client/progs.src +++ b/qcsrc/client/progs.src @@ -35,6 +35,7 @@ tturrets.qh ../server/movelib.qc main.qh vehicles/vehicles.qh +../common/csqcmodel.qh sortlist.qc miscfunctions.qc @@ -56,6 +57,7 @@ projectile.qc gibs.qc damage.qc casings.qc +../common/csqcmodel.qc effects.qc wall.qc modeleffects.qc diff --git a/qcsrc/common/csqcmodel.qc b/qcsrc/common/csqcmodel.qc new file mode 100644 index 000000000..cf5bce68c --- /dev/null +++ b/qcsrc/common/csqcmodel.qc @@ -0,0 +1,106 @@ +// generic CSQC model code + +.vector glowmod; +.vector view_ofs; + +#define ALLPROPERTIES \ + 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) \ + PROPERTY(8, ReadByte, WriteByte, frame) \ + PROPERTY(16, ReadByte, WriteByte, skin) \ + PROPERTY(32, ReadInt24_t, WriteInt24_t, effects) \ + PROPERTY_SCALED(64, ReadByte, WriteByte, alpha, 255, 0, 255) \ + PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_x, 32, 0, 255) \ + PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_y, 32, 0, 255) \ + PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_z, 32, 0, 255) \ + PROPERTY(256, ReadChar, WriteChar, view_ofs_z) + +#ifdef SVQC + +#define PROPERTY(flag,r,w,f) \ + .float csqcmodel_##f; +#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f) + ALLPROPERTIES +#undef PROPERTY_SCALED +#undef PROPERTY + +float CSQCModel_Send(entity to, float sf) +{ + WriteByte(MSG_ENTITY, ENT_CLIENT_MODEL); + WriteShort(MSG_ENTITY, sf); + +#define PROPERTY(flag,r,w,f) \ + if(sf & flag) \ + { \ + w(MSG_ENTITY, self.csqcmodel_##f); \ + } +#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f) + ALLPROPERTIES +#undef PROPERTY_SCALED +#undef PROPERTY + + return TRUE; +} + +void CSQCModel_CheckUpdate() +{ + float tmp; +#define PROPERTY(flag,r,w,f) \ + tmp = self.f; \ + if(tmp != self.csqcmodel_##f) \ + { \ + self.csqcmodel_##f = tmp; \ + self.SendFlags |= flag; \ + } +#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) \ + tmp = bound(mi, s * self.f, ma); \ + if(tmp != self.csqcmodel_##f) \ + { \ + self.csqcmodel_##f = tmp; \ + self.SendFlags |= flag; \ + } + ALLPROPERTIES +#undef PROPERTY_SCALED +#undef PROPERTY +} + +void CSQCModel_LinkEntity() +{ + Net_LinkEntity(self, TRUE, 0, CSQCModel_Send); +} + +#endif + +#ifdef CSQC + +void CSQCModel_Read() +{ + float sf; + sf = ReadShort(); + + print("Read an update of flags: ", ftos(sf), "\n"); + +#define PROPERTY(flag,r,w,f) \ + if(sf & flag) \ + self.f = r(); +#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) \ + if(sf & flag) \ + self.f = r() / s; + ALLPROPERTIES +#undef PROPERTY_SCALED +#undef PROPERTY + + // if it is the local player, prediction + // interpolation + + // CSQC_UpdateView has to set camera to this if this is the local player + + // draw it +} + +#endif diff --git a/qcsrc/common/csqcmodel.qh b/qcsrc/common/csqcmodel.qh new file mode 100644 index 000000000..e8387a268 --- /dev/null +++ b/qcsrc/common/csqcmodel.qh @@ -0,0 +1,10 @@ +// generic CSQC model code + +#ifdef SVQC +void CSQCModel_CheckUpdate(); +void CSQCModel_LinkEntity(); +#endif + +#ifdef CSQC +void CSQCModel_Read(); +#endif diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 7445c6b38..352be7210 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1795,6 +1795,8 @@ void ClientConnect (void) if(!autocvar_g_campaign) Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), autocvar_welcome_message_time, 0); + + CSQCModel_LinkEntity(); } /* @@ -3262,4 +3264,6 @@ void PlayerPostThink (void) if(g_race) dprint(sprintf("%f %.6f\n", time, race_GetFractionalLapCount(self))); */ + + CSQCModel_CheckUpdate(); } diff --git a/qcsrc/server/csqcmodel.qc b/qcsrc/server/csqcmodel.qc deleted file mode 100644 index 5ef8d2b11..000000000 --- a/qcsrc/server/csqcmodel.qc +++ /dev/null @@ -1,97 +0,0 @@ -// generic CSQC model code - -#define ALLPROPERTIES \ - 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) \ - PROPERTY(8, ReadByte, WriteByte, frame) \ - PROPERTY(16, ReadByte, WriteByte, skin) \ - PROPERTY(32, ReadInt24_t, WriteInt24_t, effects) \ - PROPERTY_SCALED(64, ReadByte, WriteByte, alpha, 255, 0, 255) \ - PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_x, 32, 0, 255) \ - PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_y, 32, 0, 255) \ - PROPERTY_SCALED(128, ReadByte, WriteByte, glowmod_z, 32, 0, 255) - -#ifdef SVQC - -#define PROPERTY(flag,r,w,f) \ - .float csqcmodel_##f; -#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f) - ALLPROPERTIES -#undef PROPERTY_SCALED -#undef PROPERTY - -float CSQCModel_Send(entity to, float sf) -{ - WriteByte(MSG_ENTITY, ENT_CLIENT_MODEL); - WriteShort(MSG_ENTITY, sf); - -#define PROPERTY(flag,r,w,f) \ - if(sf & flag) \ - { \ - w(MSG_ENTITY, self.csqcmodel_##f); \ - } -#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) PROPERTY(flag,r,w,f) - ALLPROPERTIES -#undef PROPERTY_SCALED -#undef PROPERTY - - return TRUE; -} - -void CSQCModel_CheckUpdate() -{ - float tmp; -#define PROPERTY(flag,r,w,f) \ - tmp = self.f; \ - if(tmp != self.csqcmodel_##f) \ - { \ - self.csqcmodel_##f = tmp; \ - self.SendFlags |= flag; \ - } -#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) \ - tmp = bound(mi, s * self.f, ma); \ - if(tmp != self.csqcmodel_##f) \ - { \ - self.csqcmodel_##f = tmp; \ - self.SendFlags |= flag; \ - } - ALLPROPERTIES -#undef PROPERTY_SCALED -#undef PROPERTY -} - -void CSQCModel_LinkEntity() -{ - Net_LinkEntity(self, TRUE, 0, CSQCModel_Send); -} - -#endif - -#ifdef CSQC - -void CSQCModel_Read() -{ - float sf; - sf = ReadShort(); - -#define PROPERTY(flag,r,w,f) \ - if(sf & flag) \ - self.f = r(); -#define PROPERTY_SCALED(flag,r,w,f,s,mi,ma) \ - if(sf & flag) \ - self.f = r() / s; - ALLPROPERTIES -#undef PROPERTY_SCALED -#undef PROPERTY - - // if it is the local player, prediction and make sure camera gets set up by it - // interpolation - // draw it -} - -#endif diff --git a/qcsrc/server/csqcmodel.qh b/qcsrc/server/csqcmodel.qh deleted file mode 100644 index e8387a268..000000000 --- a/qcsrc/server/csqcmodel.qh +++ /dev/null @@ -1,10 +0,0 @@ -// generic CSQC model code - -#ifdef SVQC -void CSQCModel_CheckUpdate(); -void CSQCModel_LinkEntity(); -#endif - -#ifdef CSQC -void CSQCModel_Read(); -#endif diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index f3bcc0685..a602f3220 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -40,7 +40,7 @@ campaign.qh accuracy.qh csqcprojectile.qh -csqcmodel.qh +../common/csqcmodel.qh csqceffects.qc anticheat.qh @@ -179,7 +179,7 @@ target_music.qc accuracy.qc -csqcmodel.qc +../common/csqcmodel.qc csqcprojectile.qc playerdemo.qc