From 8c11a2220922431e78b286c9ec97b248a69bddfd Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 1 Dec 2019 18:00:09 +0100 Subject: [PATCH] Added EntitySkillData. --- SCsub | 1 + data/spell.cpp | 7 +-- data/spell.h | 7 +-- entities/entity.cpp | 1 + entities/entity.h | 2 +- entities/resources/entity_resource_data.cpp | 2 + entities/resources/entity_resource_data.h | 2 +- entities/skills/entity_skill.cpp | 29 ++++++++++ entities/skills/entity_skill.h | 7 ++- entities/skills/entity_skill_data.cpp | 59 +++++++++++++++++++++ entities/skills/entity_skill_data.h | 36 +++++++++++++ entity_data_manager.cpp | 45 ++++++++++++++++ entity_data_manager.h | 13 +++++ register_types.cpp | 2 + 14 files changed, 204 insertions(+), 9 deletions(-) create mode 100644 entities/skills/entity_skill_data.cpp create mode 100644 entities/skills/entity_skill_data.h diff --git a/SCsub b/SCsub index 34ee9c1..bc42811 100644 --- a/SCsub +++ b/SCsub @@ -35,6 +35,7 @@ module_env.add_source_files(env.modules_sources,"entities/data/item_container_da module_env.add_source_files(env.modules_sources,"entities/data/item_container_data_entry.cpp") module_env.add_source_files(env.modules_sources,"entities/skills/entity_skill.cpp") +module_env.add_source_files(env.modules_sources,"entities/skills/entity_skill_data.cpp") module_env.add_source_files(env.modules_sources,"entities/data/character_spec.cpp") module_env.add_source_files(env.modules_sources,"entities/data/talent_row_data.cpp") diff --git a/data/spell.cpp b/data/spell.cpp index 7ff8100..5fc3324 100644 --- a/data/spell.cpp +++ b/data/spell.cpp @@ -3,6 +3,7 @@ #include "aura.h" #include "craft_recipe.h" #include "../entities/resources/entity_resource_cost_data.h" +#include "../entities/skills/entity_skill_data.h" int Spell::get_id() { return _id; @@ -510,10 +511,10 @@ void Spell::set_training_required_spell(Ref spell) { _training_required_spell = spell; } -Ref Spell::get_training_required_skill() { +Ref Spell::get_training_required_skill() { return _training_required_skill; } -void Spell::set_training_required_skill(Ref skill) { +void Spell::set_training_required_skill(Ref skill) { _training_required_skill = skill; } @@ -1127,7 +1128,7 @@ void Spell::_bind_methods() { ClassDB::bind_method(D_METHOD("get_training_required_skill"), &Spell::get_training_required_skill); ClassDB::bind_method(D_METHOD("set_training_required_skill", "curve"), &Spell::set_training_required_skill); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "training_required_skill", PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_training_required_skill", "get_training_required_skill"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "training_required_skill", PROPERTY_HINT_RESOURCE_TYPE, "EntitySkillData"), "set_training_required_skill", "get_training_required_skill"); ClassDB::bind_method(D_METHOD("get_training_required_skill_level"), &Spell::get_training_required_skill_level); ClassDB::bind_method(D_METHOD("set_training_required_skill_level", "value"), &Spell::set_training_required_skill_level); diff --git a/data/spell.h b/data/spell.h index 2108845..32bc05b 100644 --- a/data/spell.h +++ b/data/spell.h @@ -25,6 +25,7 @@ class SpellCastInfo; class Spell; class CraftRecipe; class EntityResourceCostData; +class EntitySkillData; enum TargetRelationType { TARGET_SELF = 1 << 0, @@ -282,8 +283,8 @@ public: Ref get_training_required_spell(); void set_training_required_spell(Ref spell); - Ref get_training_required_skill(); - void set_training_required_skill(Ref skill); + Ref get_training_required_skill(); + void set_training_required_skill(Ref skill); int get_training_required_skill_level(); void set_training_required_skill_level(int value); @@ -407,7 +408,7 @@ private: int _training_cost; Ref _training_required_spell; - Ref _training_required_skill; + Ref _training_required_skill; int _training_required_skill_level; }; diff --git a/entities/entity.cpp b/entities/entity.cpp index 7055105..f0519ce 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -9,6 +9,7 @@ #include "../pipelines/spell_heal_info.h" #include "./data/character_spec.h" #include "./data/talent_row_data.h" +#include "./skills/entity_skill.h" NodePath Entity::get_character_skeleton_path() { return _character_skeleton_path; diff --git a/entities/entity.h b/entities/entity.h index 65d8182..0bd7b64 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -32,7 +32,6 @@ #include "../utility/category_cooldown.h" #include "../utility/cooldown.h" #include "./data/entity_data_container.h" -#include "./skills/entity_skill.h" #include "../profile_manager/actionbar/action_bar_profile.h" @@ -52,6 +51,7 @@ class SpellCastInfo; class EntityCreateInfo; class TalentRowData; class CharacterSpec; +class EntitySkill; enum SpellCastDataSignals { CastFailed, diff --git a/entities/resources/entity_resource_data.cpp b/entities/resources/entity_resource_data.cpp index 5ff0d89..cadeec2 100644 --- a/entities/resources/entity_resource_data.cpp +++ b/entities/resources/entity_resource_data.cpp @@ -1,5 +1,7 @@ #include "entity_resource_data.h" +#include "entity_resource.h" + int EntityResourceData::get_id() { return _id; } diff --git a/entities/resources/entity_resource_data.h b/entities/resources/entity_resource_data.h index 7ad9c22..04532ff 100644 --- a/entities/resources/entity_resource_data.h +++ b/entities/resources/entity_resource_data.h @@ -4,7 +4,7 @@ #include "core/resource.h" #include "scene/main/node.h" -#include "entity_resource.h" +class EntityResource; class EntityResourceData : public Resource { GDCLASS(EntityResourceData, Resource); diff --git a/entities/skills/entity_skill.cpp b/entities/skills/entity_skill.cpp index b9192f8..65880d6 100644 --- a/entities/skills/entity_skill.cpp +++ b/entities/skills/entity_skill.cpp @@ -1,11 +1,32 @@ #include "entity_skill.h" +#include "../../entity_data_manager.h" + +Ref EntitySkill::get_skill() { + return _skill; +} +void EntitySkill::set_skill(Ref value) { + _skill = value; + + if (_skill.is_valid()) + _skill_id = _skill->get_id(); + else + _skill_id = 0; + + + emit_signal("skill_changed", Ref(this)); +} + int EntitySkill::get_skill_id() { return _skill_id; } void EntitySkill::set_skill_id(int value) { _skill_id = value; + if (EntityDataManager::get_instance() != NULL) { + _skill = EntityDataManager::get_instance()->get_entity_skill(_skill_id); + } + emit_signal("skill_changed", Ref(this)); } @@ -69,9 +90,17 @@ EntitySkill::EntitySkill() { _disabled = false; } +EntitySkill::~EntitySkill() { + _skill.unref(); +} + void EntitySkill::_bind_methods() { ADD_SIGNAL(MethodInfo("skill_changed", PropertyInfo(Variant::OBJECT, "skill", PROPERTY_HINT_RESOURCE_TYPE, "EntitySkill"))); + ClassDB::bind_method(D_METHOD("get_skill"), &EntitySkill::get_skill); + ClassDB::bind_method(D_METHOD("set_skill", "value"), &EntitySkill::set_skill); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skill", PROPERTY_HINT_RESOURCE_TYPE, "EntitySkillData"), "set_skill", "get_skill"); + ClassDB::bind_method(D_METHOD("get_skill_id"), &EntitySkill::get_skill_id); ClassDB::bind_method(D_METHOD("set_skill_id", "value"), &EntitySkill::set_skill_id); ADD_PROPERTY(PropertyInfo(Variant::INT, "skill_id"), "set_skill_id", "get_skill_id"); diff --git a/entities/skills/entity_skill.h b/entities/skills/entity_skill.h index 5af6ea6..e77f145 100644 --- a/entities/skills/entity_skill.h +++ b/entities/skills/entity_skill.h @@ -2,11 +2,15 @@ #define ENTITY_SKILL_H #include "core/reference.h" +#include "entity_skill_data.h" class EntitySkill : public Reference { GDCLASS(EntitySkill, Reference); public: + Ref get_skill(); + void set_skill(Ref value); + int get_skill_id(); void set_skill_id(int value); @@ -18,7 +22,6 @@ public: bool get_disabled(); void set_disabled(bool value); - Dictionary to_dict(); void from_dict(const Dictionary &dict); @@ -26,11 +29,13 @@ public: void _from_dict(const Dictionary &dict); EntitySkill(); + ~EntitySkill(); protected: static void _bind_methods(); private: + Ref _skill; int _skill_id; int _current; int _max; diff --git a/entities/skills/entity_skill_data.cpp b/entities/skills/entity_skill_data.cpp new file mode 100644 index 0000000..3a93104 --- /dev/null +++ b/entities/skills/entity_skill_data.cpp @@ -0,0 +1,59 @@ +#include "entity_skill_data.h" + +int EntitySkillData::get_id() { + return _id; +} +void EntitySkillData::set_id(int value) { + _id = value; +} + +int EntitySkillData::get_default_value() { + return _default_value; +} +void EntitySkillData::set_default_value(int value) { + _default_value = value; +} + +int EntitySkillData::get_max_value() { + return _max_value; +} +void EntitySkillData::set_max_value(int value) { + _max_value = value; +} + +String EntitySkillData::get_text_description() { + return _text_description; +} +void EntitySkillData::set_text_description(String value) { + _text_description = value; +} + +EntitySkillData::EntitySkillData() { + _id = 0; + _default_value = 0; + _max_value = 0; +} + +EntitySkillData::~EntitySkillData() { +} + +void EntitySkillData::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_id"), &EntitySkillData::get_id); + ClassDB::bind_method(D_METHOD("set_id", "value"), &EntitySkillData::set_id); + ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id"); + + ClassDB::bind_method(D_METHOD("get_default_value"), &EntitySkillData::get_default_value); + ClassDB::bind_method(D_METHOD("set_default_value", "value"), &EntitySkillData::set_default_value); + ADD_PROPERTY(PropertyInfo(Variant::INT, "default_value"), "set_default_value", "get_default_value"); + + ClassDB::bind_method(D_METHOD("get_max_value"), &EntitySkillData::get_max_value); + ClassDB::bind_method(D_METHOD("set_max_value", "value"), &EntitySkillData::set_max_value); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_value"), "set_max_value", "get_max_value"); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text_name"), "set_name", "get_name"); + + ClassDB::bind_method(D_METHOD("get_text_description"), &EntitySkillData::get_text_description); + ClassDB::bind_method(D_METHOD("set_text_description", "value"), &EntitySkillData::set_text_description); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text_description", PROPERTY_HINT_MULTILINE_TEXT), "set_text_description", "get_text_description"); + +} diff --git a/entities/skills/entity_skill_data.h b/entities/skills/entity_skill_data.h new file mode 100644 index 0000000..ac67660 --- /dev/null +++ b/entities/skills/entity_skill_data.h @@ -0,0 +1,36 @@ +#ifndef ENTITY_SKILL_DATA_H +#define ENTITY_SKILL_DATA_H + +#include "core/resource.h" +#include "core/ustring.h" + +class EntitySkillData : public Resource { + GDCLASS(EntitySkillData, Resource); + +public: + int get_id(); + void set_id(int value); + + int get_default_value(); + void set_default_value(int value); + + int get_max_value(); + void set_max_value(int value); + + String get_text_description(); + void set_text_description(String value); + + EntitySkillData(); + ~EntitySkillData(); + +protected: + static void _bind_methods(); + +private: + int _id; + int _default_value; + int _max_value; + String _text_description; +}; + +#endif diff --git a/entity_data_manager.cpp b/entity_data_manager.cpp index 6e088ce..46ea8aa 100644 --- a/entity_data_manager.cpp +++ b/entity_data_manager.cpp @@ -4,6 +4,8 @@ #include "./data/aura.h" #include "./data/craft_recipe.h" #include "./data/spell.h" +#include "./entities/resources/entity_resource_data.h" +#include "./entities/skills/entity_skill_data.h" EntityDataManager *EntityDataManager::instance; @@ -77,6 +79,36 @@ void EntityDataManager::add_entity_resource(Ref cls) { _entity_resource_map.set(cls->get_id(), cls); } +String EntityDataManager::get_entity_skills_folder() { + return _entity_skills_folder; +} +void EntityDataManager::set_entity_skills_folder(String folder) { + _entity_skills_folder = folder; +} +Vector > *EntityDataManager::get_entity_skills() { + return &_entity_skills; +} +Ref EntityDataManager::get_entity_skill(int class_id) { + if (!_entity_skill_map.has(class_id)) + return Ref(NULL); + + return _entity_skill_map.get(class_id); +} +Ref EntityDataManager::get_entity_skill_index(int index) { + ERR_FAIL_INDEX_V(index, _entity_skills.size(), Ref(NULL)); + + return _entity_skills.get(index); +} +int EntityDataManager::get_entity_skill_count() { + return _entity_skills.size(); +} +void EntityDataManager::add_entity_skill(Ref cls) { + ERR_FAIL_COND(!cls.is_valid()); + + _entity_skills.push_back(cls); + _entity_skill_map.set(cls->get_id(), cls); +} + String EntityDataManager::get_entity_datas_folder() { return _entity_datas_folder; } @@ -683,6 +715,16 @@ void EntityDataManager::_bind_methods() { ClassDB::bind_method(D_METHOD("get_entity_resource_index", "index"), &EntityDataManager::get_entity_resource_index); ClassDB::bind_method(D_METHOD("get_entity_resource_count"), &EntityDataManager::get_entity_resource_count); + //EntitySkills + ClassDB::bind_method(D_METHOD("get_entity_skills_folder"), &EntityDataManager::get_entity_skills_folder); + ClassDB::bind_method(D_METHOD("set_entity_skills_folder", "folder"), &EntityDataManager::set_entity_skills_folder); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "entity_skills_folder"), "set_entity_skills_folder", "get_entity_skills_folder"); + + ClassDB::bind_method(D_METHOD("add_entity_skill", "cls"), &EntityDataManager::add_entity_skill); + ClassDB::bind_method(D_METHOD("get_entity_skill", "class_id"), &EntityDataManager::get_entity_skill); + ClassDB::bind_method(D_METHOD("get_entity_skill_index", "index"), &EntityDataManager::get_entity_skill_index); + ClassDB::bind_method(D_METHOD("get_entity_skill_count"), &EntityDataManager::get_entity_skill_count); + //EntityData ClassDB::bind_method(D_METHOD("get_entity_datas_folder"), &EntityDataManager::get_entity_datas_folder); ClassDB::bind_method(D_METHOD("set_entity_datas_folder", "folder"), &EntityDataManager::set_entity_datas_folder); @@ -786,6 +828,9 @@ EntityDataManager::~EntityDataManager() { _entity_resources.clear(); _entity_resource_map.clear(); + _entity_skills.clear(); + _entity_skill_map.clear(); + _entity_datas.clear(); _entity_data_map.clear(); diff --git a/entity_data_manager.h b/entity_data_manager.h index db6f315..34b7439 100644 --- a/entity_data_manager.h +++ b/entity_data_manager.h @@ -23,6 +23,7 @@ class EntityData; class CraftRecipe; class ItemTemplate; class EntityResourceData; +class EntitySkillData; class EntityDataManager : public Node { GDCLASS(EntityDataManager, Node); @@ -45,6 +46,14 @@ public: int get_entity_resource_count(); void add_entity_resource(Ref cls); + String get_entity_skills_folder(); + void set_entity_skills_folder(String folder); + Vector > *get_entity_skills(); + Ref get_entity_skill(int class_id); + Ref get_entity_skill_index(int index); + int get_entity_skill_count(); + void add_entity_skill(Ref cls); + String get_entity_datas_folder(); void set_entity_datas_folder(String folder); Vector > *get_entity_datas(); @@ -137,6 +146,10 @@ private: Vector > _entity_resources; HashMap > _entity_resource_map; + String _entity_skills_folder; + Vector > _entity_skills; + HashMap > _entity_skill_map; + String _entity_datas_folder; Vector > _entity_datas; HashMap > _entity_data_map; diff --git a/register_types.cpp b/register_types.cpp index 9599500..f800f55 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -23,6 +23,7 @@ #include "entities/data/entity_data_container.h" #include "entities/skills/entity_skill.h" +#include "entities/skills/entity_skill_data.h" #include "entities/data/talent_row_data.h" #include "entities/data/character_spec.h" @@ -157,6 +158,7 @@ void register_entity_spell_system_types() { ClassDB::register_class(); ClassDB::register_class(); + ClassDB::register_class(); ClassDB::register_class();