X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fstate.qh;h=42fc450c4728f97f4e63ca6fe9b196b79f2c0a53;hb=d61f14d267403be7c2cce3f178d557884dc2bef0;hp=84bb94686bcb6097885f70e6191b738b724e6992;hpb=f3b08f163992b7be4e597cdd2297ed193d96dc1c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/state.qh b/qcsrc/common/state.qh index 84bb94686..42fc450c4 100644 --- a/qcsrc/common/state.qh +++ b/qcsrc/common/state.qh @@ -1,75 +1,51 @@ +#pragma once + /** - * Purpose: common client state, usable on client and server + * Purpose: common player state, usable on client and server * Client: singleton representing the viewed player - * Server: instance per client + * Server: instance per client, clients decoupled from players */ -CLASS(ClientState, Object) - ATTRIB(ClientState, m_client, entity, NULL) - CONSTRUCTOR(ClientState, entity client) +CLASS(PlayerState, Object) + ATTRIB(PlayerState, m_client, entity); + CONSTRUCTOR(PlayerState, entity client) { - CONSTRUCT(ClientState); + CONSTRUCT(PlayerState); this.m_client = client; } -ENDCLASS(ClientState) - -.ClientState _cs; - -#if NDEBUG -#define CS(this) (this._cs) -#else -ClientState CS(entity this) { assert(IS_CLIENT(this)); assert(this._cs); return this._cs; } -#endif - -void ClientState_attach(entity this) -{ - this._cs = NEW(ClientState, this); -} - -void ClientState_detach(entity this) -{ - remove(CS(this)); - this._cs = NULL; -} +ENDCLASS(PlayerState) +.PlayerState _ps; +#define PS(this) ((this)._ps) +// TODO: renew on death +void PlayerState_attach(entity this); +void PlayerState_detach(entity this); /** - * Purpose: common player state, usable on client and server + * Purpose: common client state, usable on client and server * Client: singleton representing the viewed player - * Server: instance per client, clients decoupled from players + * Server: instance per client */ -CLASS(PlayerState, Object) - ATTRIB(PlayerState, m_client, entity, NULL) - CONSTRUCTOR(PlayerState, entity client) +CLASS(ClientState, Object) + ATTRIB(ClientState, m_client, entity); + CONSTRUCTOR(ClientState, entity client) { - CONSTRUCT(PlayerState); + CONSTRUCT(ClientState); 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)) + METHOD(PlayerState, ps_push, void(PlayerState this, entity cl)) { - STAT(SWITCHWEAPON, this.m_client) = this.m_switchweapon.m_id; + TC(PlayerState, this); } -ENDCLASS(PlayerState) +ENDCLASS(ClientState) + +.ClientState _cs; -.PlayerState _ps; #if NDEBUG -#define PS(this) (this._ps) + #define CS(this) (this._cs) #else -PlayerState PS(entity this) { assert(IS_CLIENT(this)); return this._ps; } + ClientState CS(Client this) { TC(Client, this); assert(this._cs); return this._cs; } #endif -void PlayerState_attach(entity this) -{ - LOG_INFO("Attached\n"); - this._ps = NEW(PlayerState, this); -} - -void PlayerState_detach(entity this) -{ - if (!PS(this)) return; // initial connect - remove(PS(this)); - this._ps = NULL; -} +void ClientState_attach(entity this); +void ClientState_detach(entity this);