X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fwepent.qc;h=8d74a7b3272ffc2da3ef3650fff42a223357cf16;hb=6d100a71dd5633df98e3f11dbddfcb6b9546c9d6;hp=cfd846d0c5df19179be8e4a48e5caab4f49dca8c;hpb=123a2aeb0c53addf29611e4e2cb27d4dae8ad968;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/wepent.qc b/qcsrc/common/wepent.qc index cfd846d0c..8d74a7b32 100644 --- a/qcsrc/common/wepent.qc +++ b/qcsrc/common/wepent.qc @@ -4,19 +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; - // #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, \ @@ -32,8 +19,28 @@ 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]).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; }) \ + \ + 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'; } }) \ + \ + PROP(false, tuba_instrument, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.tuba_instrument); }, \ + { (viewmodels[this.m_wepent_slot]).tuba_instrument = ReadByte(); }) \ \ /**/ @@ -62,7 +69,7 @@ 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); int i = 0; @@ -82,12 +89,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; \ @@ -96,9 +113,22 @@ MACRO_END #undef X } + bool wepent_customize(entity this, entity client) + { + //entity e = WaypointSprite_getviewentity(client); + .entity weaponentity = this.owner.weaponentity_fld; + return client.(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 @@ -107,7 +137,9 @@ MACRO_END bool ReadWepent(entity this) { - this.m_wepent_slot = ReadByte(); + int slot = ReadByte(); + this.m_wepent_slot = slot; + viewmodels[slot].m_wepent_slot = slot; int sf = ReadShort(); int i = 0; #define X(public, fld, set, sv, cl) { \ @@ -124,10 +156,7 @@ MACRO_END NET_HANDLE(ENT_CLIENT_WEPENT, bool isnew) { if (isnew) - { - make_pure(this); this.classname = "wepent_receiver"; - } return ReadWepent(this); }