X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fstate.qh;h=7656d47e66ac566d2f1ae394204ef1716d0db97a;hb=61fe092d7042eb1bf8aa8b4e35a807775ae7803a;hp=e2ba5f3858b1dcef031e5009b4fcab9d7d7cde76;hpb=cecae3473b79a457a2bd385938eea2f7e0037dee;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/state.qh b/qcsrc/common/state.qh index e2ba5f385..7656d47e6 100644 --- a/qcsrc/common/state.qh +++ b/qcsrc/common/state.qh @@ -6,43 +6,20 @@ * Server: instance per client, clients decoupled from players */ CLASS(PlayerState, Object) - ATTRIB(PlayerState, m_client, entity, NULL) + ATTRIB(PlayerState, m_client, entity); CONSTRUCTOR(PlayerState, entity client) { CONSTRUCT(PlayerState); this.m_client = client; } - ATTRIB(PlayerState, m_switchingweapon, Weapon, Weapons_from(-1)) - ATTRIB(PlayerState, m_switchweapon, Weapon, Weapons_from(-1)) - ATTRIB(PlayerState, m_weapon, Weapon, Weapons_from(-1)) - METHOD(PlayerState, ps_push, void(PlayerState this, entity cl)) - { - STAT(ACTIVEWEAPON, cl) = this.m_weapon.m_id; - STAT(SWITCHINGWEAPON, cl) = this.m_switchingweapon.m_id; - STAT(SWITCHWEAPON, cl) = this.m_switchweapon.m_id; - } ENDCLASS(PlayerState) .PlayerState _ps; -#if NDEBUG - #define PS(this) (this._ps) -#else - PlayerState PS(entity this) { assert(IS_CLIENT(this)); return this._ps; } -#endif - -void PlayerState_attach(entity this) -{ - // TODO: dynamic - // this._ps = NEW(PlayerState, this); -} +#define PS(this) ((this)._ps) -void PlayerState_detach(entity this) -{ - // TODO: dynamic - // if (!PS(this)) return; // initial connect - // remove(PS(this)); - // this._ps = NULL; -} +// TODO: renew on death +void PlayerState_attach(entity this); +void PlayerState_detach(entity this); /** * Purpose: common client state, usable on client and server @@ -50,12 +27,16 @@ void PlayerState_detach(entity this) * Server: instance per client */ CLASS(ClientState, Object) - ATTRIB(ClientState, m_client, entity, NULL) + ATTRIB(ClientState, m_client, entity); CONSTRUCTOR(ClientState, entity client) { CONSTRUCT(ClientState); this.m_client = client; } + METHOD(PlayerState, ps_push, void(PlayerState this, entity cl)) + { + TC(PlayerState, this); + } ENDCLASS(ClientState) .ClientState _cs; @@ -63,18 +44,11 @@ ENDCLASS(ClientState) #if NDEBUG #define CS(this) (this._cs) #else - ClientState CS(entity this) { assert(IS_CLIENT(this)); assert(this._cs); return this._cs; } + ClientState CS(Client this) { TC(Client, this); assert(this._cs); return this._cs; } #endif -void ClientState_attach(entity this) -{ - this._cs = NEW(ClientState, this); - this._ps = NEW(PlayerState, this); // TODO: dynamic -} +// NOTE: this exists to ease migration later on - ClientState does not exist early enough for replicated cvars! +#define CS_CVAR(this) (this) -void ClientState_detach(entity this) -{ - remove(CS(this)); - this._cs = NULL; - this._ps = NULL; // TODO: dynamic -} +void ClientState_attach(entity this); +void ClientState_detach(entity this);