Added EntitySkillData.

This commit is contained in:
Relintai 2019-12-01 18:00:09 +01:00
parent 6a954f3381
commit 8c11a22209
14 changed files with 204 additions and 9 deletions

1
SCsub
View File

@ -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/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.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/character_spec.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/talent_row_data.cpp") module_env.add_source_files(env.modules_sources,"entities/data/talent_row_data.cpp")

View File

@ -3,6 +3,7 @@
#include "aura.h" #include "aura.h"
#include "craft_recipe.h" #include "craft_recipe.h"
#include "../entities/resources/entity_resource_cost_data.h" #include "../entities/resources/entity_resource_cost_data.h"
#include "../entities/skills/entity_skill_data.h"
int Spell::get_id() { int Spell::get_id() {
return _id; return _id;
@ -510,10 +511,10 @@ void Spell::set_training_required_spell(Ref<Spell> spell) {
_training_required_spell = spell; _training_required_spell = spell;
} }
Ref<Aura> Spell::get_training_required_skill() { Ref<EntitySkillData> Spell::get_training_required_skill() {
return _training_required_skill; return _training_required_skill;
} }
void Spell::set_training_required_skill(Ref<Aura> skill) { void Spell::set_training_required_skill(Ref<EntitySkillData> skill) {
_training_required_skill = 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("get_training_required_skill"), &Spell::get_training_required_skill);
ClassDB::bind_method(D_METHOD("set_training_required_skill", "curve"), &Spell::set_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("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); ClassDB::bind_method(D_METHOD("set_training_required_skill_level", "value"), &Spell::set_training_required_skill_level);

View File

@ -25,6 +25,7 @@ class SpellCastInfo;
class Spell; class Spell;
class CraftRecipe; class CraftRecipe;
class EntityResourceCostData; class EntityResourceCostData;
class EntitySkillData;
enum TargetRelationType { enum TargetRelationType {
TARGET_SELF = 1 << 0, TARGET_SELF = 1 << 0,
@ -282,8 +283,8 @@ public:
Ref<Spell> get_training_required_spell(); Ref<Spell> get_training_required_spell();
void set_training_required_spell(Ref<Spell> spell); void set_training_required_spell(Ref<Spell> spell);
Ref<Aura> get_training_required_skill(); Ref<EntitySkillData> get_training_required_skill();
void set_training_required_skill(Ref<Aura> skill); void set_training_required_skill(Ref<EntitySkillData> skill);
int get_training_required_skill_level(); int get_training_required_skill_level();
void set_training_required_skill_level(int value); void set_training_required_skill_level(int value);
@ -407,7 +408,7 @@ private:
int _training_cost; int _training_cost;
Ref<Spell> _training_required_spell; Ref<Spell> _training_required_spell;
Ref<Aura> _training_required_skill; Ref<EntitySkillData> _training_required_skill;
int _training_required_skill_level; int _training_required_skill_level;
}; };

View File

@ -9,6 +9,7 @@
#include "../pipelines/spell_heal_info.h" #include "../pipelines/spell_heal_info.h"
#include "./data/character_spec.h" #include "./data/character_spec.h"
#include "./data/talent_row_data.h" #include "./data/talent_row_data.h"
#include "./skills/entity_skill.h"
NodePath Entity::get_character_skeleton_path() { NodePath Entity::get_character_skeleton_path() {
return _character_skeleton_path; return _character_skeleton_path;

View File

@ -32,7 +32,6 @@
#include "../utility/category_cooldown.h" #include "../utility/category_cooldown.h"
#include "../utility/cooldown.h" #include "../utility/cooldown.h"
#include "./data/entity_data_container.h" #include "./data/entity_data_container.h"
#include "./skills/entity_skill.h"
#include "../profile_manager/actionbar/action_bar_profile.h" #include "../profile_manager/actionbar/action_bar_profile.h"
@ -52,6 +51,7 @@ class SpellCastInfo;
class EntityCreateInfo; class EntityCreateInfo;
class TalentRowData; class TalentRowData;
class CharacterSpec; class CharacterSpec;
class EntitySkill;
enum SpellCastDataSignals { enum SpellCastDataSignals {
CastFailed, CastFailed,

View File

@ -1,5 +1,7 @@
#include "entity_resource_data.h" #include "entity_resource_data.h"
#include "entity_resource.h"
int EntityResourceData::get_id() { int EntityResourceData::get_id() {
return _id; return _id;
} }

View File

@ -4,7 +4,7 @@
#include "core/resource.h" #include "core/resource.h"
#include "scene/main/node.h" #include "scene/main/node.h"
#include "entity_resource.h" class EntityResource;
class EntityResourceData : public Resource { class EntityResourceData : public Resource {
GDCLASS(EntityResourceData, Resource); GDCLASS(EntityResourceData, Resource);

View File

@ -1,11 +1,32 @@
#include "entity_skill.h" #include "entity_skill.h"
#include "../../entity_data_manager.h"
Ref<EntitySkillData> EntitySkill::get_skill() {
return _skill;
}
void EntitySkill::set_skill(Ref<EntitySkillData> value) {
_skill = value;
if (_skill.is_valid())
_skill_id = _skill->get_id();
else
_skill_id = 0;
emit_signal("skill_changed", Ref<EntitySkill>(this));
}
int EntitySkill::get_skill_id() { int EntitySkill::get_skill_id() {
return _skill_id; return _skill_id;
} }
void EntitySkill::set_skill_id(int value) { void EntitySkill::set_skill_id(int value) {
_skill_id = value; _skill_id = value;
if (EntityDataManager::get_instance() != NULL) {
_skill = EntityDataManager::get_instance()->get_entity_skill(_skill_id);
}
emit_signal("skill_changed", Ref<EntitySkill>(this)); emit_signal("skill_changed", Ref<EntitySkill>(this));
} }
@ -69,9 +90,17 @@ EntitySkill::EntitySkill() {
_disabled = false; _disabled = false;
} }
EntitySkill::~EntitySkill() {
_skill.unref();
}
void EntitySkill::_bind_methods() { void EntitySkill::_bind_methods() {
ADD_SIGNAL(MethodInfo("skill_changed", PropertyInfo(Variant::OBJECT, "skill", PROPERTY_HINT_RESOURCE_TYPE, "EntitySkill"))); 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("get_skill_id"), &EntitySkill::get_skill_id);
ClassDB::bind_method(D_METHOD("set_skill_id", "value"), &EntitySkill::set_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"); ADD_PROPERTY(PropertyInfo(Variant::INT, "skill_id"), "set_skill_id", "get_skill_id");

View File

@ -2,11 +2,15 @@
#define ENTITY_SKILL_H #define ENTITY_SKILL_H
#include "core/reference.h" #include "core/reference.h"
#include "entity_skill_data.h"
class EntitySkill : public Reference { class EntitySkill : public Reference {
GDCLASS(EntitySkill, Reference); GDCLASS(EntitySkill, Reference);
public: public:
Ref<EntitySkillData> get_skill();
void set_skill(Ref<EntitySkillData> value);
int get_skill_id(); int get_skill_id();
void set_skill_id(int value); void set_skill_id(int value);
@ -18,7 +22,6 @@ public:
bool get_disabled(); bool get_disabled();
void set_disabled(bool value); void set_disabled(bool value);
Dictionary to_dict(); Dictionary to_dict();
void from_dict(const Dictionary &dict); void from_dict(const Dictionary &dict);
@ -26,11 +29,13 @@ public:
void _from_dict(const Dictionary &dict); void _from_dict(const Dictionary &dict);
EntitySkill(); EntitySkill();
~EntitySkill();
protected: protected:
static void _bind_methods(); static void _bind_methods();
private: private:
Ref<EntitySkillData> _skill;
int _skill_id; int _skill_id;
int _current; int _current;
int _max; int _max;

View File

@ -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");
}

View File

@ -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

View File

@ -4,6 +4,8 @@
#include "./data/aura.h" #include "./data/aura.h"
#include "./data/craft_recipe.h" #include "./data/craft_recipe.h"
#include "./data/spell.h" #include "./data/spell.h"
#include "./entities/resources/entity_resource_data.h"
#include "./entities/skills/entity_skill_data.h"
EntityDataManager *EntityDataManager::instance; EntityDataManager *EntityDataManager::instance;
@ -77,6 +79,36 @@ void EntityDataManager::add_entity_resource(Ref<EntityResourceData> cls) {
_entity_resource_map.set(cls->get_id(), 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<Ref<EntitySkillData> > *EntityDataManager::get_entity_skills() {
return &_entity_skills;
}
Ref<EntitySkillData> EntityDataManager::get_entity_skill(int class_id) {
if (!_entity_skill_map.has(class_id))
return Ref<EntitySkillData>(NULL);
return _entity_skill_map.get(class_id);
}
Ref<EntitySkillData> EntityDataManager::get_entity_skill_index(int index) {
ERR_FAIL_INDEX_V(index, _entity_skills.size(), Ref<EntitySkillData>(NULL));
return _entity_skills.get(index);
}
int EntityDataManager::get_entity_skill_count() {
return _entity_skills.size();
}
void EntityDataManager::add_entity_skill(Ref<EntitySkillData> 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() { String EntityDataManager::get_entity_datas_folder() {
return _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_index", "index"), &EntityDataManager::get_entity_resource_index);
ClassDB::bind_method(D_METHOD("get_entity_resource_count"), &EntityDataManager::get_entity_resource_count); 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 //EntityData
ClassDB::bind_method(D_METHOD("get_entity_datas_folder"), &EntityDataManager::get_entity_datas_folder); 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); 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_resources.clear();
_entity_resource_map.clear(); _entity_resource_map.clear();
_entity_skills.clear();
_entity_skill_map.clear();
_entity_datas.clear(); _entity_datas.clear();
_entity_data_map.clear(); _entity_data_map.clear();

View File

@ -23,6 +23,7 @@ class EntityData;
class CraftRecipe; class CraftRecipe;
class ItemTemplate; class ItemTemplate;
class EntityResourceData; class EntityResourceData;
class EntitySkillData;
class EntityDataManager : public Node { class EntityDataManager : public Node {
GDCLASS(EntityDataManager, Node); GDCLASS(EntityDataManager, Node);
@ -45,6 +46,14 @@ public:
int get_entity_resource_count(); int get_entity_resource_count();
void add_entity_resource(Ref<EntityResourceData> cls); void add_entity_resource(Ref<EntityResourceData> cls);
String get_entity_skills_folder();
void set_entity_skills_folder(String folder);
Vector<Ref<EntitySkillData> > *get_entity_skills();
Ref<EntitySkillData> get_entity_skill(int class_id);
Ref<EntitySkillData> get_entity_skill_index(int index);
int get_entity_skill_count();
void add_entity_skill(Ref<EntitySkillData> cls);
String get_entity_datas_folder(); String get_entity_datas_folder();
void set_entity_datas_folder(String folder); void set_entity_datas_folder(String folder);
Vector<Ref<EntityData> > *get_entity_datas(); Vector<Ref<EntityData> > *get_entity_datas();
@ -137,6 +146,10 @@ private:
Vector<Ref<EntityResourceData> > _entity_resources; Vector<Ref<EntityResourceData> > _entity_resources;
HashMap<int, Ref<EntityResourceData> > _entity_resource_map; HashMap<int, Ref<EntityResourceData> > _entity_resource_map;
String _entity_skills_folder;
Vector<Ref<EntitySkillData> > _entity_skills;
HashMap<int, Ref<EntitySkillData> > _entity_skill_map;
String _entity_datas_folder; String _entity_datas_folder;
Vector<Ref<EntityData> > _entity_datas; Vector<Ref<EntityData> > _entity_datas;
HashMap<int, Ref<EntityData> > _entity_data_map; HashMap<int, Ref<EntityData> > _entity_data_map;

View File

@ -23,6 +23,7 @@
#include "entities/data/entity_data_container.h" #include "entities/data/entity_data_container.h"
#include "entities/skills/entity_skill.h" #include "entities/skills/entity_skill.h"
#include "entities/skills/entity_skill_data.h"
#include "entities/data/talent_row_data.h" #include "entities/data/talent_row_data.h"
#include "entities/data/character_spec.h" #include "entities/data/character_spec.h"
@ -157,6 +158,7 @@ void register_entity_spell_system_types() {
ClassDB::register_class<EquipmentDataEntry>(); ClassDB::register_class<EquipmentDataEntry>();
ClassDB::register_class<EntitySkill>(); ClassDB::register_class<EntitySkill>();
ClassDB::register_class<EntitySkillData>();
ClassDB::register_class<EntityDataManager>(); ClassDB::register_class<EntityDataManager>();