mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-04-19 21:33:15 +02:00
Made EntityDataManager a proper registered singleton. Also removed a double.
This commit is contained in:
parent
29a26d9774
commit
5f5cdac043
@ -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<Aura> 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() {
|
||||
|
@ -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();
|
||||
|
@ -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<Aura> EntityDataManager::get_skill_for_armor_type(int index) {
|
||||
ERR_FAIL_INDEX_V(index, ItemEnums::ARMOR_TYPE_MAX, Ref<Aura>());
|
||||
|
||||
return _armor_type_skills[index];
|
||||
}
|
||||
void EntityDataManager::set_skill_for_armor_type(int index, Ref<Aura> 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<XPData> 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<Ref<EntityData> > *EntityDataManager::get_entity_datas() {
|
||||
return &_entity_datas;
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_entity_data(int class_id) {
|
||||
if (!_entity_data_map.has(class_id))
|
||||
return Ref<EntityData>(NULL);
|
||||
|
||||
return _entity_data_map.get(class_id);
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_entity_data_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _entity_datas.size(), Ref<EntityData>(NULL));
|
||||
|
||||
return _entity_datas.get(index);
|
||||
}
|
||||
|
||||
int EntityDataManager::get_entity_data_count() {
|
||||
return _entity_datas.size();
|
||||
}
|
||||
|
||||
void EntityDataManager::add_entity_data(Ref<EntityData> 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<Ref<Spell> > *EntityDataManager::get_spells() {
|
||||
return &_spells;
|
||||
}
|
||||
|
||||
Ref<Spell> EntityDataManager::get_spell(int spell_id) {
|
||||
ERR_FAIL_COND_V(!_spell_map.has(spell_id), Ref<Spell>(NULL));
|
||||
|
||||
return _spell_map.get(spell_id);
|
||||
}
|
||||
|
||||
Ref<Spell> EntityDataManager::get_spell_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _spells.size(), Ref<Spell>(NULL));
|
||||
|
||||
return _spells.get(index);
|
||||
}
|
||||
|
||||
int EntityDataManager::get_spell_count() {
|
||||
return _spells.size();
|
||||
}
|
||||
|
||||
void EntityDataManager::add_spell(Ref<Spell> spell) {
|
||||
ERR_FAIL_COND(!spell.is_valid());
|
||||
|
||||
_spells.push_back(spell);
|
||||
_spell_map.set(spell->get_id(), spell);
|
||||
}
|
||||
|
||||
void EntityDataManager::add_aura(Ref<Aura> 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<Ref<Aura> > *EntityDataManager::get_auras() {
|
||||
return &_auras;
|
||||
}
|
||||
|
||||
Ref<Aura> EntityDataManager::get_aura(int aura_id) {
|
||||
ERR_FAIL_COND_V(!_aura_map.has(aura_id), Ref<Aura>(NULL));
|
||||
|
||||
return _aura_map.get(aura_id);
|
||||
}
|
||||
|
||||
Ref<Aura> EntityDataManager::get_aura_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _auras.size(), Ref<Aura>(NULL));
|
||||
|
||||
return _auras.get(index);
|
||||
}
|
||||
|
||||
int EntityDataManager::get_aura_count() {
|
||||
return _auras.size();
|
||||
}
|
||||
|
||||
//Craft Data
|
||||
void EntityDataManager::add_craft_data(Ref<CraftRecipe> 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<Ref<CraftRecipe> > *EntityDataManager::get_craft_datas() {
|
||||
return &_craft_datas;
|
||||
}
|
||||
|
||||
Ref<CraftRecipe> EntityDataManager::get_craft_data(int craft_id) {
|
||||
ERR_FAIL_COND_V(!_craft_data_map.has(craft_id), Ref<CraftRecipe>(NULL));
|
||||
|
||||
return _craft_data_map.get(craft_id);
|
||||
}
|
||||
|
||||
Ref<CraftRecipe> EntityDataManager::get_craft_data_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _craft_datas.size(), Ref<CraftRecipe>(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<Ref<ItemTemplate> > *EntityDataManager::get_item_templates() {
|
||||
return &_item_templates;
|
||||
}
|
||||
|
||||
void EntityDataManager::add_item_template(Ref<ItemTemplate> cda) {
|
||||
ERR_FAIL_COND(!cda.is_valid());
|
||||
|
||||
_item_templates.push_back(cda);
|
||||
_item_template_map.set(cda->get_id(), cda);
|
||||
}
|
||||
|
||||
Ref<ItemTemplate> EntityDataManager::get_item_template(int item_id) {
|
||||
ERR_FAIL_COND_V(!_item_template_map.has(item_id), Ref<ItemTemplate>(NULL));
|
||||
|
||||
return _item_template_map.get(item_id);
|
||||
}
|
||||
|
||||
Ref<ItemTemplate> EntityDataManager::get_item_template_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _item_templates.size(), Ref<ItemTemplate>(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<Ref<EntityData> > *EntityDataManager::get_mob_datas() {
|
||||
return &_mob_datas;
|
||||
}
|
||||
|
||||
void EntityDataManager::add_mob_data(Ref<EntityData> cda) {
|
||||
ERR_FAIL_COND(!cda.is_valid());
|
||||
|
||||
_mob_datas.push_back(cda);
|
||||
_mob_data_map.set(cda->get_id(), cda);
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_mob_data(int item_id) {
|
||||
ERR_FAIL_COND_V(!_mob_data_map.has(item_id), Ref<EntityData>(NULL));
|
||||
|
||||
return _mob_data_map.get(item_id);
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_mob_data_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _mob_datas.size(), Ref<EntityData>(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<Ref<EntityData> > *EntityDataManager::get_player_character_datas() {
|
||||
return &_player_character_datas;
|
||||
}
|
||||
|
||||
void EntityDataManager::add_player_character_data(Ref<EntityData> cda) {
|
||||
ERR_FAIL_COND(!cda.is_valid());
|
||||
|
||||
_player_character_datas.push_back(cda);
|
||||
_player_character_data_map.set(cda->get_id(), cda);
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_player_character_data(int item_id) {
|
||||
ERR_FAIL_COND_V(!_player_character_data_map.has(item_id), Ref<EntityData>(NULL));
|
||||
|
||||
return _player_character_data_map.get(item_id);
|
||||
}
|
||||
|
||||
Ref<EntityData> EntityDataManager::get_player_character_data_index(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _player_character_datas.size(), Ref<EntityData>(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<ResourceInteractiveLoader> resl = rl->load_interactive(_xp_data_path, "XPData");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_FAIL_COND(!s.is_valid());
|
||||
|
||||
Ref<XPData> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "Spell");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<Spell> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "Aura");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<Aura> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "EntityData");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<EntityData> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "CraftRecipe");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<CraftRecipe> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "ItemTemplate");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<ItemTemplate> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "EntityData");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<EntityData> 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<ResourceInteractiveLoader> resl = rl->load_interactive(path, "EntityData");
|
||||
|
||||
resl->wait();
|
||||
|
||||
Ref<Resource> s = resl->get_resource();
|
||||
|
||||
ERR_CONTINUE(!s.is_valid());
|
||||
|
||||
Ref<EntityData> 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();
|
||||
}
|
@ -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<Aura> get_skill_for_armor_type(int index);
|
||||
void set_skill_for_armor_type(int index, Ref<Aura> aura);
|
||||
|
||||
String get_xp_data_path();
|
||||
void set_xp_data_path(String path);
|
||||
Ref<XPData> get_xp_data();
|
||||
|
||||
String get_entity_datas_folder();
|
||||
void set_entity_datas_folder(String folder);
|
||||
Vector<Ref<EntityData> > *get_entity_datas();
|
||||
Ref<EntityData> get_entity_data(int class_id);
|
||||
Ref<EntityData> get_entity_data_index(int index);
|
||||
int get_entity_data_count();
|
||||
void add_entity_data(Ref<EntityData> cls);
|
||||
|
||||
String get_spells_folder();
|
||||
void set_spells_folder(String folder);
|
||||
Vector<Ref<Spell> > *get_spells();
|
||||
Ref<Spell> get_spell(int spell_id);
|
||||
Ref<Spell> get_spell_index(int index);
|
||||
int get_spell_count();
|
||||
void add_spell(Ref<Spell> spell);
|
||||
|
||||
String get_auras_folder();
|
||||
void set_auras_folder(String folder);
|
||||
Vector<Ref<Aura> > *get_auras();
|
||||
Ref<Aura> get_aura(int aura_id);
|
||||
Ref<Aura> get_aura_index(int index);
|
||||
int get_aura_count();
|
||||
void add_aura(Ref<Aura> aura);
|
||||
|
||||
String get_craft_data_folder();
|
||||
void set_craft_data_folder(String folder);
|
||||
Vector<Ref<CraftRecipe> > *get_craft_datas();
|
||||
Ref<CraftRecipe> get_craft_data(int craft_id);
|
||||
Ref<CraftRecipe> get_craft_data_index(int index);
|
||||
int get_craft_data_count();
|
||||
void add_craft_data(Ref<CraftRecipe> aura);
|
||||
|
||||
String get_item_template_folder();
|
||||
void set_item_template_folder(String folder);
|
||||
Vector<Ref<ItemTemplate> > *get_item_templates();
|
||||
void add_item_template(Ref<ItemTemplate> aura);
|
||||
Ref<ItemTemplate> get_item_template(int item_id);
|
||||
Ref<ItemTemplate> get_item_template_index(int index);
|
||||
int get_item_template_count();
|
||||
|
||||
String get_mob_data_folder();
|
||||
void set_mob_data_folder(String folder);
|
||||
Vector<Ref<EntityData> > *get_mob_datas();
|
||||
void add_mob_data(Ref<EntityData> aura);
|
||||
Ref<EntityData> get_mob_data(int item_id);
|
||||
Ref<EntityData> 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<Ref<EntityData> > *get_player_character_datas();
|
||||
void add_player_character_data(Ref<EntityData> aura);
|
||||
Ref<EntityData> get_player_character_data(int item_id);
|
||||
Ref<EntityData> 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<XPData> _xp_data;
|
||||
|
||||
String _entity_datas_folder;
|
||||
Vector<Ref<EntityData> > _entity_datas;
|
||||
HashMap<int, Ref<EntityData> > _entity_data_map;
|
||||
|
||||
String _spells_folder;
|
||||
Vector<Ref<Spell> > _spells;
|
||||
HashMap<int, Ref<Spell> > _spell_map;
|
||||
|
||||
String _auras_folder;
|
||||
Vector<Ref<Aura> > _auras;
|
||||
HashMap<int, Ref<Aura> > _aura_map;
|
||||
|
||||
String _craft_data_folder;
|
||||
Vector<Ref<CraftRecipe> > _craft_datas;
|
||||
HashMap<int, Ref<CraftRecipe> > _craft_data_map;
|
||||
|
||||
String _item_template_folder;
|
||||
Vector<Ref<ItemTemplate> > _item_templates;
|
||||
HashMap<int, Ref<ItemTemplate> > _item_template_map;
|
||||
|
||||
String _mob_data_folder;
|
||||
Vector<Ref<EntityData> > _mob_datas;
|
||||
HashMap<int, Ref<EntityData> > _mob_data_map;
|
||||
|
||||
String _player_character_data_folder;
|
||||
Vector<Ref<EntityData> > _player_character_datas;
|
||||
HashMap<int, Ref<EntityData> > _player_character_data_map;
|
||||
|
||||
Ref<Aura> _armor_type_skills[ItemEnums::ARMOR_TYPE_MAX];
|
||||
|
||||
static EntityDataManager *instance;
|
||||
|
||||
bool _automatic_load;
|
||||
};
|
||||
|
||||
#endif
|
@ -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<SpellEnums>();
|
||||
|
||||
ClassDB::register_class<EntityDataManager>();
|
||||
|
||||
//data
|
||||
ClassDB::register_class<CraftRecipeHelper>();
|
||||
ClassDB::register_class<CraftRecipe>();
|
||||
@ -257,7 +257,15 @@ void register_entity_spell_system_types() {
|
||||
|
||||
ClassDB::register_class<ClassProfile>();
|
||||
ClassDB::register_class<ProfileManager>();
|
||||
|
||||
entity_data_manager = memnew(EntityDataManager);
|
||||
ClassDB::register_class<EntityDataManager>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user