]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/resources.qc
Merge branch 'master' into terencehill/lms_updates
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / resources.qc
1 #include "resources.qh"
2
3 #include <common/items/item/ammo.qh>
4
5 /// \file
6 /// \brief Source file that contains implementation of the resource system.
7 /// \copyright GNU GPLv2 or any later version.
8
9 float GetResource(entity e, int res_type)
10 {
11         return e.(GetResourceField(res_type));
12 }
13
14 bool SetResourceExplicit(entity e, int res_type, float amount)
15 {
16         .float res_field = GetResourceField(res_type);
17         if (e.(res_field) != amount)
18         {
19                 e.(res_field) = amount;
20                 return true;
21         }
22         return false;
23 }
24
25 void SetResource(entity e, int res_type, float amount)
26 {
27         SetResourceExplicit(e, res_type, amount);
28 }
29
30 void TakeResource(entity receiver, int res_type, float amount)
31 {
32         if (amount == 0)
33         {
34                 return;
35         }
36         SetResource(receiver, res_type, GetResource(receiver, res_type) - amount);
37 }
38
39 void TakeResourceWithLimit(entity receiver, int res_type, float amount, float limit)
40 {
41         if (amount == 0)
42         {
43                 return;
44         }
45         float current_amount = GetResource(receiver, res_type);
46         if (current_amount - amount < limit)
47         {
48                 amount = limit + current_amount;
49         }
50         TakeResource(receiver, res_type, amount);
51 }
52
53 int GetResourceType(.float res_field)
54 {
55         switch (res_field)
56         {
57                 case health: { return RES_HEALTH; }
58                 case armorvalue: { return RES_ARMOR; }
59                 case ammo_shells: { return RES_SHELLS; }
60                 case ammo_nails: { return RES_BULLETS; }
61                 case ammo_rockets: { return RES_ROCKETS; }
62                 case ammo_cells: { return RES_CELLS; }
63                 case ammo_plasma: { return RES_PLASMA; }
64                 case ammo_fuel: { return RES_FUEL; }
65         }
66         error("GetResourceType: Invalid field.");
67         return 0;
68 }
69
70 .float GetResourceField(int res_type)
71 {
72         switch (res_type)
73         {
74                 case RES_HEALTH: { return health; }
75                 case RES_ARMOR: { return armorvalue; }
76                 case RES_SHELLS: { return ammo_shells; }
77                 case RES_BULLETS: { return ammo_nails; }
78                 case RES_ROCKETS: { return ammo_rockets; }
79                 case RES_CELLS: { return ammo_cells; }
80                 case RES_PLASMA: { return ammo_plasma; }
81                 case RES_FUEL: { return ammo_fuel; }
82         }
83         error("GetResourceField: Invalid resource type.");
84         return health;
85 }