feat: enemy death and damage effects
This commit is contained in:
parent
2134fcae92
commit
1a8c64806d
13 changed files with 96 additions and 7 deletions
|
|
@ -2,7 +2,9 @@
|
|||
#include "macros.h"
|
||||
#include "npc_unit.h"
|
||||
|
||||
void EnemyBody::_bind_methods() {}
|
||||
void EnemyBody::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_movement_direction", "direction"), &self_type::set_movement_direction);
|
||||
}
|
||||
|
||||
void EnemyBody::ready() {
|
||||
this->fsm = cast_to<StateMachine>(get_node(NodePath("%StateMachine")));
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
void Hitbox::_bind_methods() {
|
||||
BIND_HPROPERTY(Variant::OBJECT, health, PROPERTY_HINT_NODE_TYPE, "HealthStatus");
|
||||
BIND_PROPERTY(Variant::FLOAT, damage_modifier);
|
||||
BIND_HPROPERTY(Variant::OBJECT, impact_effect, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
|
||||
}
|
||||
|
||||
void Hitbox::set_health(HealthStatus *value) {
|
||||
|
|
@ -22,3 +23,11 @@ void Hitbox::set_damage_modifier(float value) {
|
|||
float Hitbox::get_damage_modifier() const {
|
||||
return this->damage_modifier;
|
||||
}
|
||||
|
||||
void Hitbox::set_impact_effect(Ref<PackedScene> effect) {
|
||||
this->impact_effect = effect;
|
||||
}
|
||||
|
||||
Ref<PackedScene> Hitbox::get_impact_effect() const {
|
||||
return this->impact_effect;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define HITBOX_H
|
||||
|
||||
#include "scene/3d/physics/area_3d.h"
|
||||
#include "scene/resources/packed_scene.h"
|
||||
class HealthStatus;
|
||||
|
||||
class Hitbox : public Area3D {
|
||||
|
|
@ -14,9 +15,13 @@ public:
|
|||
void set_damage_modifier(float value);
|
||||
float get_damage_modifier() const;
|
||||
|
||||
void set_impact_effect(Ref<PackedScene> scene);
|
||||
Ref<PackedScene> get_impact_effect() const;
|
||||
|
||||
private:
|
||||
HealthStatus *health{ nullptr };
|
||||
float damage_modifier{ 1.f };
|
||||
Ref<PackedScene> impact_effect{};
|
||||
};
|
||||
|
||||
#endif // !HITBOX_H
|
||||
|
|
|
|||
|
|
@ -14,9 +14,13 @@ void HitscanMuzzle::instantiate_impact_effect() {
|
|||
if (get_collider() == nullptr) {
|
||||
return;
|
||||
}
|
||||
Node *effect_as_node{ this->impact_effect->instantiate() };
|
||||
Ref<PackedScene> effect_scene{ get_collider()->call("get_impact_effect") };
|
||||
if (!effect_scene.is_valid()) {
|
||||
effect_scene = this->impact_effect;
|
||||
}
|
||||
Node *effect_as_node{ effect_scene->instantiate() };
|
||||
if (Node3D * effect{ cast_to<Node3D>(effect_as_node) }) {
|
||||
get_tree()->get_current_scene()->add_child(effect);
|
||||
cast_to<Node>(get_collider())->add_child(effect);
|
||||
Vector3 const point{ get_collision_point() };
|
||||
Vector3 const normal{ get_collision_normal() };
|
||||
Vector3 const position{ get_global_position() };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue