Merge branch 'master' into Mario/wepent_experimental
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / state.qc
1 #include "state.qh"
2
3 void Inventory_new(entity this);
4 void Inventory_delete(entity this);
5
6 void PlayerState_attach(entity this)
7 {
8         this._ps = NEW(PlayerState, this);
9
10         Inventory_new(this);
11 }
12
13 void PlayerState_detach(entity this)
14 {
15     PlayerState ps = PS(this);
16         if (!ps) return;  // initial connect
17         PS(this) = NULL;
18
19         if (ps.m_client != this) return;  // don't own state, spectator
20         
21         FOREACH_CLIENT(PS(it) == ps, { PS(it) = NULL; });
22         delete(ps);
23
24     Inventory_delete(this);
25 }
26
27 void GetCvars(entity this, int);
28 void DecodeLevelParms(entity this);
29 void PlayerScore_Attach(entity this);
30 void ClientData_Attach(entity this);
31 void accuracy_init(entity this);
32 void entcs_attach(entity this);
33 void playerdemo_init(entity this);
34 void anticheat_init(entity this);
35 void W_HitPlotOpen(entity this);
36 void bot_clientconnect(entity this);
37
38 void ClientState_attach(entity this)
39 {
40         this._cs = NEW(ClientState, this);
41
42     GetCvars(this, 0);  // get other cvars from player
43
44         // TODO: fold all of these into ClientState
45
46         DecodeLevelParms(this);
47
48         PlayerScore_Attach(this);
49         PlayerStats_PlayerBasic_CheckUpdate(this);
50         ClientData_Attach(this);
51         accuracy_init(this);
52         entcs_attach(this);
53         playerdemo_init(this);
54         anticheat_init(this);
55         W_HitPlotOpen(this);
56
57         bot_clientconnect(this);
58 }
59
60 void bot_clientdisconnect(entity this);
61 void W_HitPlotClose(entity this);
62 void anticheat_report_to_eventlog(entity this);
63 void playerdemo_shutdown(entity this);
64 void entcs_detach(entity this);
65 void accuracy_free(entity this);
66 void ClientData_Detach(entity this);
67 void PlayerScore_Detach(entity this);
68
69 void ClientState_detach(entity this)
70 {
71         delete(CS(this));
72         this._cs = NULL;
73
74     GetCvars(this, -1);  // free cvars
75
76     bot_clientdisconnect(this);
77
78     W_HitPlotClose(this);
79     anticheat_report_to_eventlog(this);
80     playerdemo_shutdown(this);
81     entcs_detach(this);
82     accuracy_free(this);
83     ClientData_Detach(this);
84     PlayerScore_Detach(this);
85 }