1 #include "resources.qh"
4 /// \brief Source file that contains implementation of the resource system.
5 /// \copyright GNU GPLv2 or any later version.
7 float GetResourceAmount(entity e, int resource_type)
9 .float resource_field = GetResourceField(resource_type);
10 return e.(resource_field);
13 bool SetResourceAmountExplicit(entity e, int resource_type, float amount)
15 .float resource_field = GetResourceField(resource_type);
16 if (e.(resource_field) != amount)
18 e.(resource_field) = amount;
24 void SetResourceAmount(entity e, int resource_type, float amount)
26 SetResourceAmountExplicit(e, resource_type, amount);
29 void TakeResource(entity receiver, int resource_type, float amount)
35 SetResourceAmount(receiver, resource_type,
36 GetResourceAmount(receiver, resource_type) - amount);
39 void TakeResourceWithLimit(entity receiver, int resource_type, float amount,
46 float current_amount = GetResourceAmount(receiver, resource_type);
47 if (current_amount - amount < limit)
49 amount = limit + current_amount;
51 TakeResource(receiver, resource_type, amount);
54 int GetResourceType(.float resource_field)
56 switch (resource_field)
58 case health: { return RESOURCE_HEALTH; }
59 case armorvalue: { return RESOURCE_ARMOR; }
60 case ammo_shells: { return RESOURCE_SHELLS; }
61 case ammo_nails: { return RESOURCE_BULLETS; }
62 case ammo_rockets: { return RESOURCE_ROCKETS; }
63 case ammo_cells: { return RESOURCE_CELLS; }
64 case ammo_plasma: { return RESOURCE_PLASMA; }
65 case ammo_fuel: { return RESOURCE_FUEL; }
67 error("GetResourceType: Invalid field.");
71 .float GetResourceField(int resource_type)
73 switch (resource_type)
75 case RESOURCE_HEALTH: { return health; }
76 case RESOURCE_ARMOR: { return armorvalue; }
77 case RESOURCE_SHELLS: { return ammo_shells; }
78 case RESOURCE_BULLETS: { return ammo_nails; }
79 case RESOURCE_ROCKETS: { return ammo_rockets; }
80 case RESOURCE_CELLS: { return ammo_cells; }
81 case RESOURCE_PLASMA: { return ammo_plasma; }
82 case RESOURCE_FUEL: { return ammo_fuel; }
84 error("GetResourceField: Invalid resource type.");