diff --git a/.cache/clangd/index/actor_body.cpp.3DBD3D1A5C1819D9.idx b/.cache/clangd/index/actor_body.cpp.3DBD3D1A5C1819D9.idx new file mode 100644 index 00000000..5b29a397 Binary files /dev/null and b/.cache/clangd/index/actor_body.cpp.3DBD3D1A5C1819D9.idx differ diff --git a/.cache/clangd/index/actor_body.h.E6B5DA66D5128F55.idx b/.cache/clangd/index/actor_body.h.E6B5DA66D5128F55.idx new file mode 100644 index 00000000..9c066aed Binary files /dev/null and b/.cache/clangd/index/actor_body.h.E6B5DA66D5128F55.idx differ diff --git a/.cache/clangd/index/equipment.cpp.0DAD3B9F041D4E8F.idx b/.cache/clangd/index/equipment.cpp.0DAD3B9F041D4E8F.idx new file mode 100644 index 00000000..e323f642 Binary files /dev/null and b/.cache/clangd/index/equipment.cpp.0DAD3B9F041D4E8F.idx differ diff --git a/.cache/clangd/index/equipment.h.87F30A43991E43C4.idx b/.cache/clangd/index/equipment.h.87F30A43991E43C4.idx new file mode 100644 index 00000000..3202309d Binary files /dev/null and b/.cache/clangd/index/equipment.h.87F30A43991E43C4.idx differ diff --git a/.cache/clangd/index/macros.h.2ABF5D78F9EC4C2D.idx b/.cache/clangd/index/macros.h.2ABF5D78F9EC4C2D.idx new file mode 100644 index 00000000..98d4d958 Binary files /dev/null and b/.cache/clangd/index/macros.h.2ABF5D78F9EC4C2D.idx differ diff --git a/.cache/clangd/index/register_types.cpp.C2CF44F1B437E8E2.idx b/.cache/clangd/index/register_types.cpp.C2CF44F1B437E8E2.idx new file mode 100644 index 00000000..aca6c260 Binary files /dev/null and b/.cache/clangd/index/register_types.cpp.C2CF44F1B437E8E2.idx differ diff --git a/.cache/clangd/index/register_types.h.1B701265B4D42B11.idx b/.cache/clangd/index/register_types.h.1B701265B4D42B11.idx new file mode 100644 index 00000000..9a8c86f1 Binary files /dev/null and b/.cache/clangd/index/register_types.h.1B701265B4D42B11.idx differ diff --git a/.gitignore b/.gitignore index b8680775..1e91b0d4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ config.log engine/.github project/.godot -build/PROJECT.pck -build/PROJECT.x86_64 -build/PROJECT.exe +build/tabtargeting.pck +build/tabtargeting.x86_64 +build/tabtargeting.exe build.zip diff --git a/compile_commands.json b/compile_commands.json new file mode 120000 index 00000000..1cdd971f --- /dev/null +++ b/compile_commands.json @@ -0,0 +1 @@ +engine/compile_commands.json \ No newline at end of file diff --git a/modules/PROJECT/register_types.cpp b/modules/PROJECT/register_types.cpp deleted file mode 100644 index a367b16d..00000000 --- a/modules/PROJECT/register_types.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "register_types.h" - -#include "core/object/class_db.h" - -void initialize_PROJECT_module(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } -} - -void uninitialize_PROJECT_module(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } -} diff --git a/modules/PROJECT/register_types.h b/modules/PROJECT/register_types.h deleted file mode 100644 index 2a1d0257..00000000 --- a/modules/PROJECT/register_types.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PROJECT_REGISTER_TYPES_H -#define PROJECT_REGISTER_TYPES_H - -#include "modules/register_module_types.h" - -void initialize_PROJECT_module(ModuleInitializationLevel p_level); -void uninitialize_PROJECT_module(ModuleInitializationLevel p_level); - -#endif // !PROJECT_REGISTER_TYPES_H diff --git a/modules/PROJECT/SCsub b/modules/tabtargeting/SCsub similarity index 100% rename from modules/PROJECT/SCsub rename to modules/tabtargeting/SCsub diff --git a/modules/tabtargeting/__pycache__/config.cpython-313.pyc b/modules/tabtargeting/__pycache__/config.cpython-313.pyc new file mode 100644 index 00000000..7edde2dc Binary files /dev/null and b/modules/tabtargeting/__pycache__/config.cpython-313.pyc differ diff --git a/modules/tabtargeting/actor_body.cpp b/modules/tabtargeting/actor_body.cpp new file mode 100644 index 00000000..ef6be220 --- /dev/null +++ b/modules/tabtargeting/actor_body.cpp @@ -0,0 +1,10 @@ +#include "actor_body.h" +#include "core/string/print_string.h" + +void ActorBody::_bind_methods() { +} + +void ActorBody::receive_damage(DamageEvent event) { + this->health -= event.compound_damage; + print_line(vformat("Damage dealth (%d to %s, %d remaining", event.compound_damage, this->get_name(), this->health)); +} diff --git a/modules/tabtargeting/actor_body.h b/modules/tabtargeting/actor_body.h new file mode 100644 index 00000000..c1fa26ee --- /dev/null +++ b/modules/tabtargeting/actor_body.h @@ -0,0 +1,20 @@ +#ifndef ACTOR_BODY_H +#define ACTOR_BODY_H + +#include "scene/3d/physics/character_body_3d.h" +#include "equipment.h" +class ActorBody; + +class ActorBody : public CharacterBody3D { + GDCLASS(ActorBody, CharacterBody3D); + static void _bind_methods(); +public: + void receive_damage(DamageEvent event); + void send_damage(int amount, ActorBody *target); +private: + int health{10}; + int max_health{10}; + + class Equipment *equipment{nullptr}; +}; +#endif // !ACTOR_BODY_H diff --git a/modules/tabtargeting/actor_state_machine.h b/modules/tabtargeting/actor_state_machine.h new file mode 100644 index 00000000..0f71f381 --- /dev/null +++ b/modules/tabtargeting/actor_state_machine.h @@ -0,0 +1,13 @@ +#ifndef ACTOR_STATE_MACHINE_H +#define ACTOR_STATE_MACHINE_H + +#include "scene/main/node.h" + +class ActorStateMachine : public Node { + GDCLASS(ActorStateMachine, Node); + static void _bind_methods(); +public: +private: +}; + +#endif // !ACTOR_STATE_MACHINE_H diff --git a/modules/PROJECT/config.py b/modules/tabtargeting/config.py similarity index 100% rename from modules/PROJECT/config.py rename to modules/tabtargeting/config.py diff --git a/modules/tabtargeting/equipment.cpp b/modules/tabtargeting/equipment.cpp new file mode 100644 index 00000000..18a3de83 --- /dev/null +++ b/modules/tabtargeting/equipment.cpp @@ -0,0 +1,138 @@ +#include "equipment.h" +#include "macros.h" +#include "tabtargeting/actor_body.h" + +DamageEvent::DamageEvent(int damage, ActorBody *source) +: compound_damage{damage} +, initial_damage{damage} +, source{source} +{} + +void DamageStats::_bind_methods() { + BIND_PROPERTY(Variant::INT, damage_add); + BIND_PROPERTY(Variant::INT, damage_mul); + BIND_PROPERTY(Variant::INT, defend_add); + BIND_PROPERTY(Variant::INT, defend_mul); +} + +DamageEvent DamageStats::apply(DamageEvent event, ActorBody *owner) { + if(owner == event.get_source()) { + event.compound_damage *= this->damage_mul; + event.compound_damage += this->damage_add; + } else { + event.compound_damage *= this->defend_mul; + event.compound_damage += this->defend_add; + } + return event; +} + +void DamageStats::set_damage_add(int val) { + this->damage_add = val; +} +int DamageStats::get_damage_add() const { + return this->damage_add; +} +void DamageStats::set_damage_mul(float val) { + this->damage_mul = val; +} +float DamageStats::get_damage_mul() const { + return this->damage_mul; +} +void DamageStats::set_defend_add(int val) { + this->defend_add = val; +} +int DamageStats::get_defend_add() const { + return this->defend_add; +} +void DamageStats::set_defend_mul(float val) { + this->defend_mul = val; +} +float DamageStats::get_defend_mul() const { + return this->defend_mul; +} + +void EquipItem::_bind_methods() { + BIND_HPROPERTY(Variant::OBJECT, stats, PROPERTY_HINT_RESOURCE_TYPE, "DamageStats"); +} + +DamageEvent EquipItem::apply(DamageEvent event, ActorBody *owner) { + return this->stats->apply(event, owner); +} + +void EquipItem::set_stats(Ref stats) { + this->stats = stats; +} + +Ref EquipItem::get_stats() const { + return this->stats; +} + +void Weapon::_bind_methods() { + BIND_PROPERTY(Variant::INT, base_damage); +} + +void Weapon::set_base_damage(int amount) { + this->base_damage = amount; +} + +int Weapon::get_base_damage() const { + return this->base_damage; +} + +DamageEvent Weapon::create_base_damage_event(ActorBody *source) { + return DamageEvent(this->base_damage, source); +} + +void Armor::_bind_methods() { + BIND_HPROPERTY(Variant::INT, armor_type, PROPERTY_HINT_ENUM, "Helmet, Chest, Legs"); +} +void Armor::set_armor_type(int type) { + this->type = ArmorType(type); +} +int Armor::get_armor_type() const { + return this->type; +} + +void Equipment::_bind_methods() { + BIND_HPROPERTY(Variant::OBJECT, weapon, PROPERTY_HINT_RESOURCE_TYPE, "Weapon"); + BIND_HPROPERTY(Variant::OBJECT, helmet, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); + BIND_HPROPERTY(Variant::OBJECT, chest, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); + BIND_HPROPERTY(Variant::OBJECT, legs, PROPERTY_HINT_RESOURCE_TYPE, "Armor"); +} + +DamageEvent Equipment::apply(DamageEvent event, ActorBody *target) { + +} + +void Equipment::set_weapon(Ref weapon) { + this->weapon = weapon; +} + +Ref Equipment::get_weapon() const { + return this->weapon; +} + +void Equipment::set_helmet(Ref helmet) { + this->helmet = helmet; +} + +Ref Equipment::get_helmet() const { + return this->helmet; +} + +void Equipment::set_chest(Ref chest) { + this->chest = chest; +} + +Ref Equipment::get_chest() const { + return this->chest; +} + +void Equipment::set_legs(Ref legs) { + this->legs = legs; +} + +Ref Equipment::get_legs() const { + return this->legs; +} + diff --git a/modules/tabtargeting/equipment.h b/modules/tabtargeting/equipment.h new file mode 100644 index 00000000..2b540f8e --- /dev/null +++ b/modules/tabtargeting/equipment.h @@ -0,0 +1,104 @@ +#ifndef EQUIPMENT_H +#define EQUIPMENT_H + +#include "core/io/resource.h" +#include "core/templates/vector.h" +#include "scene/main/node.h" +class ActorBody; + +struct DamageEvent { + DamageEvent(int damage, ActorBody *source); + int compound_damage{1}; + int get_initial_damage() const; + ActorBody *get_source() const; +private: + int initial_damage{1}; + ActorBody *source{nullptr}; +}; + +class DamageModifier { +public: + virtual DamageEvent apply(DamageEvent event, ActorBody *target) = 0; +}; + +class DamageStats : public Resource, + public DamageModifier { + GDCLASS(DamageStats, Resource); + static void _bind_methods(); +public: + virtual DamageEvent apply(DamageEvent event, ActorBody *target) override; + void set_damage_add(int val); + int get_damage_add() const; + void set_damage_mul(float val); + float get_damage_mul() const; + void set_defend_add(int val); + int get_defend_add() const; + void set_defend_mul(float val); + float get_defend_mul() const; +public: + int damage_add{0}; + float damage_mul{1.f}; + int defend_add{0}; + float defend_mul{1.f}; +}; + +class EquipItem : public Resource, + public DamageModifier { + GDCLASS(EquipItem, Resource); + static void _bind_methods(); +public: + virtual DamageEvent apply(DamageEvent event, ActorBody *target) override; + void set_stats(Ref stats); + Ref get_stats() const; +private: + Ref stats{}; +}; + +class Weapon : public EquipItem { + GDCLASS(Weapon, EquipItem); + static void _bind_methods(); +public: + void set_base_damage(int amount); + int get_base_damage() const; + + DamageEvent create_base_damage_event(ActorBody *source); +private: + int base_damage{1}; +}; + +enum ArmorType { + Helmet, Chest, Legs +}; + +class Armor : public EquipItem { + GDCLASS(Armor, EquipItem); + static void _bind_methods(); +public: + void set_armor_type(int type); + int get_armor_type() const; +private: + ArmorType type{}; +}; + +class Equipment : public Node, + public DamageModifier { + GDCLASS(Equipment, Node); + static void _bind_methods(); +public: + virtual DamageEvent apply(DamageEvent event, ActorBody *target) override; + void set_weapon(Ref weapon); + Ref get_weapon() const; + void set_helmet(Ref helmet); + Ref get_helmet() const; + void set_chest(Ref chest); + Ref get_chest() const; + void set_legs(Ref legs); + Ref get_legs() const; +private: + Ref weapon{}; + Ref helmet{}; + Ref chest{}; + Ref legs{}; +}; + +#endif // !EQUIPMENT_H diff --git a/modules/PROJECT/macros.h b/modules/tabtargeting/macros.h similarity index 100% rename from modules/PROJECT/macros.h rename to modules/tabtargeting/macros.h diff --git a/modules/tabtargeting/register_types.cpp b/modules/tabtargeting/register_types.cpp new file mode 100644 index 00000000..ab2fc76d --- /dev/null +++ b/modules/tabtargeting/register_types.cpp @@ -0,0 +1,23 @@ +#include "register_types.h" + +#include "core/object/class_db.h" +#include "tabtargeting/equipment.h" +#include "tabtargeting/actor_body.h" + +void initialize_tabtargeting_module(ModuleInitializationLevel p_level) { + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { + return; + } + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); +} + +void uninitialize_tabtargeting_module(ModuleInitializationLevel p_level) { + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { + return; + } +} diff --git a/modules/tabtargeting/register_types.h b/modules/tabtargeting/register_types.h new file mode 100644 index 00000000..cbf1e6e5 --- /dev/null +++ b/modules/tabtargeting/register_types.h @@ -0,0 +1,9 @@ +#ifndef tabtargeting_REGISTER_TYPES_H +#define tabtargeting_REGISTER_TYPES_H + +#include "modules/register_module_types.h" + +void initialize_tabtargeting_module(ModuleInitializationLevel p_level); +void uninitialize_tabtargeting_module(ModuleInitializationLevel p_level); + +#endif // !tabtargeting_REGISTER_TYPES_H diff --git a/project/export_presets.cfg b/project/export_presets.cfg index a04762ac..c349193a 100644 --- a/project/export_presets.cfg +++ b/project/export_presets.cfg @@ -9,7 +9,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../build/PROJECT.x86_64" +export_path="../build/tabtargeting.x86_64" patches=PackedStringArray() encryption_include_filters="" encryption_exclude_filters="" @@ -51,7 +51,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../build/PROJECT.exe" +export_path="../build/tabtargeting.exe" patches=PackedStringArray() encryption_include_filters="" encryption_exclude_filters="" diff --git a/project/project.godot b/project/project.godot index bd5ab3b0..a51099b5 100644 --- a/project/project.godot +++ b/project/project.godot @@ -10,6 +10,6 @@ config_version=5 [application] -config/name="PROJECT" +config/name="tabtargeting" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg"