feat: started work on health tracking
This commit is contained in:
parent
01b69df872
commit
52ab7bea59
46
modules/wave_survival/health_status.cpp
Normal file
46
modules/wave_survival/health_status.cpp
Normal file
|
@ -0,0 +1,46 @@
|
|||
#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);
|
||||
}
|
||||
}
|
30
modules/wave_survival/health_status.h
Normal file
30
modules/wave_survival/health_status.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
#ifndef HEALTH_STATUS_H
|
||||
#define HEALTH_STATUS_H
|
||||
|
||||
#include "scene/main/node.h"
|
||||
|
||||
class HealthStatus : public Node {
|
||||
GDCLASS(HealthStatus, Node);
|
||||
static void _bind_methods();
|
||||
void ready();
|
||||
|
||||
protected:
|
||||
void _notification(int what);
|
||||
|
||||
public:
|
||||
void set_health(int health);
|
||||
int get_health() const;
|
||||
|
||||
void damage(int amount);
|
||||
void heal(int amount);
|
||||
|
||||
private:
|
||||
int max_health{ 1 };
|
||||
int health{ 1 };
|
||||
|
||||
public:
|
||||
static String sig_death;
|
||||
static String sig_health_changed;
|
||||
};
|
||||
|
||||
#endif // !HEALTH_STATUS_H
|
Loading…
Reference in a new issue