-Implemented MobData, and playerCharacterData.

-Also added them to the data manager.
This commit is contained in:
Relintai 2019-08-09 13:18:09 +02:00
parent baec5b1091
commit 1ae265a171
10 changed files with 459 additions and 24 deletions

4
SCsub
View File

@ -71,3 +71,7 @@ env.add_source_files(env.modules_sources,"skeleton/entity_equipset.cpp")
env.add_source_files(env.modules_sources,"loot/loot_data_base.cpp")
env.add_source_files(env.modules_sources,"loot/loot_data_container.cpp")
env.add_source_files(env.modules_sources,"loot/loot_data_item.cpp")
env.add_source_files(env.modules_sources,"data/mob_data.cpp")
env.add_source_files(env.modules_sources,"data/player_character_data.cpp")

View File

@ -4,6 +4,8 @@
#include "character_class.h"
#include "craft_data_attribute.h"
#include "spell.h"
#include "mob_data.h"
#include "player_character_data.h"
DataManager *DataManager::instance;
@ -173,18 +175,18 @@ Vector<Ref<ItemTemplate> > *DataManager::get_item_templates() {
void DataManager::add_item_template(Ref<ItemTemplate> cda) {
ERR_FAIL_COND(!cda.is_valid());
_craft_datas.push_back(cda);
_craft_data_map.set(cda->get_id(), cda);
_item_templates.push_back(cda);
_item_template_map.set(cda->get_id(), cda);
}
Ref<ItemTemplate> DataManager::get_item_template(int item_id) {
ERR_FAIL_COND_V(!_craft_data_map.has(item_id), Ref<ItemTemplate>(NULL));
ERR_FAIL_COND_V(!_item_template_map.has(item_id), Ref<ItemTemplate>(NULL));
return _item_template_map.get(item_id);
}
Ref<ItemTemplate> DataManager::get_item_template_index(int index) {
ERR_FAIL_INDEX_V(index, _craft_datas.size(), Ref<ItemTemplate>(NULL));
ERR_FAIL_INDEX_V(index, _item_templates.size(), Ref<ItemTemplate>(NULL));
return _item_templates.get(index);
}
@ -193,12 +195,83 @@ int DataManager::get_item_template_count() {
return _item_templates.size();
}
String DataManager::get_mob_data_folder() {
return _mob_data_folder;
}
void DataManager::set_mob_data_folder(String folder) {
_mob_data_folder = folder;
}
Vector<Ref<MobData> > *DataManager::get_mob_datas() {
return &_mob_datas;
}
void DataManager::add_mob_data(Ref<MobData> cda) {
ERR_FAIL_COND(!cda.is_valid());
_mob_datas.push_back(cda);
_mob_data_map.set(cda->get_id(), cda);
}
Ref<MobData> DataManager::get_mob_data(int item_id) {
ERR_FAIL_COND_V(!_mob_data_map.has(item_id), Ref<MobData>(NULL));
return _mob_data_map.get(item_id);
}
Ref<MobData> DataManager::get_mob_data_index(int index) {
ERR_FAIL_INDEX_V(index, _mob_datas.size(), Ref<MobData>(NULL));
return _mob_datas.get(index);
}
int DataManager::get_mob_data_count() {
return _mob_datas.size();
}
String DataManager::get_player_character_data_folder() {
return _player_character_data_folder;
}
void DataManager::set_player_character_data_folder(String folder) {
_player_character_data_folder = folder;
}
Vector<Ref<PlayerCharacterData> > *DataManager::get_player_character_datas() {
return &_player_character_datas;
}
void DataManager::add_player_character_data(Ref<PlayerCharacterData> cda) {
ERR_FAIL_COND(!cda.is_valid());
_player_character_datas.push_back(cda);
_player_character_data_map.set(cda->get_id(), cda);
}
Ref<PlayerCharacterData> DataManager::get_player_character_data(int item_id) {
ERR_FAIL_COND_V(!_player_character_data_map.has(item_id), Ref<PlayerCharacterData>(NULL));
return _player_character_data_map.get(item_id);
}
Ref<PlayerCharacterData> DataManager::get_player_character_data_index(int index) {
ERR_FAIL_INDEX_V(index, _player_character_datas.size(), Ref<PlayerCharacterData>(NULL));
return _player_character_datas.get(index);
}
int DataManager::get_player_character_data_count() {
return _player_character_datas.size();
}
void DataManager::load_all() {
load_spells();
load_auras();
load_characters();
load_craft_datas();
load_item_templates();
load_mob_datas();
load_player_character_datas();
}
void DataManager::load_spells() {
@ -396,6 +469,84 @@ void DataManager::load_item_templates() {
}
}
void DataManager::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, "MobData");
resl->wait();
Ref<Resource> s = resl->get_resource();
ERR_CONTINUE(!s.is_valid());
Ref<MobData> 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 DataManager::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, "PlayerCharacterData");
resl->wait();
Ref<Resource> s = resl->get_resource();
ERR_CONTINUE(!s.is_valid());
Ref<PlayerCharacterData> 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 DataManager::list_characters() {
for (int i = 0; i < _character_classes.size(); ++i) {
print_error(itos(i) + ": " + _character_classes.get(i)->get_character_class_name());
@ -426,16 +577,23 @@ void DataManager::list_item_templates() {
}
}
void DataManager::list_mob_datas() {
for (int i = 0; i < _mob_datas.size(); ++i) {
print_error(itos(i) + ": " + _mob_datas.get(i)->get_name());
}
}
void DataManager::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 DataManager::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_automatic_load"), &DataManager::get_automatic_load);
ClassDB::bind_method(D_METHOD("set_automatic_load", "load"), &DataManager::set_automatic_load);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "automatic_load"), "set_automatic_load", "get_automatic_load");
ClassDB::bind_method(D_METHOD("load_all"), &DataManager::load_all);
ClassDB::bind_method(D_METHOD("load_spells"), &DataManager::load_spells);
ClassDB::bind_method(D_METHOD("load_characters"), &DataManager::load_characters);
ClassDB::bind_method(D_METHOD("load_craft_datas"), &DataManager::load_craft_datas);
//CharacterClass
ClassDB::bind_method(D_METHOD("get_character_classes_folder"), &DataManager::get_character_classes_folder);
ClassDB::bind_method(D_METHOD("set_character_classes_folder", "folder"), &DataManager::set_character_classes_folder);
@ -485,13 +643,45 @@ void DataManager::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_item_template", "item_template_id"), &DataManager::get_item_template);
ClassDB::bind_method(D_METHOD("get_item_template_index", "index"), &DataManager::get_item_template_index);
ClassDB::bind_method(D_METHOD("get_item_template_count"), &DataManager::get_item_template_count);
//Mob Data
ClassDB::bind_method(D_METHOD("get_mob_data_folder"), &DataManager::get_mob_data_folder);
ClassDB::bind_method(D_METHOD("set_mob_data_folder", "folder"), &DataManager::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"), &DataManager::add_mob_data);
ClassDB::bind_method(D_METHOD("get_mob_data", "mob_data_id"), &DataManager::get_mob_data);
ClassDB::bind_method(D_METHOD("get_mob_data_index", "index"), &DataManager::get_mob_data_index);
ClassDB::bind_method(D_METHOD("get_mob_data_count"), &DataManager::get_mob_data_count);
//Player Character Data
ClassDB::bind_method(D_METHOD("get_player_character_data_folder"), &DataManager::get_player_character_data_folder);
ClassDB::bind_method(D_METHOD("set_player_character_data_folder", "folder"), &DataManager::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"), &DataManager::add_player_character_data);
ClassDB::bind_method(D_METHOD("get_player_character_data", "pcd_id"), &DataManager::get_player_character_data);
ClassDB::bind_method(D_METHOD("get_player_character_data_index", "index"), &DataManager::get_player_character_data_index);
ClassDB::bind_method(D_METHOD("get_player_character_data_count"), &DataManager::get_player_character_data_count);
//load
ClassDB::bind_method(D_METHOD("load_all"), &DataManager::load_all);
ClassDB::bind_method(D_METHOD("load_spells"), &DataManager::load_spells);
ClassDB::bind_method(D_METHOD("load_auras"), &DataManager::load_auras);
ClassDB::bind_method(D_METHOD("load_characters"), &DataManager::load_characters);
ClassDB::bind_method(D_METHOD("load_craft_datas"), &DataManager::load_craft_datas);
ClassDB::bind_method(D_METHOD("load_item_templates"), &DataManager::load_item_templates);
ClassDB::bind_method(D_METHOD("load_mob_datas"), &DataManager::load_mob_datas);
ClassDB::bind_method(D_METHOD("load_player_character_datas"), &DataManager::load_player_character_datas);
//tests
ClassDB::bind_method(D_METHOD("list_characters"), &DataManager::list_characters);
ClassDB::bind_method(D_METHOD("list_spells"), &DataManager::list_spells);
ClassDB::bind_method(D_METHOD("list_characters"), &DataManager::list_characters);
ClassDB::bind_method(D_METHOD("list_auras"), &DataManager::list_auras);
ClassDB::bind_method(D_METHOD("list_craft_data"), &DataManager::list_craft_data);
ClassDB::bind_method(D_METHOD("list_item_templates"), &DataManager::list_item_templates);
ClassDB::bind_method(D_METHOD("list_mob_datas"), &DataManager::list_mob_datas);
ClassDB::bind_method(D_METHOD("list_player_character_datas"), &DataManager::list_player_character_datas);
}
DataManager::DataManager() {
@ -505,10 +695,22 @@ DataManager::~DataManager() {
_character_classes.clear();
_character_class_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();
}

View File

@ -18,6 +18,8 @@ class Spell;
class CharacterClass;
class CraftDataAttribute;
class ItemTemplate;
class MobData;
class PlayerCharacterData;
class DataManager : public Node {
GDCLASS(DataManager, Node);
@ -64,6 +66,22 @@ public:
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<MobData> > *get_mob_datas();
void add_mob_data(Ref<MobData> aura);
Ref<MobData> get_mob_data(int item_id);
Ref<MobData> 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<PlayerCharacterData> > *get_player_character_datas();
void add_player_character_data(Ref<PlayerCharacterData> aura);
Ref<PlayerCharacterData> get_player_character_data(int item_id);
Ref<PlayerCharacterData> get_player_character_data_index(int index);
int get_player_character_data_count();
void load_all();
void load_spells();
@ -71,12 +89,16 @@ public:
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; }
@ -108,6 +130,14 @@ private:
String _item_template_folder;
Vector<Ref<ItemTemplate> > _item_templates;
HashMap<int, Ref<ItemTemplate> > _item_template_map;
String _mob_data_folder;
Vector<Ref<MobData> > _mob_datas;
HashMap<int, Ref<MobData> > _mob_data_map;
String _player_character_data_folder;
Vector<Ref<PlayerCharacterData> > _player_character_datas;
HashMap<int, Ref<PlayerCharacterData> > _player_character_data_map;
static DataManager *instance;

View File

@ -1 +1,65 @@
#include "mob_data.h"
int MobData::get_id() const {
return _id;
}
void MobData::set_id(const int id) {
_id = id;
}
Ref<LootDataBase> MobData::get_loot_db() const {
return _lootdb;
}
void MobData::set_loot_db(const Ref<LootDataBase> lootdb) {
_lootdb = lootdb;
}
Ref<CharacterClass> MobData::get_character_class() const {
return _character_class;
}
void MobData::set_character_class(const Ref<CharacterClass> character_class) {
_character_class = character_class;
}
String MobData::get_player_name() {
if (has_method("_generate_name")) {
return call("_generate_name");
}
return _static_player_name;
}
String MobData::get_static_player_name() const {
return _static_player_name;
}
void MobData::set_static_player_name(const String name) {
_static_player_name = name;
}
MobData::MobData() {
_id = 0;
}
MobData::~MobData() {
_lootdb.unref();
_character_class.unref();
}
void MobData::_bind_methods() {
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::STRING, "name"), "_generate_name"));
ClassDB::bind_method(D_METHOD("get_id"), &MobData::get_id);
ClassDB::bind_method(D_METHOD("set_id", "value"), &MobData::set_id);
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
ClassDB::bind_method(D_METHOD("get_loot_db"), &MobData::get_loot_db);
ClassDB::bind_method(D_METHOD("set_loot_db", "value"), &MobData::set_loot_db);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "loot_db", PROPERTY_HINT_RESOURCE_TYPE, "LootDataBase"), "set_loot_db", "get_loot_db");
ClassDB::bind_method(D_METHOD("get_character_class"), &MobData::get_character_class);
ClassDB::bind_method(D_METHOD("set_character_class", "value"), &MobData::set_character_class);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "character_class", PROPERTY_HINT_RESOURCE_TYPE, "CharacterClass"), "set_character_class", "get_character_class");
ClassDB::bind_method(D_METHOD("get_static_player_name"), &MobData::get_static_player_name);
ClassDB::bind_method(D_METHOD("set_static_player_name", "value"), &MobData::set_static_player_name);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "static_player_name"), "set_static_player_name", "get_static_player_name");
}

