MUTATOR_HOOKABLE(SetResourceAmount, EV_SetResourceAmount);
/** Called after the amount of resource of an entity has changed. See RESOURCE_*
-constants for resource types. */
+constants for resource types. Amount wasted is the amount of resource that is
+above resource limit so it was not given. */
#define EV_ResourceAmountChanged(i, o) \
/** checked entity */ i(entity, MUTATOR_ARGV_0_entity) \
/** resource type */ i(int, MUTATOR_ARGV_1_int) \
/** amount */ i(float, MUTATOR_ARGV_2_float) \
+ /** amount wasted */ i(float, MUTATOR_ARGV_3_float) \
/**/
MUTATOR_HOOKABLE(ResourceAmountChanged, EV_ResourceAmountChanged);
}
resource_type = M_ARGV(1, int);
amount = M_ARGV(2, float);
- .float resource_field = GetResourceField(resource_type);
- if (e.(resource_field) == amount)
- {
- return;
- }
float max_amount = GetResourceLimit(e, resource_type);
+ float amount_wasted = 0;
if (amount > max_amount)
{
+ amount_wasted = amount - max_amount;
amount = max_amount;
}
+ .float resource_field = GetResourceField(resource_type);
+ if (e.(resource_field) == amount)
+ {
+ return;
+ }
e.(resource_field) = amount;
- MUTATOR_CALLHOOK(ResourceAmountChanged, e, resource_type, amount);
+ MUTATOR_CALLHOOK(ResourceAmountChanged, e, resource_type, amount,
+ amount_wasted);
}
void GiveResource(entity receiver, int resource_type, float amount)