diff --git a/src/projectile.cpp b/src/projectile.cpp index 4643cbe..1105bf7 100644 --- a/src/projectile.cpp +++ b/src/projectile.cpp @@ -3,14 +3,20 @@ #include <godot_cpp/classes/node3d.hpp> namespace godot { -void IProjectile::return_to_pool() { +void Projectile::_bind_methods() { +#define CLASSNAME Projectile +} +void Projectile::return_to_pool() { if(!this->pool) return; - Node3D *node = dynamic_cast<Node3D*>(this); - if(node) - this->pool->return_projectile(node); + this->pool->return_projectile(this); } -void IProjectile::set_projectile_pool(ProjectilePool *pool) { + +void Projectile::set_weapon_data(Ref<WeaponData> data) { + this->data = data; +} + +void Projectile::set_projectile_pool(ProjectilePool *pool) { this->pool = pool; } } diff --git a/src/projectile.hpp b/src/projectile.hpp index 0a97670..fbb5f34 100644 --- a/src/projectile.hpp +++ b/src/projectile.hpp @@ -2,17 +2,21 @@ #define PROJECTILE_HPP #include "weapon_data.hpp" +#include <godot_cpp/classes/node3d.hpp> + namespace godot { -class Node3D; class ProjectilePool; -class IProjectile { +class Projectile : public Node3D { + GDCLASS(Projectile, Node3D); + static void _bind_methods(); public: - virtual void set_weapon_data(Ref<WeaponData> data) = 0; void return_to_pool(); + void set_weapon_data(Ref<WeaponData> data); void set_projectile_pool(ProjectilePool *pool); -private: +protected: ProjectilePool *pool{nullptr}; + Ref<WeaponData> data{nullptr}; }; }