mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-02-22 17:18:12 +01:00
ProfileManager is now a singleton, and fixed automatic loading in EntityDataManager.
This commit is contained in:
parent
5f5cdac043
commit
26c638881b
@ -213,7 +213,7 @@ Vector<Ref<Aura> > *EntityDataManager::get_auras() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Ref<Aura> EntityDataManager::get_aura(int aura_id) {
|
Ref<Aura> EntityDataManager::get_aura(int aura_id) {
|
||||||
ERR_FAIL_COND_V(!_aura_map.has(aura_id), Ref<Aura>(NULL));
|
ERR_FAIL_COND_V_MSG(!_aura_map.has(aura_id), Ref<Aura>(NULL), "Could not find aura! Id:" + String::num(aura_id));
|
||||||
|
|
||||||
return _aura_map.get(aura_id);
|
return _aura_map.get(aura_id);
|
||||||
}
|
}
|
||||||
@ -1007,7 +1007,7 @@ void EntityDataManager::_bind_methods() {
|
|||||||
EntityDataManager::EntityDataManager() {
|
EntityDataManager::EntityDataManager() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
//_automatic_load = GLOBAL_DEF("ess/data/automatic_load", false);
|
_automatic_load = GLOBAL_DEF("ess/data/automatic_load", false);
|
||||||
|
|
||||||
_xp_data_path = GLOBAL_DEF("ess/data/xp_data_path", "");
|
_xp_data_path = GLOBAL_DEF("ess/data/xp_data_path", "");
|
||||||
_entity_resources_folder = GLOBAL_DEF("ess/data/entity_resources_folder", "");
|
_entity_resources_folder = GLOBAL_DEF("ess/data/entity_resources_folder", "");
|
||||||
@ -1021,9 +1021,9 @@ EntityDataManager::EntityDataManager() {
|
|||||||
_mob_data_folder = GLOBAL_DEF("ess/data/mob_data_folder", "");
|
_mob_data_folder = GLOBAL_DEF("ess/data/mob_data_folder", "");
|
||||||
_player_character_data_folder = GLOBAL_DEF("ess/data/player_character_data_folder", "");
|
_player_character_data_folder = GLOBAL_DEF("ess/data/player_character_data_folder", "");
|
||||||
|
|
||||||
//if (_automatic_load) {
|
if (_automatic_load) {
|
||||||
// load_all();
|
call_deferred("load_all");
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityDataManager::~EntityDataManager() {
|
EntityDataManager::~EntityDataManager() {
|
||||||
|
@ -21,6 +21,9 @@ SOFTWARE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "profile_manager.h"
|
#include "profile_manager.h"
|
||||||
|
#include "core/os/file_access.h"
|
||||||
|
#include "core/io/json.h"
|
||||||
|
#include "core/project_settings.h"
|
||||||
|
|
||||||
const String ProfileManager::DEFAULT_PROFILE_FILE_NAME = "default.profile";
|
const String ProfileManager::DEFAULT_PROFILE_FILE_NAME = "default.profile";
|
||||||
|
|
||||||
@ -30,6 +33,13 @@ ProfileManager *ProfileManager::get_instance() {
|
|||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String ProfileManager::get_save_file() const {
|
||||||
|
return _save_file;
|
||||||
|
}
|
||||||
|
void ProfileManager::set_save_file(const String &file) {
|
||||||
|
_save_file = file;
|
||||||
|
}
|
||||||
|
|
||||||
int ProfileManager::get_last_used_class() {
|
int ProfileManager::get_last_used_class() {
|
||||||
return _last_used_class;
|
return _last_used_class;
|
||||||
}
|
}
|
||||||
@ -81,17 +91,53 @@ Ref<ClassProfile> ProfileManager::get_class_profile(int class_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProfileManager::save() {
|
void ProfileManager::save() {
|
||||||
if (has_method("_save")) {
|
call("_save");
|
||||||
call("_save");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfileManager::load() {
|
void ProfileManager::load() {
|
||||||
if (has_method("_load")) {
|
call("_load");
|
||||||
call("_load");
|
}
|
||||||
} //else {
|
|
||||||
//load_defaults();
|
void ProfileManager::_save() {
|
||||||
//}
|
Error err;
|
||||||
|
FileAccess *f = FileAccess::open(_save_file, FileAccess::WRITE, &err);
|
||||||
|
|
||||||
|
if (!f) {
|
||||||
|
ERR_FAIL_MSG("Couldn't open file: " + err);
|
||||||
|
}
|
||||||
|
|
||||||
|
f->store_line(JSON::print(to_dict()));
|
||||||
|
f->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfileManager::_load() {
|
||||||
|
if (FileAccess::exists(_save_file)) {
|
||||||
|
clear_class_profiles();
|
||||||
|
|
||||||
|
Error err;
|
||||||
|
String text = FileAccess::get_file_as_string(_save_file, &err);
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
load_defaults();
|
||||||
|
ERR_FAIL_MSG("Couldn't open file: " + err);
|
||||||
|
}
|
||||||
|
|
||||||
|
String err_txt;
|
||||||
|
int err_line;
|
||||||
|
Variant v;
|
||||||
|
err = JSON::parse(text, v, err_txt, err_line);
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
load_defaults();
|
||||||
|
ERR_FAIL_MSG("Error parsing profile: " + err);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary d = v;
|
||||||
|
|
||||||
|
from_dict(d);
|
||||||
|
} else {
|
||||||
|
load_defaults();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfileManager::save_profile(String name) {
|
void ProfileManager::save_profile(String name) {
|
||||||
@ -163,6 +209,13 @@ ProfileManager::ProfileManager() {
|
|||||||
_last_used_class = 0;
|
_last_used_class = 0;
|
||||||
|
|
||||||
_profile_name = ProfileManager::DEFAULT_PROFILE_FILE_NAME;
|
_profile_name = ProfileManager::DEFAULT_PROFILE_FILE_NAME;
|
||||||
|
|
||||||
|
_automatic_load = GLOBAL_DEF("ess/profiles/automatic_load", false);
|
||||||
|
_save_file = GLOBAL_DEF("ess/profiles/save_file", "user://profile.save");
|
||||||
|
|
||||||
|
if (_automatic_load) {
|
||||||
|
call_deferred("load");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ProfileManager::~ProfileManager() {
|
ProfileManager::~ProfileManager() {
|
||||||
@ -177,6 +230,17 @@ void ProfileManager::_bind_methods() {
|
|||||||
BIND_VMETHOD(MethodInfo("_save"));
|
BIND_VMETHOD(MethodInfo("_save"));
|
||||||
BIND_VMETHOD(MethodInfo("_load"));
|
BIND_VMETHOD(MethodInfo("_load"));
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("_save"), &ProfileManager::_save);
|
||||||
|
ClassDB::bind_method(D_METHOD("_load"), &ProfileManager::_load);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_automatic_load"), &ProfileManager::get_automatic_load);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_automatic_load", "load"), &ProfileManager::set_automatic_load);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "automatic_load"), "set_automatic_load", "get_automatic_load");
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_save_file"), &ProfileManager::get_save_file);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_save_file", "path"), &ProfileManager::set_save_file);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "set_save_file"), "set_save_file", "get_save_file");
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_last_used_class"), &ProfileManager::get_last_used_class);
|
ClassDB::bind_method(D_METHOD("get_last_used_class"), &ProfileManager::get_last_used_class);
|
||||||
ClassDB::bind_method(D_METHOD("set_last_used_class", "value"), &ProfileManager::set_last_used_class);
|
ClassDB::bind_method(D_METHOD("set_last_used_class", "value"), &ProfileManager::set_last_used_class);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "last_used_class"), "set_last_used_class", "get_last_used_class");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "last_used_class"), "set_last_used_class", "get_last_used_class");
|
||||||
|
@ -23,19 +23,26 @@ SOFTWARE.
|
|||||||
#ifndef PROFILE_MANAGER_H
|
#ifndef PROFILE_MANAGER_H
|
||||||
#define PROFILE_MANAGER_H
|
#define PROFILE_MANAGER_H
|
||||||
|
|
||||||
|
#include "core/object.h"
|
||||||
|
|
||||||
#include "core/vector.h"
|
#include "core/vector.h"
|
||||||
#include "scene/main/node.h"
|
|
||||||
|
|
||||||
#include "class_profile.h"
|
#include "class_profile.h"
|
||||||
|
|
||||||
class ProfileManager : public Node {
|
class ProfileManager : public Object {
|
||||||
GDCLASS(ProfileManager, Node);
|
GDCLASS(ProfileManager, Object);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static const String DEFAULT_PROFILE_FILE_NAME;
|
static const String DEFAULT_PROFILE_FILE_NAME;
|
||||||
|
|
||||||
static ProfileManager *get_instance();
|
static ProfileManager *get_instance();
|
||||||
|
|
||||||
|
bool get_automatic_load() { return _automatic_load; }
|
||||||
|
void set_automatic_load(bool load) { _automatic_load = load; }
|
||||||
|
|
||||||
|
String get_save_file() const;
|
||||||
|
void set_save_file(const String &file);
|
||||||
|
|
||||||
int get_last_used_class();
|
int get_last_used_class();
|
||||||
void set_last_used_class(int value);
|
void set_last_used_class(int value);
|
||||||
|
|
||||||
@ -51,6 +58,9 @@ public:
|
|||||||
void save();
|
void save();
|
||||||
void load();
|
void load();
|
||||||
|
|
||||||
|
void _save();
|
||||||
|
void _load();
|
||||||
|
|
||||||
void save_profile(String name);
|
void save_profile(String name);
|
||||||
void load_profile(String name);
|
void load_profile(String name);
|
||||||
|
|
||||||
@ -68,9 +78,12 @@ protected:
|
|||||||
private:
|
private:
|
||||||
static ProfileManager *_instance;
|
static ProfileManager *_instance;
|
||||||
|
|
||||||
|
bool _automatic_load;
|
||||||
|
|
||||||
int _last_used_class;
|
int _last_used_class;
|
||||||
|
|
||||||
String _profile_name;
|
String _profile_name;
|
||||||
|
String _save_file;
|
||||||
|
|
||||||
Vector<Ref<ClassProfile> > _class_profiles;
|
Vector<Ref<ClassProfile> > _class_profiles;
|
||||||
};
|
};
|
||||||
|
@ -134,6 +134,7 @@ SOFTWARE.
|
|||||||
#include "profile_manager/profile_manager.h"
|
#include "profile_manager/profile_manager.h"
|
||||||
|
|
||||||
static EntityDataManager *entity_data_manager = NULL;
|
static EntityDataManager *entity_data_manager = NULL;
|
||||||
|
static ProfileManager *profile_manager = NULL;
|
||||||
|
|
||||||
void register_entity_spell_system_types() {
|
void register_entity_spell_system_types() {
|
||||||
ClassDB::register_class<SpellEnums>();
|
ClassDB::register_class<SpellEnums>();
|
||||||
@ -262,10 +263,17 @@ void register_entity_spell_system_types() {
|
|||||||
ClassDB::register_class<EntityDataManager>();
|
ClassDB::register_class<EntityDataManager>();
|
||||||
Engine::get_singleton()->add_singleton(Engine::Singleton("EntityDataManager", EntityDataManager::get_instance()));
|
Engine::get_singleton()->add_singleton(Engine::Singleton("EntityDataManager", EntityDataManager::get_instance()));
|
||||||
|
|
||||||
|
profile_manager = memnew(ProfileManager);
|
||||||
|
ClassDB::register_class<ProfileManager>();
|
||||||
|
Engine::get_singleton()->add_singleton(Engine::Singleton("ProfileManager", ProfileManager::get_instance()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_entity_spell_system_types() {
|
void unregister_entity_spell_system_types() {
|
||||||
if (entity_data_manager) {
|
if (entity_data_manager) {
|
||||||
memdelete(entity_data_manager);
|
memdelete(entity_data_manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (profile_manager) {
|
||||||
|
memdelete(profile_manager);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user