View File

@ -1,7 +1,45 @@
#ifndef MOB_DATA_H
#define MOB_DATA_H
#include "core/resource.h"
#include "core/ustring.h"
#include "../data/character_class.h"
#include "../loot/loot_data_base.h"
//LootDataBase
//CharacterClass
//id
//name generator, or name -> probably an overrideable get_name
//Skeleton -> basic gear
//Add it to the data manager too.
class MobData : public Resource {
GDCLASS(MobData, Resource);
public:
int get_id() const;
void set_id(const int id);
Ref<LootDataBase> get_loot_db() const;
void set_loot_db(const Ref<LootDataBase> lootdb);
Ref<CharacterClass> get_character_class() const;
void set_character_class(const Ref<CharacterClass> character_class);
String get_player_name();
String get_static_player_name() const;
void set_static_player_name(const String name);
MobData();
~MobData();
protected:
static void _bind_methods();
private:
int _id;
Ref<LootDataBase> _lootdb;
Ref<CharacterClass> _character_class;
String _static_player_name;
//Skeleton -> basic gear
};
#endif

View File

@ -1,8 +0,0 @@
//same as mob data
//CharacterClass
//id
//name generator, or name -> probably an overrideable get_name
//class specific strings? like what this class does? lik character creating info? or put that into cc?
//Skeleton -> basic gear
//Add it to the data manager too.

