1 #include "resources.qh"
2 #include <common/items/item/ammo.qh>
5 /// \brief Source file that contains implementation of the resource system.
6 /// \copyright GNU GPLv2 or any later version.
8 float GetResource(entity e, int res_type)
10 return e.(GetResourceField(res_type));
13 bool SetResourceExplicit(entity e, int res_type, float amount)
15 .float res_field = GetResourceField(res_type);
16 if (e.(res_field) != amount)
18 e.(res_field) = amount;
24 void SetResource(entity e, int res_type, float amount)
26 SetResourceExplicit(e, res_type, amount);
29 void TakeResource(entity receiver, int res_type, float amount)
35 SetResource(receiver, res_type, GetResource(receiver, res_type) - amount);
38 void TakeResourceWithLimit(entity receiver, int res_type, float amount, float limit)
44 float current_amount = GetResource(receiver, res_type);
45 if (current_amount - amount < limit)
47 amount = limit + current_amount;
49 TakeResource(receiver, res_type, amount);
52 int GetResourceType(.float res_field)
56 case health: { return RES_HEALTH; }
57 case armorvalue: { return RES_ARMOR; }
58 case ammo_shells: { return RES_SHELLS; }
59 case ammo_nails: { return RES_BULLETS; }
60 case ammo_rockets: { return RES_ROCKETS; }
61 case ammo_cells: { return RES_CELLS; }
62 case ammo_plasma: { return RES_PLASMA; }
63 case ammo_fuel: { return RES_FUEL; }
65 error("GetResourceType: Invalid field.");
69 .float GetResourceField(int res_type)
73 case RES_HEALTH: { return health; }
74 case RES_ARMOR: { return armorvalue; }
75 case RES_SHELLS: { return ammo_shells; }
76 case RES_BULLETS: { return ammo_nails; }
77 case RES_ROCKETS: { return ammo_rockets; }
78 case RES_CELLS: { return ammo_cells; }
79 case RES_PLASMA: { return ammo_plasma; }
80 case RES_FUEL: { return ammo_fuel; }
82 error("GetResourceField: Invalid resource type.");