X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fwepent.qc;h=9193c4ef1638af9dd797acfe8e666ae9f2d2c1df;hb=772fb683d951a622cc8520827096ec34fdea4763;hp=44a9d71f8b428c787fe34fd53b95a589ea56a98d;hpb=a3d9634886e52c442bd9d68a86b8df77e6ed26ed;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/wepent.qc b/qcsrc/common/wepent.qc index 44a9d71f8..9193c4ef1 100644 --- a/qcsrc/common/wepent.qc +++ b/qcsrc/common/wepent.qc @@ -4,21 +4,6 @@ var = x; \ MACRO_END -/** the engine player name strings are mutable! */ -#define WEPENT_SET_MUTABLE_STRING(var, x) MACRO_BEGIN \ - if (var) strunzone(var); \ - 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; - // #define PROP(public, fld, set, sv, cl) #define WEPENT_NETPROPS(PROP) PROP(false, sv_entnum, WEPENT_SET_NORMAL, {}, {}) /* sentinel */ \ PROP(false, m_switchweapon, WEPENT_SET_NORMAL, \ @@ -34,16 +19,60 @@ MACRO_END { (viewmodels[this.m_wepent_slot]).activeweapon = Weapons_from(ReadByte()); }) \ \ PROP(false, m_alpha, WEPENT_SET_NORMAL, \ - { WriteByte(chan, this.m_alpha * 16); }, \ - { (viewmodels[this.m_wepent_slot]).alpha = ReadByte() / 16; }) \ + { WriteByte(chan, rint(bound(-1, 254 * this.m_alpha, 254) - -1)); }, \ + { (viewmodels[this.m_wepent_slot]).m_alpha = (ReadByte() + -1) / 254; }) \ \ PROP(false, vortex_charge, WEPENT_SET_NORMAL, \ - { WriteByte(chan, this.vortex_charge * 16); }, \ - { (viewmodels[this.m_wepent_slot]).vortex_charge = ReadByte() / 16; }) \ + { WriteByte(chan, this.vortex_charge * 255); }, \ + { (viewmodels[this.m_wepent_slot]).vortex_charge = ReadByte() / 255; }) \ + \ + PROP(false, oknex_charge, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.oknex_charge * 16); }, \ + { (viewmodels[this.m_wepent_slot]).oknex_charge = ReadByte() / 16; }) \ \ 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.owner.porto_v_angle.x); WriteAngle(chan, this.owner.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 = vec2(ReadAngle(), ReadAngle()); } \ + else { (viewmodels[this.m_wepent_slot]).angles_held = '0 0 0'; } }) \ + \ + PROP(false, tuba_instrument, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.tuba_instrument); }, \ + { (viewmodels[this.m_wepent_slot]).tuba_instrument = ReadByte(); }) \ + \ + PROP(false, hagar_load, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.hagar_load); }, \ + { (viewmodels[this.m_wepent_slot]).hagar_load = ReadByte(); }) \ + \ + PROP(false, minelayer_mines, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.minelayer_mines); }, \ + { (viewmodels[this.m_wepent_slot]).minelayer_mines = ReadByte(); }) \ + \ + PROP(false, arc_heat_percent, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.arc_heat_percent * 255); }, \ + { (viewmodels[this.m_wepent_slot]).arc_heat_percent = ReadByte() / 255; }) \ + \ + PROP(false, vortex_chargepool_ammo, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.vortex_chargepool_ammo * 16); }, \ + { (viewmodels[this.m_wepent_slot]).vortex_chargepool_ammo = ReadByte() / 16; }) \ + \ + PROP(false, oknex_chargepool_ammo, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.oknex_chargepool_ammo * 16); }, \ + { (viewmodels[this.m_wepent_slot]).oknex_chargepool_ammo = ReadByte() / 16; }) \ + \ + PROP(false, clip_load, WEPENT_SET_NORMAL, \ + { WriteShort(chan, this.clip_load); }, \ + { (viewmodels[this.m_wepent_slot]).clip_load = ReadShort(); }) \ + \ + PROP(false, clip_size, WEPENT_SET_NORMAL, \ + { WriteShort(chan, this.clip_size); }, \ + { (viewmodels[this.m_wepent_slot]).clip_size = ReadShort(); }) \ \ /**/ @@ -61,7 +90,7 @@ MACRO_END } WEPENT_NETPROPS(X); #undef X - if (i >= BITS(16 - 1)) LOG_FATAL("Exceeded WEPENT_NETPROPS limit"); + if (i >= BITS(24 - 1)) LOG_FATAL("Exceeded WEPENT_NETPROPS limit"); } bool _wepent_send(entity this, entity to, int sf, int chan) @@ -72,9 +101,9 @@ MACRO_END WriteHeader(chan, ENT_CLIENT_WEPENT); else WriteHeader(chan, CLIENT_WEPENT); - .entity weaponentity = this.weaponentity_fld; + .entity weaponentity = this.owner.weaponentity_fld; WriteByte(chan, weaponslot(weaponentity)); - WriteShort(chan, sf); + WriteInt24_t(chan, sf); int i = 0; #define X(public, fld, set, sv, cl) { \ if (sf & BIT(i)) { \ @@ -92,12 +121,22 @@ MACRO_END return _wepent_send(this, to, sf, MSG_ENTITY); } - void wepent_update(entity this) + void wepent_think(entity this) { + if(wasfreed(this.owner) || !this.owner) + { + delete(this); + return; + } + + this.nextthink = time; + + entity o = this.owner; + int i = 0; #define X(public, fld, set, sv, cl) { \ - if (this.w_##fld != this.fld) { \ - set(this.w_##fld, this.fld); \ + if (this.fld != o.fld) { \ + set(this.fld, o.fld); \ this.SendFlags |= BIT(i); \ } \ i += 1; \ @@ -106,9 +145,22 @@ MACRO_END #undef X } + bool wepent_customize(entity this, entity client) + { + entity e = WaypointSprite_getviewentity(client); + .entity weaponentity = this.owner.weaponentity_fld; + return e.(weaponentity) == this.owner; + } + void wepent_link(entity wep) { - Net_LinkEntity(wep, false, 0, wepent_send); + entity e = new(wepent_sender); + e.owner = wep; + setthink(e, wepent_think); + e.nextthink = time; + //e.drawonlytoclient = wep.owner; + setcefc(e, wepent_customize); + Net_LinkEntity(e, false, 0, wepent_send); } #endif @@ -117,8 +169,10 @@ MACRO_END bool ReadWepent(entity this) { - this.m_wepent_slot = ReadByte(); - int sf = ReadShort(); + int slot = ReadByte(); + this.m_wepent_slot = slot; + viewmodels[slot].m_wepent_slot = slot; + int sf = ReadInt24_t(); int i = 0; #define X(public, fld, set, sv, cl) { \ if (sf & BIT(i)) { \ @@ -134,10 +188,7 @@ MACRO_END NET_HANDLE(ENT_CLIENT_WEPENT, bool isnew) { if (isnew) - { - make_pure(this); this.classname = "wepent_receiver"; - } return ReadWepent(this); }