From 8af5cbc090b778721768fc184cda76583d7340df Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 19 Mar 2024 13:24:20 +0100 Subject: [PATCH] feat: added weapon data --- src/weapon_data.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++++ src/weapon_data.hpp | 38 ++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/weapon_data.cpp create mode 100644 src/weapon_data.hpp diff --git a/src/weapon_data.cpp b/src/weapon_data.cpp new file mode 100644 index 0000000..4117d37 --- /dev/null +++ b/src/weapon_data.cpp @@ -0,0 +1,71 @@ +#include "weapon_data.hpp" +#include "utils/godot_macros.h" + +namespace godot { +void WeaponData::_bind_methods() { +#define CLASSNAME WeaponData + GDPROPERTY_HINTED(projectile_scene, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"); + GDPROPERTY(damage, Variant::INT); + GDPROPERTY(range, Variant::FLOAT); + GDPROPERTY(projectile_count, Variant::INT); + GDPROPERTY(rounds_per_second, Variant::FLOAT); + GDPROPERTY(allow_automatic, Variant::BOOL); + GDPROPERTY_HINTED(projectile_speed, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "Curve"); +} + +void WeaponData::set_projectile_scene(Ref scene) { + this->projectile_scene = scene; +} + +Ref WeaponData::get_projectile_scene() const { + return this->projectile_scene; +} + +void WeaponData::set_damage(int damage) { + this->damage = damage; +} + +int WeaponData::get_damage() const { + return this->damage; +} + +void WeaponData::set_range(float range) { + this->range = range; +} + +float WeaponData::get_range() const { + return this->range; +} + +void WeaponData::set_projectile_count(int projectile_count) { + this->projectile_count = projectile_count; +} + +int WeaponData::get_projectile_count() const { + return this->projectile_count; +} + +void WeaponData::set_rounds_per_second(float rps) { + this->rounds_per_second = rps; +} + +float WeaponData::get_rounds_per_second() const { + return this->rounds_per_second; +} + +void WeaponData::set_allow_automatic(bool allow) { + this->allow_automatic = allow; +} + +bool WeaponData::get_allow_automatic() const { + return this->allow_automatic; +} + +void WeaponData::set_projectile_speed(Ref curve) { + this->projectile_speed = curve; +} + +Ref WeaponData::get_projectile_speed() const { + return this->projectile_speed; +} +} diff --git a/src/weapon_data.hpp b/src/weapon_data.hpp new file mode 100644 index 0000000..e89f302 --- /dev/null +++ b/src/weapon_data.hpp @@ -0,0 +1,38 @@ +#ifndef WEAPON_DATA_HPP +#define WEAPON_DATA_HPP + +#include +#include +#include + +namespace godot { +class WeaponData : public Resource { + GDCLASS(WeaponData, Resource); + static void _bind_methods(); +public: + void set_projectile_scene(Ref scene); + Ref get_projectile_scene() const; + void set_damage(int damage); + int get_damage() const; + void set_range(float range); + float get_range() const; + void set_projectile_count(int projectile_count); + int get_projectile_count() const; + void set_rounds_per_second(float rps); + float get_rounds_per_second() const; + void set_allow_automatic(bool allow); + bool get_allow_automatic() const; + void set_projectile_speed(Ref curve); + Ref get_projectile_speed() const; +private: + Ref projectile_scene{}; + int damage{1}; + float range{5.f}; + int projectile_count{1}; + float rounds_per_second{1.f}; + bool allow_automatic{false}; + Ref projectile_speed{}; +}; +} + +#endif // !WEAPON_DATA_HPP