47 lines
1,001 B
C++
47 lines
1,001 B
C++
#include "health_status.h"
|
|
#include "macros.h"
|
|
|
|
String HealthStatus::sig_death{ "death" };
|
|
String HealthStatus::sig_health_changed{ "health_changed" };
|
|
|
|
void HealthStatus::_bind_methods() {
|
|
BIND_PROPERTY(Variant::INT, health);
|
|
|
|
ADD_SIGNAL(MethodInfo(sig_death));
|
|
ADD_SIGNAL(MethodInfo(sig_health_changed, PropertyInfo(Variant::INT, "remaining"), PropertyInfo(Variant::INT, "delta")));
|
|
}
|
|
|
|
void HealthStatus::ready() {
|
|
this->max_health = this->health;
|
|
}
|
|
|
|
void HealthStatus::_notification(int what) {
|
|
if (Engine::get_singleton()->is_editor_hint()) {
|
|
return;
|
|
}
|
|
switch (what) {
|
|
default:
|
|
return;
|
|
case NOTIFICATION_READY:
|
|
ready();
|
|
return;
|
|
}
|
|
}
|
|
|
|
void HealthStatus::set_health(int value) {
|
|
this->health = value;
|
|
}
|
|
|
|
int HealthStatus::get_health() const {
|
|
return this->health;
|
|
}
|
|
|
|
void HealthStatus::damage(int amount) {
|
|
amount = Math::abs(amount);
|
|
this->health -= amount;
|
|
emit_signal(sig_health_changed, this->health, -amount);
|
|
if (this->health <= 0) {
|
|
emit_signal(sig_death);
|
|
}
|
|
}
|