From cd9260871eceb7880d5683fb2e323d368ef13cd3 Mon Sep 17 00:00:00 2001 From: Sara Date: Wed, 20 Mar 2024 09:48:53 +0100 Subject: [PATCH] feat: projectile is no longer an interface --- src/projectile.cpp | 16 +++++++++++----- src/projectile.hpp | 12 ++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) 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 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(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 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 + 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 data) = 0; void return_to_pool(); + void set_weapon_data(Ref data); void set_projectile_pool(ProjectilePool *pool); -private: +protected: ProjectilePool *pool{nullptr}; + Ref data{nullptr}; }; }