View File

@ -0,0 +1,54 @@
#include "player_character_data.h"
int PlayerCharacterData::get_id() const {
return _id;
}
void PlayerCharacterData::set_id(const int id) {
_id = id;
}
Ref<CharacterClass> PlayerCharacterData::get_character_class() const {
return _character_class;
}
void PlayerCharacterData::set_character_class(const Ref<CharacterClass> character_class) {
_character_class = character_class;
}
String PlayerCharacterData::get_player_name() {
if (has_method("_generate_name")) {
return call("_generate_name");
}
return _static_player_name;
}
String PlayerCharacterData::get_static_player_name() const {
return _static_player_name;
}
void PlayerCharacterData::set_static_player_name(const String name) {
_static_player_name = name;
}
PlayerCharacterData::PlayerCharacterData() {
_id = 0;
}
PlayerCharacterData::~PlayerCharacterData() {
_character_class.unref();
}
void PlayerCharacterData::_bind_methods() {
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::STRING, "name"), "_generate_name"));
ClassDB::bind_method(D_METHOD("get_id"), &PlayerCharacterData::get_id);
ClassDB::bind_method(D_METHOD("set_id", "value"), &PlayerCharacterData::set_id);
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
ClassDB::bind_method(D_METHOD("get_character_class"), &PlayerCharacterData::get_character_class);
ClassDB::bind_method(D_METHOD("set_character_class", "value"), &PlayerCharacterData::set_character_class);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "character_class", PROPERTY_HINT_RESOURCE_TYPE, "CharacterClass"), "set_character_class", "get_character_class");
ClassDB::bind_method(D_METHOD("get_static_player_name"), &PlayerCharacterData::get_static_player_name);
ClassDB::bind_method(D_METHOD("set_static_player_name", "value"), &PlayerCharacterData::set_static_player_name);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "static_player_name"), "set_static_player_name", "get_static_player_name");
}

