diff --git a/autoloads/entity_data_manager.cpp b/autoloads/entity_data_manager.cpp index fce1e7a..d786ff1 100644 --- a/autoloads/entity_data_manager.cpp +++ b/autoloads/entity_data_manager.cpp @@ -36,7 +36,7 @@ EntityDataManager *EntityDataManager::get_instance() { } void EntityDataManager::_notification(int p_what) { - +/* switch (p_what) { case NOTIFICATION_ENTER_TREE: { @@ -48,7 +48,7 @@ void EntityDataManager::_notification(int p_what) { case NOTIFICATION_EXIT_TREE: { } break; - } + }*/ } Ref EntityDataManager::get_skill_for_armor_type(int index) { @@ -1007,7 +1007,23 @@ void EntityDataManager::_bind_methods() { EntityDataManager::EntityDataManager() { instance = this; - _automatic_load = true; + //_automatic_load = GLOBAL_DEF("ess/data/automatic_load", false); + + _xp_data_path = GLOBAL_DEF("ess/data/xp_data_path", ""); + _entity_resources_folder = GLOBAL_DEF("ess/data/entity_resources_folder", ""); + _entity_skills_folder = GLOBAL_DEF("ess/data/entity_skills_folder", ""); + _entity_datas_folder = GLOBAL_DEF("ess/data/entity_datas_folder", ""); + _spells_folder = GLOBAL_DEF("ess/data/spells_folder", ""); + _auras_folder = GLOBAL_DEF("ess/data/auras_folder", ""); + _world_spell_datas_folder = GLOBAL_DEF("ess/data/world_spell_datas_folder", ""); + _craft_data_folder = GLOBAL_DEF("ess/data/craft_data_folder", ""); + _item_template_folder = GLOBAL_DEF("ess/data/item_template_folder", ""); + _mob_data_folder = GLOBAL_DEF("ess/data/mob_data_folder", ""); + _player_character_data_folder = GLOBAL_DEF("ess/data/player_character_data_folder", ""); + + //if (_automatic_load) { + // load_all(); + //} } EntityDataManager::~EntityDataManager() { diff --git a/autoloads/entity_data_manager.h b/autoloads/entity_data_manager.h index 9c62672..0f51960 100644 --- a/autoloads/entity_data_manager.h +++ b/autoloads/entity_data_manager.h @@ -23,6 +23,8 @@ SOFTWARE. #ifndef ENTITY_DATA_MANAGER_H #define ENTITY_DATA_MANAGER_H +#include "core/object.h" + #include "core/array.h" #include "core/engine.h" #include "core/hash_map.h" @@ -50,8 +52,8 @@ class ItemTemplate; class EntityResourceData; class EntitySkillData; -class EntityDataManager : public Node { - GDCLASS(EntityDataManager, Node); +class EntityDataManager : public Object { + GDCLASS(EntityDataManager, Object); public: static EntityDataManager *get_instance(); diff --git a/entity_data_manager.cpp b/entity_data_manager.cpp deleted file mode 100644 index c0964c4..0000000 --- a/entity_data_manager.cpp +++ /dev/null @@ -1,794 +0,0 @@ -/* -Copyright (c) 2019-2020 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include "entity_data_manager.h" - -#include "./data/aura.h" -#include "./data/craft_recipe.h" -#include "./data/spell.h" -#include "./entities/data/entity_data.h" - -EntityDataManager *EntityDataManager::instance; - -EntityDataManager *EntityDataManager::get_instance() { - return instance; -} - -void EntityDataManager::_notification(int p_what) { - - switch (p_what) { - - case NOTIFICATION_ENTER_TREE: { - if (get_automatic_load()) { - load_all(); - } - } break; - case NOTIFICATION_EXIT_TREE: { - - } break; - } -} - -Ref EntityDataManager::get_skill_for_armor_type(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::ARMOR_TYPE_MAX, Ref()); - - return _armor_type_skills[index]; -} -void EntityDataManager::set_skill_for_armor_type(int index, Ref aura) { - ERR_FAIL_INDEX(index, ItemEnums::ARMOR_TYPE_MAX); - - _armor_type_skills[index] = aura; -} - -String EntityDataManager::get_xp_data_path() { - return _xp_data_path; -} -void EntityDataManager::set_xp_data_path(String path) { - _xp_data_path = path; -} -Ref EntityDataManager::get_xp_data() { - return _xp_data; -} - -String EntityDataManager::get_entity_datas_folder() { - return _entity_datas_folder; -} - -void EntityDataManager::set_entity_datas_folder(String folder) { - _entity_datas_folder = folder; -} - -Vector > *EntityDataManager::get_entity_datas() { - return &_entity_datas; -} - -Ref EntityDataManager::get_entity_data(int class_id) { - if (!_entity_data_map.has(class_id)) - return Ref(NULL); - - return _entity_data_map.get(class_id); -} - -Ref EntityDataManager::get_entity_data_index(int index) { - ERR_FAIL_INDEX_V(index, _entity_datas.size(), Ref(NULL)); - - return _entity_datas.get(index); -} - -int EntityDataManager::get_entity_data_count() { - return _entity_datas.size(); -} - -void EntityDataManager::add_entity_data(Ref cls) { - ERR_FAIL_COND(!cls.is_valid()); - - _entity_datas.push_back(cls); - _entity_data_map.set(cls->get_id(), cls); -} - -String EntityDataManager::get_spells_folder() { - return _spells_folder; -} -void EntityDataManager::set_spells_folder(String folder) { - _spells_folder = folder; -} -Vector > *EntityDataManager::get_spells() { - return &_spells; -} - -Ref EntityDataManager::get_spell(int spell_id) { - ERR_FAIL_COND_V(!_spell_map.has(spell_id), Ref(NULL)); - - return _spell_map.get(spell_id); -} - -Ref EntityDataManager::get_spell_index(int index) { - ERR_FAIL_INDEX_V(index, _spells.size(), Ref(NULL)); - - return _spells.get(index); -} - -int EntityDataManager::get_spell_count() { - return _spells.size(); -} - -void EntityDataManager::add_spell(Ref spell) { - ERR_FAIL_COND(!spell.is_valid()); - - _spells.push_back(spell); - _spell_map.set(spell->get_id(), spell); -} - -void EntityDataManager::add_aura(Ref aura) { - ERR_FAIL_COND(!aura.is_valid()); - - _auras.push_back(aura); - _aura_map.set(aura->get_id(), aura); -} - -String EntityDataManager::get_auras_folder() { - return _auras_folder; -} -void EntityDataManager::set_auras_folder(String folder) { - _auras_folder = folder; -} -Vector > *EntityDataManager::get_auras() { - return &_auras; -} - -Ref EntityDataManager::get_aura(int aura_id) { - ERR_FAIL_COND_V(!_aura_map.has(aura_id), Ref(NULL)); - - return _aura_map.get(aura_id); -} - -Ref EntityDataManager::get_aura_index(int index) { - ERR_FAIL_INDEX_V(index, _auras.size(), Ref(NULL)); - - return _auras.get(index); -} - -int EntityDataManager::get_aura_count() { - return _auras.size(); -} - -//Craft Data -void EntityDataManager::add_craft_data(Ref cda) { - ERR_FAIL_COND(!cda.is_valid()); - - _craft_datas.push_back(cda); - _craft_data_map.set(cda->get_id(), cda); -} - -String EntityDataManager::get_craft_data_folder() { - return _craft_data_folder; -} -void EntityDataManager::set_craft_data_folder(String folder) { - _craft_data_folder = folder; -} -Vector > *EntityDataManager::get_craft_datas() { - return &_craft_datas; -} - -Ref EntityDataManager::get_craft_data(int craft_id) { - ERR_FAIL_COND_V(!_craft_data_map.has(craft_id), Ref(NULL)); - - return _craft_data_map.get(craft_id); -} - -Ref EntityDataManager::get_craft_data_index(int index) { - ERR_FAIL_INDEX_V(index, _craft_datas.size(), Ref(NULL)); - - return _craft_datas.get(index); -} - -int EntityDataManager::get_craft_data_count() { - return _craft_datas.size(); -} - -String EntityDataManager::get_item_template_folder() { - return _item_template_folder; -} -void EntityDataManager::set_item_template_folder(String folder) { - _item_template_folder = folder; -} -Vector > *EntityDataManager::get_item_templates() { - return &_item_templates; -} - -void EntityDataManager::add_item_template(Ref cda) { - ERR_FAIL_COND(!cda.is_valid()); - - _item_templates.push_back(cda); - _item_template_map.set(cda->get_id(), cda); -} - -Ref EntityDataManager::get_item_template(int item_id) { - ERR_FAIL_COND_V(!_item_template_map.has(item_id), Ref(NULL)); - - return _item_template_map.get(item_id); -} - -Ref EntityDataManager::get_item_template_index(int index) { - ERR_FAIL_INDEX_V(index, _item_templates.size(), Ref(NULL)); - - return _item_templates.get(index); -} - -int EntityDataManager::get_item_template_count() { - return _item_templates.size(); -} - -String EntityDataManager::get_mob_data_folder() { - return _mob_data_folder; -} -void EntityDataManager::set_mob_data_folder(String folder) { - _mob_data_folder = folder; -} -Vector > *EntityDataManager::get_mob_datas() { - return &_mob_datas; -} - -void EntityDataManager::add_mob_data(Ref cda) { - ERR_FAIL_COND(!cda.is_valid()); - - _mob_datas.push_back(cda); - _mob_data_map.set(cda->get_id(), cda); -} - -Ref EntityDataManager::get_mob_data(int item_id) { - ERR_FAIL_COND_V(!_mob_data_map.has(item_id), Ref(NULL)); - - return _mob_data_map.get(item_id); -} - -Ref EntityDataManager::get_mob_data_index(int index) { - ERR_FAIL_INDEX_V(index, _mob_datas.size(), Ref(NULL)); - - return _mob_datas.get(index); -} - -int EntityDataManager::get_mob_data_count() { - return _mob_datas.size(); -} - -String EntityDataManager::get_player_character_data_folder() { - return _player_character_data_folder; -} -void EntityDataManager::set_player_character_data_folder(String folder) { - _player_character_data_folder = folder; -} -Vector > *EntityDataManager::get_player_character_datas() { - return &_player_character_datas; -} - -void EntityDataManager::add_player_character_data(Ref cda) { - ERR_FAIL_COND(!cda.is_valid()); - - _player_character_datas.push_back(cda); - _player_character_data_map.set(cda->get_id(), cda); -} - -Ref EntityDataManager::get_player_character_data(int item_id) { - ERR_FAIL_COND_V(!_player_character_data_map.has(item_id), Ref(NULL)); - - return _player_character_data_map.get(item_id); -} - -Ref EntityDataManager::get_player_character_data_index(int index) { - ERR_FAIL_INDEX_V(index, _player_character_datas.size(), Ref(NULL)); - - return _player_character_datas.get(index); -} - -int EntityDataManager::get_player_character_data_count() { - return _player_character_datas.size(); -} - -void EntityDataManager::load_all() { - load_xp_data(); - load_spells(); - load_auras(); - load_characters(); - load_craft_datas(); - load_item_templates(); - load_mob_datas(); - load_player_character_datas(); -} - -void EntityDataManager::load_xp_data() { - _Directory dir; - - ERR_FAIL_COND(_xp_data_path == ""); - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(_xp_data_path, "XPData"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_FAIL_COND(!s.is_valid()); - - Ref d = s; - - ERR_FAIL_COND(!d.is_valid()); - - _xp_data = d; -} - -void EntityDataManager::load_spells() { - _Directory dir; - - ERR_FAIL_COND(_spells_folder.ends_with("/")); - - if (dir.open(_spells_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _spells_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "Spell"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref spell = s; - - ERR_CONTINUE(!spell.is_valid()); - - add_spell(spell); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_auras() { - _Directory dir; - - ERR_FAIL_COND(_auras_folder.ends_with("/")); - - if (dir.open(_auras_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _auras_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "Aura"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref aura = s; - - ERR_CONTINUE(!aura.is_valid()); - - add_aura(aura); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_characters() { - _Directory dir; - - ERR_FAIL_COND(_entity_datas_folder.ends_with("/")); - - if (dir.open(_entity_datas_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _entity_datas_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "EntityData"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref cls = s; - - ERR_CONTINUE(!cls.is_valid()); - - add_entity_data(cls); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_craft_datas() { - _Directory dir; - - ERR_FAIL_COND(_craft_data_folder.ends_with("/")); - - if (dir.open(_craft_data_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _craft_data_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "CraftRecipe"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref cda = s; - - ERR_CONTINUE(!cda.is_valid()); - - add_craft_data(cda); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_item_templates() { - _Directory dir; - - ERR_FAIL_COND(_item_template_folder.ends_with("/")); - - if (dir.open(_item_template_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _item_template_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "ItemTemplate"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref it = s; - - ERR_CONTINUE(!it.is_valid()); - - add_item_template(it); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_mob_datas() { - _Directory dir; - - ERR_FAIL_COND(_mob_data_folder.ends_with("/")); - - if (dir.open(_mob_data_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _mob_data_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "EntityData"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref mob_data = s; - - ERR_CONTINUE(!mob_data.is_valid()); - - add_mob_data(mob_data); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::load_player_character_datas() { - _Directory dir; - - ERR_FAIL_COND(_player_character_data_folder.ends_with("/")); - - if (dir.open(_player_character_data_folder) == OK) { - - dir.list_dir_begin(); - - String filename = dir.get_next(); - - while (filename != "") { - if (!dir.current_is_dir()) { - String path = _player_character_data_folder + "/" + filename; - - _ResourceLoader *rl = _ResourceLoader::get_singleton(); - - Ref resl = rl->load_interactive(path, "EntityData"); - - resl->wait(); - - Ref s = resl->get_resource(); - - ERR_CONTINUE(!s.is_valid()); - - Ref pcd = s; - - ERR_CONTINUE(!pcd.is_valid()); - - add_player_character_data(pcd); - } - - filename = dir.get_next(); - } - } else { - print_error("An error occurred when trying to access the path."); - } -} - -void EntityDataManager::list_characters() { - for (int i = 0; i < _entity_datas.size(); ++i) { - print_error(itos(i) + ": " + _entity_datas.get(i)->get_name()); - } -} - -void EntityDataManager::list_spells() { - for (int i = 0; i < _spells.size(); ++i) { - print_error(itos(i) + ": " + _spells.get(i)->get_name()); - } -} - -void EntityDataManager::list_auras() { - for (int i = 0; i < _auras.size(); ++i) { - print_error(itos(i) + ": " + _auras.get(i)->get_name()); - } -} - -void EntityDataManager::list_craft_data() { - for (int i = 0; i < _craft_datas.size(); ++i) { - print_error(itos(i) + ": " + _craft_datas.get(i)->get_name()); - } -} - -void EntityDataManager::list_item_templates() { - for (int i = 0; i < _item_templates.size(); ++i) { - print_error(itos(i) + ": " + _item_templates.get(i)->get_name()); - } -} - -void EntityDataManager::list_mob_datas() { - for (int i = 0; i < _mob_datas.size(); ++i) { - print_error(itos(i) + ": " + _mob_datas.get(i)->get_name()); - } -} - -void EntityDataManager::list_player_character_datas() { - for (int i = 0; i < _player_character_datas.size(); ++i) { - print_error(itos(i) + ": " + _player_character_datas.get(i)->get_name()); - } -} - -void EntityDataManager::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_skill_for_armor_type", "index"), &EntityDataManager::get_skill_for_armor_type); - ClassDB::bind_method(D_METHOD("set_skill_for_armor_type", "index", "aura"), &EntityDataManager::set_skill_for_armor_type); - - for (int i = 0; i < ItemEnums::ARMOR_TYPE_MAX; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "skill_for_armor_type_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_skill_for_armor_type", "get_skill_for_armor_type", i); - } - - ClassDB::bind_method(D_METHOD("get_automatic_load"), &EntityDataManager::get_automatic_load); - ClassDB::bind_method(D_METHOD("set_automatic_load", "load"), &EntityDataManager::set_automatic_load); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "automatic_load"), "set_automatic_load", "get_automatic_load"); - - //XPData - ClassDB::bind_method(D_METHOD("get_xp_data_path"), &EntityDataManager::get_xp_data_path); - ClassDB::bind_method(D_METHOD("set_xp_data_path", "path"), &EntityDataManager::set_xp_data_path); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "xp_data_path"), "set_xp_data_path", "get_xp_data_path"); - - ClassDB::bind_method(D_METHOD("get_xp_data"), &EntityDataManager::get_xp_data); - - //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); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "entity_datas_folder"), "set_entity_datas_folder", "get_entity_datas_folder"); - - ClassDB::bind_method(D_METHOD("add_entity_data", "cls"), &EntityDataManager::add_entity_data); - ClassDB::bind_method(D_METHOD("get_entity_data", "class_id"), &EntityDataManager::get_entity_data); - ClassDB::bind_method(D_METHOD("get_entity_data_index", "index"), &EntityDataManager::get_entity_data_index); - ClassDB::bind_method(D_METHOD("get_entity_data_count"), &EntityDataManager::get_entity_data_count); - - //Spell - ClassDB::bind_method(D_METHOD("get_spells_folder"), &EntityDataManager::get_spells_folder); - ClassDB::bind_method(D_METHOD("set_spells_folder", "folder"), &EntityDataManager::set_spells_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "spells_folder"), "set_spells_folder", "get_spells_folder"); - - ClassDB::bind_method(D_METHOD("add_spell", "spell"), &EntityDataManager::add_spell); - ClassDB::bind_method(D_METHOD("get_spell", "spell_id"), &EntityDataManager::get_spell); - ClassDB::bind_method(D_METHOD("get_spell_index", "index"), &EntityDataManager::get_spell_index); - ClassDB::bind_method(D_METHOD("get_spell_count"), &EntityDataManager::get_spell_count); - - //Aura - ClassDB::bind_method(D_METHOD("get_auras_folder"), &EntityDataManager::get_auras_folder); - ClassDB::bind_method(D_METHOD("set_auras_folder", "folder"), &EntityDataManager::set_auras_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "auras_folder"), "set_auras_folder", "get_auras_folder"); - - ClassDB::bind_method(D_METHOD("add_aura", "spell"), &EntityDataManager::add_aura); - ClassDB::bind_method(D_METHOD("get_aura", "id"), &EntityDataManager::get_aura); - ClassDB::bind_method(D_METHOD("get_aura_index", "index"), &EntityDataManager::get_aura_index); - ClassDB::bind_method(D_METHOD("get_aura_count"), &EntityDataManager::get_aura_count); - - //Craft Data - ClassDB::bind_method(D_METHOD("get_craft_data_folder"), &EntityDataManager::get_craft_data_folder); - ClassDB::bind_method(D_METHOD("set_craft_data_folder", "folder"), &EntityDataManager::set_craft_data_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "craft_data_folder"), "set_craft_data_folder", "get_craft_data_folder"); - - ClassDB::bind_method(D_METHOD("add_craft_data", "craft_data"), &EntityDataManager::add_craft_data); - ClassDB::bind_method(D_METHOD("get_craft_data", "craft_data_id"), &EntityDataManager::get_craft_data); - ClassDB::bind_method(D_METHOD("get_craft_data_index", "index"), &EntityDataManager::get_craft_data_index); - ClassDB::bind_method(D_METHOD("get_craft_data_count"), &EntityDataManager::get_craft_data_count); - - //Item Templates - ClassDB::bind_method(D_METHOD("get_item_template_folder"), &EntityDataManager::get_item_template_folder); - ClassDB::bind_method(D_METHOD("set_item_template_folder", "folder"), &EntityDataManager::set_item_template_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "item_template_folder"), "set_item_template_folder", "get_item_template_folder"); - - ClassDB::bind_method(D_METHOD("add_item_template", "item_template"), &EntityDataManager::add_item_template); - ClassDB::bind_method(D_METHOD("get_item_template", "item_template_id"), &EntityDataManager::get_item_template); - ClassDB::bind_method(D_METHOD("get_item_template_index", "index"), &EntityDataManager::get_item_template_index); - ClassDB::bind_method(D_METHOD("get_item_template_count"), &EntityDataManager::get_item_template_count); - - //Mob Data - ClassDB::bind_method(D_METHOD("get_mob_data_folder"), &EntityDataManager::get_mob_data_folder); - ClassDB::bind_method(D_METHOD("set_mob_data_folder", "folder"), &EntityDataManager::set_mob_data_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "mob_data_folder"), "set_mob_data_folder", "get_mob_data_folder"); - - ClassDB::bind_method(D_METHOD("add_mob_data", "mob_data"), &EntityDataManager::add_mob_data); - ClassDB::bind_method(D_METHOD("get_mob_data", "mob_data_id"), &EntityDataManager::get_mob_data); - ClassDB::bind_method(D_METHOD("get_mob_data_index", "index"), &EntityDataManager::get_mob_data_index); - ClassDB::bind_method(D_METHOD("get_mob_data_count"), &EntityDataManager::get_mob_data_count); - - //Player Character Data - ClassDB::bind_method(D_METHOD("get_player_character_data_folder"), &EntityDataManager::get_player_character_data_folder); - ClassDB::bind_method(D_METHOD("set_player_character_data_folder", "folder"), &EntityDataManager::set_player_character_data_folder); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "player_character_data_folder"), "set_player_character_data_folder", "get_player_character_data_folder"); - - ClassDB::bind_method(D_METHOD("add_player_character_data", "pcd"), &EntityDataManager::add_player_character_data); - ClassDB::bind_method(D_METHOD("get_player_character_data", "pcd_id"), &EntityDataManager::get_player_character_data); - ClassDB::bind_method(D_METHOD("get_player_character_data_index", "index"), &EntityDataManager::get_player_character_data_index); - ClassDB::bind_method(D_METHOD("get_player_character_data_count"), &EntityDataManager::get_player_character_data_count); - - //load - ClassDB::bind_method(D_METHOD("load_all"), &EntityDataManager::load_all); - ClassDB::bind_method(D_METHOD("load_xp_data"), &EntityDataManager::load_xp_data); - ClassDB::bind_method(D_METHOD("load_spells"), &EntityDataManager::load_spells); - ClassDB::bind_method(D_METHOD("load_auras"), &EntityDataManager::load_auras); - ClassDB::bind_method(D_METHOD("load_characters"), &EntityDataManager::load_characters); - ClassDB::bind_method(D_METHOD("load_craft_datas"), &EntityDataManager::load_craft_datas); - ClassDB::bind_method(D_METHOD("load_item_templates"), &EntityDataManager::load_item_templates); - ClassDB::bind_method(D_METHOD("load_mob_datas"), &EntityDataManager::load_mob_datas); - ClassDB::bind_method(D_METHOD("load_player_character_datas"), &EntityDataManager::load_player_character_datas); - - //tests - ClassDB::bind_method(D_METHOD("list_characters"), &EntityDataManager::list_characters); - ClassDB::bind_method(D_METHOD("list_spells"), &EntityDataManager::list_spells); - ClassDB::bind_method(D_METHOD("list_auras"), &EntityDataManager::list_auras); - ClassDB::bind_method(D_METHOD("list_craft_data"), &EntityDataManager::list_craft_data); - ClassDB::bind_method(D_METHOD("list_item_templates"), &EntityDataManager::list_item_templates); - ClassDB::bind_method(D_METHOD("list_mob_datas"), &EntityDataManager::list_mob_datas); - ClassDB::bind_method(D_METHOD("list_player_character_datas"), &EntityDataManager::list_player_character_datas); -} - -EntityDataManager::EntityDataManager() { - instance = this; - - _automatic_load = true; -} - -EntityDataManager::~EntityDataManager() { - instance = NULL; - - _entity_datas.clear(); - _entity_data_map.clear(); - - _spells.clear(); - _spell_map.clear(); - - _auras.clear(); - _aura_map.clear(); - - _craft_datas.clear(); - _craft_data_map.clear(); - - _item_templates.clear(); - _item_template_map.clear(); - - _mob_datas.clear(); - _mob_data_map.clear(); - - _player_character_datas.clear(); - _player_character_data_map.clear(); -} diff --git a/entity_data_manager.h b/entity_data_manager.h deleted file mode 100644 index 73f48a3..0000000 --- a/entity_data_manager.h +++ /dev/null @@ -1,184 +0,0 @@ -/* -Copyright (c) 2019-2020 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef ENTITY_DATA_MANAGER_H -#define ENTITY_DATA_MANAGER_H - -#include "core/array.h" -#include "core/hash_map.h" -#include "core/io/json.h" -#include "core/variant.h" -#include "core/vector.h" - -#include "core/resource.h" -#include "core/ustring.h" -#include "scene/main/node.h" - -#include "core/bind/core_bind.h" - -#include "item_enums.h" - -#include "./data/xp_data.h" - -class Aura; -class Spell; -class EntityData; -class CraftRecipe; -class ItemTemplate; - -class EntityDataManager : public Node { - GDCLASS(EntityDataManager, Node); - -public: - static EntityDataManager *get_instance(); - - Ref get_skill_for_armor_type(int index); - void set_skill_for_armor_type(int index, Ref aura); - - String get_xp_data_path(); - void set_xp_data_path(String path); - Ref get_xp_data(); - - String get_entity_datas_folder(); - void set_entity_datas_folder(String folder); - Vector > *get_entity_datas(); - Ref get_entity_data(int class_id); - Ref get_entity_data_index(int index); - int get_entity_data_count(); - void add_entity_data(Ref cls); - - String get_spells_folder(); - void set_spells_folder(String folder); - Vector > *get_spells(); - Ref get_spell(int spell_id); - Ref get_spell_index(int index); - int get_spell_count(); - void add_spell(Ref spell); - - String get_auras_folder(); - void set_auras_folder(String folder); - Vector > *get_auras(); - Ref get_aura(int aura_id); - Ref get_aura_index(int index); - int get_aura_count(); - void add_aura(Ref aura); - - String get_craft_data_folder(); - void set_craft_data_folder(String folder); - Vector > *get_craft_datas(); - Ref get_craft_data(int craft_id); - Ref get_craft_data_index(int index); - int get_craft_data_count(); - void add_craft_data(Ref aura); - - String get_item_template_folder(); - void set_item_template_folder(String folder); - Vector > *get_item_templates(); - void add_item_template(Ref aura); - Ref get_item_template(int item_id); - Ref get_item_template_index(int index); - int get_item_template_count(); - - String get_mob_data_folder(); - void set_mob_data_folder(String folder); - Vector > *get_mob_datas(); - void add_mob_data(Ref aura); - Ref get_mob_data(int item_id); - Ref get_mob_data_index(int index); - int get_mob_data_count(); - - String get_player_character_data_folder(); - void set_player_character_data_folder(String folder); - Vector > *get_player_character_datas(); - void add_player_character_data(Ref aura); - Ref get_player_character_data(int item_id); - Ref get_player_character_data_index(int index); - int get_player_character_data_count(); - - void load_all(); - void load_xp_data(); - void load_spells(); - void load_auras(); - void load_characters(); - void load_craft_datas(); - void load_item_templates(); - void load_mob_datas(); - void load_player_character_datas(); - - void list_characters(); - void list_spells(); - void list_auras(); - void list_craft_data(); - void list_item_templates(); - void list_mob_datas(); - void list_player_character_datas(); - - bool get_automatic_load() { return _automatic_load; } - void set_automatic_load(bool load) { _automatic_load = load; } - - EntityDataManager(); - ~EntityDataManager(); - -protected: - static void _bind_methods(); - void _notification(int p_what); - -private: - String _xp_data_path; - Ref _xp_data; - - String _entity_datas_folder; - Vector > _entity_datas; - HashMap > _entity_data_map; - - String _spells_folder; - Vector > _spells; - HashMap > _spell_map; - - String _auras_folder; - Vector > _auras; - HashMap > _aura_map; - - String _craft_data_folder; - Vector > _craft_datas; - HashMap > _craft_data_map; - - String _item_template_folder; - Vector > _item_templates; - HashMap > _item_template_map; - - String _mob_data_folder; - Vector > _mob_datas; - HashMap > _mob_data_map; - - String _player_character_data_folder; - Vector > _player_character_datas; - HashMap > _player_character_data_map; - - Ref _armor_type_skills[ItemEnums::ARMOR_TYPE_MAX]; - - static EntityDataManager *instance; - - bool _automatic_load; -}; - -#endif diff --git a/register_types.cpp b/register_types.cpp index a3785ec..e5c547b 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -133,11 +133,11 @@ SOFTWARE. #include "profile_manager/class_profile.h" #include "profile_manager/profile_manager.h" +static EntityDataManager *entity_data_manager = NULL; + void register_entity_spell_system_types() { ClassDB::register_class(); - ClassDB::register_class(); - //data ClassDB::register_class(); ClassDB::register_class(); @@ -257,7 +257,15 @@ void register_entity_spell_system_types() { ClassDB::register_class(); ClassDB::register_class(); + + entity_data_manager = memnew(EntityDataManager); + ClassDB::register_class(); + Engine::get_singleton()->add_singleton(Engine::Singleton("EntityDataManager", EntityDataManager::get_instance())); + } void unregister_entity_spell_system_types() { + if (entity_data_manager) { + memdelete(entity_data_manager); + } }