Added 3 data classes.

This commit is contained in:
Relintai 2019-09-11 15:06:30 +02:00
parent 41d94978e6
commit 4afc637801
12 changed files with 421 additions and 0 deletions

3
SCsub
View File

@ -24,6 +24,9 @@ module_env.add_source_files(env.modules_sources,"data/spell_cooldown_manipulatio
module_env.add_source_files(env.modules_sources,"entities/data/entity_data.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/player_character_data.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/vendor_item_data.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/container_item_data.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/entity_data_container.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/character_spec.cpp")
module_env.add_source_files(env.modules_sources,"entities/data/talent_row_data.cpp")

View File

@ -0,0 +1,33 @@
#include "container_item_data.h"
#include "../../data/item_template.h"
Ref<ItemTemplate> ContainerItemData::get_item() {
return _item;
}
void ContainerItemData::set_item(Ref<ItemTemplate> item) {
_item = item;
}
int ContainerItemData::get_item_count() const {
return _item_count;
}
void ContainerItemData::set_item_count(int value) {
_item_count = value;
}
ContainerItemData::ContainerItemData() {
_item_count = 0;
}
ContainerItemData::~ContainerItemData() {
}
void ContainerItemData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_item"), &ContainerItemData::get_item);
ClassDB::bind_method(D_METHOD("set_item", "item"), &ContainerItemData::set_item);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"), "set_item", "get_item");
ClassDB::bind_method(D_METHOD("get_item_count"), &ContainerItemData::get_item_count);
ClassDB::bind_method(D_METHOD("set_item_count", "value"), &ContainerItemData::set_item_count);
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_count"), "set_item_count", "get_item_count");
}

View File

@ -0,0 +1,29 @@
#ifndef CONTAINER_ITEM_DATA_H
#define CONTAINER_ITEM_DATA_H
#include "core/resource.h"
class ItemTemplate;
class ContainerItemData : public Resource {
GDCLASS(ContainerItemData, Resource);
public:
Ref<ItemTemplate> get_item();
void set_item(Ref<ItemTemplate> item);
int get_item_count() const;
void set_item_count(int value);
ContainerItemData();
~ContainerItemData();
protected:
static void _bind_methods();
private:
Ref<ItemTemplate> _item;
int _item_count;
};
#endif

View File

