]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Support independent held porto angles
authorMario <mario@smbclan.net>
Wed, 5 Oct 2016 12:32:41 +0000 (22:32 +1000)
committerMario <mario@smbclan.net>
Wed, 5 Oct 2016 12:32:41 +0000 (22:32 +1000)
qcsrc/client/defs.qh
qcsrc/client/main.qc
qcsrc/client/view.qc
qcsrc/common/weapons/weapon/porto.qc
qcsrc/common/wepent.qc
qcsrc/common/wepent.qh
qcsrc/server/client.qc

index 182f6ace743c71437f9a9f6fb6d323abf6bf21cc..7068340d6ef8d646040e2884ad74f0e5422ca200 100644 (file)
@@ -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;
 
index 9bcfd4e7a9c58571bbafdba76dfb5b247a1ba230..701d40a0aa4bf2b3b1b6b43fe40f339e209d8e35 100644 (file)
@@ -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();
index d8aada77ec3e14b825f092f31e49e38a5cb04201..2dcd241eca89ec048bdee8cf1dc960958f9b9a88 100644 (file)
@@ -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;
                }
 
index eaa56e50cd276d0311f6d58ba2327f94d32c9a23..8c5ade911cd9787f4340fbc3b1bf136d9506411d 100644 (file)
@@ -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)
index 44a9d71f8b428c787fe34fd53b95a589ea56a98d..e53c197501e3d26cc238eda5a80595d04b214525 100644 (file)
@@ -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'; } }) \
     \
        /**/
 
index 0064b1f61c9a532628b6e4d5b2924291b66d8fba..32f0cab3e062f618c7968c22277af788421e1d8f 100644 (file)
@@ -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
index 13f6bbad39cf80883c611f3ecd70f6363b8b2450..1235f86bfd35496adec39f5d83db76b06af8e740 100644 (file)
@@ -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)
        {