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