@ -6,6 +6,8 @@
#include "../../infos/spell_cast_info.h"
#include "../entity.h"
#include "character_spec.h"
#include "vendor_item_data.h"
#include "container_item_data.h"
int EntityData::get_id() {
return _id;
@ -272,6 +274,94 @@ void EntityData::set_ai_actions(const Vector<Variant> &ai_actions) {
}
}
//// VENDOR DATA ////
int EntityData::get_num_vendor_datas() {
if (_vendor_datas.size() == 0 && _inherits.is_valid()) {
return _inherits->get_num_vendor_datas();
}
return _vendor_datas.size();
}
void EntityData::set_num_vendor_datas(int value) {
_vendor_datas.resize(value);
}
Ref<VendorItemData> EntityData::get_vendor_data(int index) {
if (_vendor_datas.size() == 0 && _inherits.is_valid()) {
return _inherits->get_vendor_data(index);
}
ERR_FAIL_INDEX_V(index, _vendor_datas.size(), Ref<VendorItemData>());
return _vendor_datas[index];
}
void EntityData::set_vendor_data(int index, Ref<VendorItemData> vendor_data) {
ERR_FAIL_INDEX(index, _vendor_datas.size());
_vendor_datas.set(index, vendor_data);
}
Vector<Variant> EntityData::get_vendor_datas() {
Vector<Variant> r;
for (int i = 0; i < _vendor_datas.size(); i++) {
r.push_back(_vendor_datas[i].get_ref_ptr());
}
return r;
}
void EntityData::set_vendor_datas(const Vector<Variant> &vendor_datas) {
_vendor_datas.clear();
for (int i = 0; i < vendor_datas.size(); i++) {
Ref<VendorItemData> vendor_data = Ref<VendorItemData>(vendor_datas[i]);
_vendor_datas.push_back(vendor_data);
}
}
//// Container Data ////
int EntityData::get_num_container_datas() {
if (_container_datas.size() == 0 && _inherits.is_valid()) {
return _inherits->get_num_container_datas();
}
return _container_datas.size();
}
void EntityData::set_num_container_datas(int value) {
_container_datas.resize(value);
}
Ref<ContainerItemData> EntityData::get_container_data(int index) {
if (_container_datas.size() == 0 && _inherits.is_valid()) {
return _inherits->get_container_data(index);
}
ERR_FAIL_INDEX_V(index, _container_datas.size(), Ref<ContainerItemData>());
return _container_datas[index];
}
void EntityData::set_container_data(int index, Ref<ContainerItemData> container_data) {
ERR_FAIL_INDEX(index, _container_datas.size());
_container_datas.set(index, container_data);
}
Vector<Variant> EntityData::get_container_datas() {
Vector<Variant> r;
for (int i = 0; i < _container_datas.size(); i++) {
r.push_back(_container_datas[i].get_ref_ptr());
}
return r;
}
void EntityData::set_container_datas(const Vector<Variant> &container_datas) {
_container_datas.clear();
for (int i = 0; i < container_datas.size(); i++) {
Ref<ContainerItemData> container_data = Ref<ContainerItemData>(container_datas[i]);
_container_datas.push_back(container_data);
}
}
//// SETUP ////
void EntityData::setup_resources(Entity *entity) {
@ -1109,6 +1199,30 @@ void EntityData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_ai_actions"), &EntityData::get_ai_actions);
ClassDB::bind_method(D_METHOD("set_ai_actions", "auras"), &EntityData::set_ai_actions);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "ai_actions", PROPERTY_HINT_NONE, "17/17:AIAction", PROPERTY_USAGE_DEFAULT, "AIAction"), "set_ai_actions", "get_ai_actions");
//// Vendor data ////
ADD_GROUP("Vendor Data", "vendor_datas");
ClassDB::bind_method(D_METHOD("get_num_vendor_datas"), &EntityData::get_num_vendor_datas);
ClassDB::bind_method(D_METHOD("set_num_vendor_datas", "value"), &EntityData::set_num_vendor_datas);
ClassDB::bind_method(D_METHOD("get_vendor_data", "index"), &EntityData::get_vendor_data);
ClassDB::bind_method(D_METHOD("set_vendor_data", "index", "vendor_data"), &EntityData::set_vendor_data);
ClassDB::bind_method(D_METHOD("get_vendor_datas"), &EntityData::get_vendor_datas);
ClassDB::bind_method(D_METHOD("set_vendor_datas", "vendor_datas"), &EntityData::set_vendor_datas);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "vendor_datas", PROPERTY_HINT_NONE, "17/17:VendorItemData", PROPERTY_USAGE_DEFAULT, "VendorItemData"), "set_vendor_datas", "get_vendor_datas");
//// Container data ////
ADD_GROUP("Container Data", "container_datas");
ClassDB::bind_method(D_METHOD("get_num_container_datas"), &EntityData::get_num_container_datas);
ClassDB::bind_method(D_METHOD("set_num_container_datas", "value"), &EntityData::set_num_container_datas);
ClassDB::bind_method(D_METHOD("get_container_data", "index"), &EntityData::get_container_data);
ClassDB::bind_method(D_METHOD("set_container_data", "index", "container_data"), &EntityData::set_container_data);
ClassDB::bind_method(D_METHOD("get_container_datas"), &EntityData::get_container_datas);
ClassDB::bind_method(D_METHOD("set_container_datas", "container_datas"), &EntityData::set_container_datas);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "container_datas", PROPERTY_HINT_NONE, "17/17:ContainerItemData", PROPERTY_USAGE_DEFAULT, "ContainerItemData"), "set_container_datas", "get_container_datas");
}
EntityData::EntityData() {
@ -1129,4 +1243,6 @@ EntityData::~EntityData() {
_specs.clear();
_auras.clear();
_ai_actions.clear();
_vendor_datas.clear();
_container_datas.clear();
}

View File

@ -25,6 +25,8 @@ class CharacterSpec;
class Entity;
class SpellCastInfo;
class AIAction;
class VendorItemData;
class ContainerItemData;
enum CharacterWeaponDataTypes {
CHARACTER_WEAPON_DATA_TYPES_NONE,
@ -113,6 +115,26 @@ public:
Vector<Variant> get_ai_actions();
void set_ai_actions(const Vector<Variant> &ai_actions);
//Vendor data
int get_num_vendor_datas();
void set_num_vendor_datas(int value);
Ref<VendorItemData> get_vendor_data(int index);
void set_vendor_data(int index, Ref<VendorItemData> aura);
Vector<Variant> get_vendor_datas();
void set_vendor_datas(const Vector<Variant> &ai_actions);
//Container data
int get_num_container_datas();
void set_num_container_datas(int value);
Ref<ContainerItemData> get_container_data(int index);
void set_container_data(int index, Ref<ContainerItemData> aura);
Vector<Variant> get_container_datas();
void set_container_datas(const Vector<Variant> &ai_actions);
//Setup
void setup_resources(Entity *entity);
@ -250,6 +272,8 @@ private:
Vector<Ref<CharacterSpec> > _specs;
Vector<Ref<Aura> > _auras;
Vector<Ref<AIAction> > _ai_actions;
Vector<Ref<VendorItemData> > _vendor_datas;
Vector<Ref<ContainerItemData> > _container_datas;
Ref<LootDataBase> _lootdb;

View File

@ -0,0 +1,10 @@
#include "entity_data_container.h"
EntityDataContainer::EntityDataContainer() {
}
EntityDataContainer::~EntityDataContainer() {
}
void EntityDataContainer::_bind_methods() {
}

View File

@ -0,0 +1,17 @@
#ifndef ENTITY_DATA_CONTAINER_H
#define ENTITY_DATA_CONTAINER_H
#include "core/reference.h"
class EntityDataContainer : public Reference {
GDCLASS(EntityDataContainer, Reference);
public:
EntityDataContainer();
~EntityDataContainer();
protected:
static void _bind_methods();
};
#endif

View File

@ -0,0 +1,57 @@
#include "vendor_item_data.h"
#include "../../data/item_template.h"
Ref<ItemTemplate> VendorItemData::get_item() {
return _item;
}
void VendorItemData::set_item(Ref<ItemTemplate> item) {
_item = item;
}
int VendorItemData::get_item_price() const {
return _item_price;
}
void VendorItemData::set_item_price(int value) {
_item_price = value;
}
int VendorItemData::get_item_count() const {
return _item_count;
}
void VendorItemData::set_item_count(int value) {
_item_count = value;
}
int VendorItemData::get_item_spawn_time() const {
return _item_spawn_time;
}
void VendorItemData::set_item_spawn_time(int value) {
_item_spawn_time = value;
}
VendorItemData::VendorItemData() {
_item_price = 0;
_item_count = 0;
_item_spawn_time = 0;
}
VendorItemData::~VendorItemData() {
}
void VendorItemData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_item"), &VendorItemData::get_item);
ClassDB::bind_method(D_METHOD("set_item", "item"), &VendorItemData::set_item);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"), "set_item", "get_item");
ClassDB::bind_method(D_METHOD("get_item_price"), &VendorItemData::get_item_price);
ClassDB::bind_method(D_METHOD("set_item_price", "value"), &VendorItemData::set_item_price);
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_price"), "set_item_price", "get_item_price");
ClassDB::bind_method(D_METHOD("get_item_count"), &VendorItemData::get_item_count);
ClassDB::bind_method(D_METHOD("set_item_count", "value"), &VendorItemData::set_item_count);
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_count"), "set_item_count", "get_item_count");
ClassDB::bind_method(D_METHOD("get_item_spawn_time"), &VendorItemData::get_item_spawn_time);
ClassDB::bind_method(D_METHOD("set_item_spawn_time", "value"), &VendorItemData::set_item_spawn_time);
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_spawn_time"), "set_item_spawn_time", "get_item_spawn_time");
}

View File

@ -0,0 +1,37 @@
#ifndef VENDOR_ITEM_DATA_H
#define VENDOR_ITEM_DATA_H
#include "core/resource.h"
class ItemTemplate;
class VendorItemData : public Resource {
GDCLASS(VendorItemData, Resource);
public:
Ref<ItemTemplate> get_item();
void set_item(Ref<ItemTemplate> item);
int get_item_price() const;
void set_item_price(int value);
int get_item_count() const;
void set_item_count(int value);
int get_item_spawn_time() const;
void set_item_spawn_time(int time);
VendorItemData();
~VendorItemData();
protected:
static void _bind_methods();
private:
Ref<ItemTemplate> _item;
int _item_price;
int _item_count;
int _item_spawn_time;
};
#endif

View File

@ -425,6 +425,29 @@ Entity::Entity() {
}
Entity::~Entity() {
//Ref<EntityData> _s_entity_data;
//Ref<EntityData> _c_entity_data;
_s_resources.clear();
_c_resources.clear();
//Ref<SpellCastInfo> _s_spell_cast_info;
//Ref<SpellCastInfo> _c_spell_cast_info;
_s_auras.clear();
_c_auras.clear();
_s_cooldowns.clear();
_c_cooldowns.clear();
_s_cooldown_map.clear();
_c_cooldown_map.clear();
_s_category_cooldowns.clear();
_c_category_cooldowns.clear();
_s_data.clear();
_c_data.clear();
}
void Entity::initialize(Ref<EntityCreateInfo> info) {
@ -2675,6 +2698,43 @@ void Entity::creceive_rank(int talentID, int rank) {
//}
//// DATA ////
void Entity::adds_data(Ref<EntityDataContainer> data) {
_s_data.push_back(data);
}
void Entity::removes_data(int index) {
ERR_FAIL_INDEX(index, _s_data.size());
_s_data.remove(index);
}
Ref<EntityDataContainer> Entity::gets_data(int index) {
ERR_FAIL_INDEX_V(index, _s_data.size(),Ref<EntityDataContainer>());
_s_data.get(index);
}
int Entity::gets_data_count() {
return _s_data.size();
}
void Entity::addc_data(Ref<EntityDataContainer> data) {
_c_data.push_back(data);
}
void Entity::removec_data(int index) {
ERR_FAIL_INDEX(index, _c_data.size());
_c_data.remove(index);
}
Ref<EntityDataContainer> Entity::getc_data(int index) {
ERR_FAIL_INDEX_V(index, _c_data.size(),Ref<EntityDataContainer>());
_c_data.get(index);
}
int Entity::getc_data_count() {
return _c_data.size();
}
void Entity::loaded() {
//sendstate = true;
}
@ -3211,7 +3271,18 @@ void Entity::_bind_methods() {
ClassDB::bind_method(D_METHOD("gets_global_cooldown"), &Entity::gets_global_cooldown);
ClassDB::bind_method(D_METHOD("sstart_global_cooldown", "value"), &Entity::sstart_global_cooldown);
ClassDB::bind_method(D_METHOD("cstart_global_cooldown", "value"), &Entity::cstart_global_cooldown);
//Data
ClassDB::bind_method(D_METHOD("adds_data", "data"), &Entity::adds_data);
ClassDB::bind_method(D_METHOD("removes_data", "index"), &Entity::removes_data);
ClassDB::bind_method(D_METHOD("gets_data", "index"), &Entity::gets_data);
ClassDB::bind_method(D_METHOD("gets_data_count"), &Entity::gets_data_count);
ClassDB::bind_method(D_METHOD("addc_data", "data"), &Entity::addc_data);
ClassDB::bind_method(D_METHOD("removec_data", "index"), &Entity::removec_data);
ClassDB::bind_method(D_METHOD("getc_data", "index"), &Entity::getc_data);
ClassDB::bind_method(D_METHOD("getc_data_count"), &Entity::getc_data_count);
//States
ADD_SIGNAL(MethodInfo("sstate_changed", PropertyInfo(Variant::INT, "value")));
ADD_SIGNAL(MethodInfo("cstate_changed", PropertyInfo(Variant::INT, "value")));

View File

@ -38,6 +38,8 @@
#include "../inventory/bag.h"
#include "./data/container_item_data.h"
class EntityData;
class AuraData;
class Spell;
@ -480,6 +482,18 @@ public:
void creceive_rank(int talentID, int rank);
//PlayerTalent *sget_talent(int id, bool create = false);
//PlayerTalent *cget_talent(int id, bool create = false);
//// Data ////
void adds_data(Ref<EntityDataContainer> data);
void removes_data(int index);
Ref<EntityDataContainer> gets_data(int index);
int gets_data_count();
void addc_data(Ref<EntityDataContainer> data);
void removec_data(int index);
Ref<EntityDataContainer> getc_data(int index);
int getc_data_count();
void loaded();
@ -628,6 +642,10 @@ private:
//Vector<Ref<PlayerTalent> > _s_talents;
//Vector<Ref<PlayerTalent> > _c_talents;
//// Data ////
Vector<Ref<EntityDataContainer> > _s_data;
Vector<Ref<EntityDataContainer> > _c_data;
};
#endif

View File

@ -14,6 +14,9 @@
#include "entities/data/entity_data.h"
#include "entities/data/player_character_data.h"
#include "entities/data/vendor_item_data.h"
#include "entities/data/container_item_data.h"
#include "entities/data/entity_data_container.h"
#include "entities/data/talent_row_data.h"
#include "entities/data/character_spec.h"
@ -108,6 +111,9 @@ void register_entity_spell_system_types() {
ClassDB::register_class<EntityData>();
ClassDB::register_class<PlayerCharacterData>();
ClassDB::register_class<VendorItemData>();
ClassDB::register_class<ContainerItemData>();
ClassDB::register_class<EntityDataContainer>();
ClassDB::register_class<XPData>();
ClassDB::register_class<ItemStatModifier>();