feat: set enemy health to ignore short-term values
This commit is contained in:
parent
8fe3bf10a8
commit
667814906e
|
@ -36,8 +36,7 @@ actions_inspector = [3, 2, 4, 5, 1]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="EntityHealth" type="EntityHealth" parent="."]
|
[node name="EntityHealth" type="EntityHealth" parent="."]
|
||||||
injury_max = 20
|
injury_max = 100
|
||||||
wounds_max = 20
|
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
|
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
|
||||||
|
|
|
@ -29,8 +29,8 @@ void EntityHealth::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityHealth::_enter_tree() {
|
void EntityHealth::_enter_tree() {
|
||||||
this->injury_current = this->injury_max;
|
this->injury_current = gd::Math::max(1, this->injury_max);
|
||||||
this->wounds_current = this->wounds_max;
|
this->wounds_current = gd::Math::max(0, this->wounds_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityHealth::damaged_by(int amount, Unit *source) {
|
void EntityHealth::damaged_by(int amount, Unit *source) {
|
||||||
|
@ -53,7 +53,7 @@ void EntityHealth::healed_by(int amount, Unit *source) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityHealth::receive_wounds(int incoming_amount, Unit *source) {
|
void EntityHealth::receive_wounds(int incoming_amount, Unit *source) {
|
||||||
if(this->is_conscious()) {
|
if(this->wounds_max > 0 && this->is_conscious()) {
|
||||||
this->wounds_current -= incoming_amount;
|
this->wounds_current -= incoming_amount;
|
||||||
if(this->wounds_current <= 0) {
|
if(this->wounds_current <= 0) {
|
||||||
this->emit_signal("unconscious", source);
|
this->emit_signal("unconscious", source);
|
||||||
|
@ -70,12 +70,14 @@ void EntityHealth::receive_injury(int incoming_amount, Unit *source) {
|
||||||
}
|
}
|
||||||
|
|
||||||
float EntityHealth::get_wounds_damage_factor() const {
|
float EntityHealth::get_wounds_damage_factor() const {
|
||||||
return float(this->injury_current) / float(this->injury_max);
|
return this->injury_max == 0
|
||||||
|
? 1.f
|
||||||
|
: float(this->injury_current) / float(this->injury_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EntityHealth::is_conscious() const {
|
bool EntityHealth::is_conscious() const {
|
||||||
return !this->is_dead()
|
return !this->is_dead()
|
||||||
&& this->wounds_current > 0;
|
&& (this->wounds_current > 0 || this->wounds_max <= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EntityHealth::can_be_revived() const {
|
bool EntityHealth::can_be_revived() const {
|
||||||
|
|
|
@ -37,10 +37,10 @@ public:
|
||||||
private:
|
private:
|
||||||
Stats const *stats;
|
Stats const *stats;
|
||||||
// long term health
|
// long term health
|
||||||
int injury_max{10};
|
int injury_max{10}; //!< the "health" value, has to be more than 1
|
||||||
int injury_current{0};
|
int injury_current{0};
|
||||||
// short term health
|
// short term health
|
||||||
int wounds_max{10};
|
int wounds_max{0}; //!< the "healthy" value, if set to zero, short-term health is removed
|
||||||
int wounds_current{0};
|
int wounds_current{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue