From: Mario Date: Wed, 5 Oct 2016 12:32:41 +0000 (+1000) Subject: Support independent held porto angles X-Git-Tag: xonotic-v0.8.2~326^2~53 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=780b9d9f9de454606f60d35dc10f277484d0ba70;p=xonotic%2Fxonotic-data.pk3dir.git Support independent held porto angles --- diff --git a/qcsrc/client/defs.qh b/qcsrc/client/defs.qh index 182f6ace7..7068340d6 100644 --- a/qcsrc/client/defs.qh +++ b/qcsrc/client/defs.qh @@ -98,10 +98,6 @@ const float MAX_DAMAGEEXTRARADIUS = 16; .float damageextraradius; .void(entity this, float thisdmg, int hittype, vector org, vector thisforce) event_damage; -// only for Porto -float angles_held_status; -vector angles_held; - // weapons .bool silent; diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 9bcfd4e7a..701d40a0a 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -493,16 +493,6 @@ NET_HANDLE(ENT_CLIENT_CLIENTDATA, bool isnew) spectatorbutton_zoom = (f & 4); - if(f & 8) - { - angles_held_status = 1; - angles_held.x = ReadAngle(); - angles_held.y = ReadAngle(); - angles_held.z = 0; - } - else - angles_held_status = 0; - if(f & 16) { num_spectators = ReadByte(); diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index d8aada77e..2dcd241ec 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -386,9 +386,9 @@ void Porto_Draw(entity this) vector pos = view_origin; vector dir = view_forward; - if (angles_held_status) + if (wepent.angles_held_status) { - makevectors(angles_held); + makevectors(wepent.angles_held); dir = v_forward; } diff --git a/qcsrc/common/weapons/weapon/porto.qc b/qcsrc/common/weapons/weapon/porto.qc index eaa56e50c..8c5ade911 100644 --- a/qcsrc/common/weapons/weapon/porto.qc +++ b/qcsrc/common/weapons/weapon/porto.qc @@ -330,27 +330,21 @@ METHOD(PortoLaunch, wr_think, void(entity thiswep, entity actor, .entity weapone } else { - if(actor.porto_v_angle_held) + if(actor.(weaponentity).porto_v_angle_held) { if(!(fire & 2)) - { - actor.porto_v_angle_held = 0; - - ClientData_Touch(actor); - } + actor.(weaponentity).porto_v_angle_held = 0; } else { if(fire & 2) { - actor.porto_v_angle = actor.v_angle; - actor.porto_v_angle_held = 1; - - ClientData_Touch(actor); + actor.(weaponentity).porto_v_angle = actor.v_angle; + actor.(weaponentity).porto_v_angle_held = 1; } } - if(actor.porto_v_angle_held) - makevectors(actor.porto_v_angle); // override the previously set angles + if(actor.(weaponentity).porto_v_angle_held) + makevectors(actor.(weaponentity).porto_v_angle); // override the previously set angles if(fire & 1) if(!actor.porto_current) diff --git a/qcsrc/common/wepent.qc b/qcsrc/common/wepent.qc index 44a9d71f8..e53c19750 100644 --- a/qcsrc/common/wepent.qc +++ b/qcsrc/common/wepent.qc @@ -10,14 +10,17 @@ MACRO_END var = strzone(x); \ MACRO_END -.int w_sv_entnum; -.Weapon w_m_switchweapon; -.Weapon w_m_switchingweapon; -.Weapon w_m_weapon; -//.float w_weapon_nextthink; -.float w_m_alpha; -.float w_vortex_charge; -.int w_m_gunalign; +#ifdef SVQC + .int w_sv_entnum; + .Weapon w_m_switchweapon; + .Weapon w_m_switchingweapon; + .Weapon w_m_weapon; + //.float w_weapon_nextthink; + .float w_m_alpha; + .float w_vortex_charge; + .int w_m_gunalign; + .bool w_porto_v_angle_held; +#endif // #define PROP(public, fld, set, sv, cl) #define WEPENT_NETPROPS(PROP) PROP(false, sv_entnum, WEPENT_SET_NORMAL, {}, {}) /* sentinel */ \ @@ -44,6 +47,14 @@ MACRO_END PROP(false, m_gunalign, WEPENT_SET_NORMAL, \ { WriteByte(chan, this.m_gunalign); }, \ { (viewmodels[this.m_wepent_slot]).m_gunalign = ReadByte(); }) \ + \ + PROP(false, porto_v_angle_held, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.porto_v_angle_held); if(this.porto_v_angle_held) { \ + WriteAngle(chan, this.porto_v_angle.x); WriteAngle(chan, this.porto_v_angle.y); \ + } }, \ + { (viewmodels[this.m_wepent_slot]).angles_held_status = ReadByte(); if((viewmodels[this.m_wepent_slot]).angles_held_status) { \ + (viewmodels[this.m_wepent_slot]).angles_held_x = ReadAngle(); (viewmodels[this.m_wepent_slot]).angles_held_y = ReadAngle(); (viewmodels[this.m_wepent_slot]).angles_held_z = 0; } \ + else { (viewmodels[this.m_wepent_slot]).angles_held = '0 0 0'; } }) \ \ /**/ diff --git a/qcsrc/common/wepent.qh b/qcsrc/common/wepent.qh index 0064b1f61..32f0cab3e 100644 --- a/qcsrc/common/wepent.qh +++ b/qcsrc/common/wepent.qh @@ -27,4 +27,8 @@ REGISTER_NET_TEMP(CLIENT_WEPENT) .Weapon activeweapon; .Weapon switchingweapon; .Weapon switchweapon; + + // only for Porto + .bool angles_held_status; + .vector angles_held; #endif diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index 13f6bbad3..1235f86bf 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -112,7 +112,6 @@ bool ClientData_Send(entity this, entity to, int sf) if (e.race_completed) sf |= 1; // forced scoreboard if (to.spectatee_status) sf |= 2; // spectator ent number follows if (e.zoomstate) sf |= 4; // zoomed - if (e.porto_v_angle_held) sf |= 8; // angles held if (autocvar_sv_showspectators) sf |= 16; // show spectators WriteHeader(MSG_ENTITY, ENT_CLIENT_CLIENTDATA); @@ -122,11 +121,6 @@ bool ClientData_Send(entity this, entity to, int sf) { WriteByte(MSG_ENTITY, to.spectatee_status); } - if (sf & 8) - { - WriteAngle(MSG_ENTITY, e.v_angle.x); - WriteAngle(MSG_ENTITY, e.v_angle.y); - } if(sf & 16) {