View File

@ -0,0 +1,45 @@
#ifndef PLAYER_CHARACTER_DATA_H
#define PLAYER_CHARACTER_DATA_H
#include "core/resource.h"
#include "core/ustring.h"
#include "../data/character_class.h"
#include "../loot/loot_data_base.h"
//same as mob data
//name generator, or name -> probably an overrideable get_name
//class specific strings? like what this class does? lik character creating info? or put that into cc?
//Skeleton -> basic gear
//Add it to the data manager too.
class PlayerCharacterData : public Resource {
GDCLASS(PlayerCharacterData, Resource);
public:
int get_id() const;
void set_id(const int id);
Ref<CharacterClass> get_character_class() const;
void set_character_class(const Ref<CharacterClass> character_class);
String get_player_name();
String get_static_player_name() const;
void set_static_player_name(const String name);
PlayerCharacterData();
~PlayerCharacterData();
protected:
static void _bind_methods();
private:
int _id;
Ref<CharacterClass> _character_class;
String _static_player_name;
//Skeleton -> basic gear
};
#endif

View File

@ -65,6 +65,9 @@
#include "loot/loot_data_item.h"
#include "loot/loot_data_container.h"
#include "data/mob_data.h"
#include "data/player_character_data.h"
#ifdef TOOLS_ENABLED
#include "editor/editor_plugin.h"
@ -147,6 +150,9 @@ void register_entity_spell_system_types() {
ClassDB::register_class<LootDataBase>();
ClassDB::register_class<LootDataItem>();
ClassDB::register_class<LootDataContainter>();
ClassDB::register_class<MobData>();
ClassDB::register_class<PlayerCharacterData>();
//meshes
ClassDB::register_class<MeshDataResource>();