]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/state.qh
Move client setup to ClientState_attach
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / state.qh
index e2ba5f3858b1dcef031e5009b4fcab9d7d7cde76..fcc3656b8dcd710c76305925e1868e18bef0777b 100644 (file)
@@ -30,18 +30,25 @@ ENDCLASS(PlayerState)
        PlayerState PS(entity this) { assert(IS_CLIENT(this)); return this._ps; }
 #endif
 
+void Inventory_new(entity this);
+void Inventory_delete(entity this);
+
+// TODO: renew on death
+
 void PlayerState_attach(entity this)
 {
-       // TODO: dynamic
-       // this._ps = NEW(PlayerState, this);
+       this._ps = NEW(PlayerState, this);
+
+       Inventory_new(this);
 }
 
 void PlayerState_detach(entity this)
 {
-       // TODO: dynamic
-       // if (!PS(this)) return;  // initial connect
-       // remove(PS(this));
-       // this._ps = NULL;
+       if (!PS(this)) return;  // initial connect
+       remove(PS(this));
+       this._ps = NULL;
+
+    Inventory_delete(self);
 }
 
 /**
@@ -66,15 +73,64 @@ ENDCLASS(ClientState)
        ClientState CS(entity this) { assert(IS_CLIENT(this)); assert(this._cs); return this._cs; }
 #endif
 
+void GetCvars(int);
+void DecodeLevelParms(entity this);
+void PlayerScore_Attach(entity this);
+void ClientData_Attach(entity this);
+void accuracy_init(entity this);
+void entcs_attach(entity this);
+void playerdemo_init(entity this);
+void anticheat_init(entity this);
+void W_HitPlotOpen(entity this);
+void bot_clientconnect(entity this);
+
 void ClientState_attach(entity this)
 {
        this._cs = NEW(ClientState, this);
-       this._ps = NEW(PlayerState, this);  // TODO: dynamic
+
+    GetCvars(0);  // get other cvars from player
+
+       // TODO: xonstat elo.txt support, until then just 404s
+       if (false && IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); }
+
+       // TODO: fold all of these into ClientState
+
+       DecodeLevelParms(this);
+
+       PlayerScore_Attach(this);
+       ClientData_Attach(this);
+       accuracy_init(this);
+       entcs_attach(this);
+       playerdemo_init(this);
+       anticheat_init(this);
+       W_HitPlotOpen(this);
+
+       bot_clientconnect(this);
 }
 
+void bot_clientdisconnect();
+void W_HitPlotClose(entity this);
+void anticheat_report();
+void playerdemo_shutdown();
+void entcs_detach(entity this);
+void accuracy_free(entity this);
+void ClientData_Detach(entity this);
+void PlayerScore_Detach(entity this);
+
 void ClientState_detach(entity this)
 {
        remove(CS(this));
        this._cs = NULL;
-       this._ps = NULL;  // TODO: dynamic
+
+    GetCvars(-1);  // free cvars
+
+    bot_clientdisconnect();
+
+    W_HitPlotClose(this);
+    anticheat_report();
+    playerdemo_shutdown();
+    entcs_detach(this);
+    accuracy_free(self);
+    ClientData_Detach(this);
+    PlayerScore_Detach(self);
 }