From 4afc637801db58ef88b3f96012bcc2f423bcf952 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 11 Sep 2019 15:06:30 +0200 Subject: [PATCH] Added 3 data classes. --- SCsub | 3 + entities/data/container_item_data.cpp | 33 +++++++ entities/data/container_item_data.h | 29 ++++++ entities/data/entity_data.cpp | 116 ++++++++++++++++++++++++ entities/data/entity_data.h | 24 +++++ entities/data/entity_data_container.cpp | 10 ++ entities/data/entity_data_container.h | 17 ++++ entities/data/vendor_item_data.cpp | 57 ++++++++++++ entities/data/vendor_item_data.h | 37 ++++++++ entities/entity.cpp | 71 +++++++++++++++ entities/entity.h | 18 ++++ register_types.cpp | 6 ++ 12 files changed, 421 insertions(+) create mode 100644 entities/data/container_item_data.cpp create mode 100644 entities/data/container_item_data.h create mode 100644 entities/data/entity_data_container.cpp create mode 100644 entities/data/entity_data_container.h create mode 100644 entities/data/vendor_item_data.cpp create mode 100644 entities/data/vendor_item_data.h diff --git a/SCsub b/SCsub index 52914b1..b719d7a 100644 --- a/SCsub +++ b/SCsub @@ -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") diff --git a/entities/data/container_item_data.cpp b/entities/data/container_item_data.cpp new file mode 100644 index 0000000..eade471 --- /dev/null +++ b/entities/data/container_item_data.cpp @@ -0,0 +1,33 @@ +#include "container_item_data.h" + +#include "../../data/item_template.h" + +Ref ContainerItemData::get_item() { + return _item; +} +void ContainerItemData::set_item(Ref 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"); +} diff --git a/entities/data/container_item_data.h b/entities/data/container_item_data.h new file mode 100644 index 0000000..3bc040b --- /dev/null +++ b/entities/data/container_item_data.h @@ -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 get_item(); + void set_item(Ref item); + + int get_item_count() const; + void set_item_count(int value); + + ContainerItemData(); + ~ContainerItemData(); + +protected: + static void _bind_methods(); + +private: + Ref _item; + int _item_count; +}; + +#endif diff --git a/entities/data/entity_data.cpp b/entities/data/entity_data.cpp index 8b0c3e7..21c8c9a 100644 --- a/entities/data/entity_data.cpp +++ b/entities/data/entity_data.cpp @@ -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 &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 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()); + + return _vendor_datas[index]; +} +void EntityData::set_vendor_data(int index, Ref vendor_data) { + ERR_FAIL_INDEX(index, _vendor_datas.size()); + + _vendor_datas.set(index, vendor_data); +} + +Vector EntityData::get_vendor_datas() { + Vector 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 &vendor_datas) { + _vendor_datas.clear(); + for (int i = 0; i < vendor_datas.size(); i++) { + Ref vendor_data = Ref(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 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()); + + return _container_datas[index]; +} +void EntityData::set_container_data(int index, Ref container_data) { + ERR_FAIL_INDEX(index, _container_datas.size()); + + _container_datas.set(index, container_data); +} + +Vector EntityData::get_container_datas() { + Vector 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 &container_datas) { + _container_datas.clear(); + for (int i = 0; i < container_datas.size(); i++) { + Ref container_data = Ref(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(); } diff --git a/entities/data/entity_data.h b/entities/data/entity_data.h index 60c8404..8e27629 100644 --- a/entities/data/entity_data.h +++ b/entities/data/entity_data.h @@ -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 get_ai_actions(); void set_ai_actions(const Vector &ai_actions); + + //Vendor data + int get_num_vendor_datas(); + void set_num_vendor_datas(int value); + + Ref get_vendor_data(int index); + void set_vendor_data(int index, Ref aura); + + Vector get_vendor_datas(); + void set_vendor_datas(const Vector &ai_actions); + + //Container data + int get_num_container_datas(); + void set_num_container_datas(int value); + + Ref get_container_data(int index); + void set_container_data(int index, Ref aura); + + Vector get_container_datas(); + void set_container_datas(const Vector &ai_actions); //Setup void setup_resources(Entity *entity); @@ -250,6 +272,8 @@ private: Vector > _specs; Vector > _auras; Vector > _ai_actions; + Vector > _vendor_datas; + Vector > _container_datas; Ref _lootdb; diff --git a/entities/data/entity_data_container.cpp b/entities/data/entity_data_container.cpp new file mode 100644 index 0000000..97887e7 --- /dev/null +++ b/entities/data/entity_data_container.cpp @@ -0,0 +1,10 @@ +#include "entity_data_container.h" + + +EntityDataContainer::EntityDataContainer() { +} +EntityDataContainer::~EntityDataContainer() { +} + +void EntityDataContainer::_bind_methods() { +} diff --git a/entities/data/entity_data_container.h b/entities/data/entity_data_container.h new file mode 100644 index 0000000..498f29f --- /dev/null +++ b/entities/data/entity_data_container.h @@ -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 diff --git a/entities/data/vendor_item_data.cpp b/entities/data/vendor_item_data.cpp new file mode 100644 index 0000000..d5c9b6b --- /dev/null +++ b/entities/data/vendor_item_data.cpp @@ -0,0 +1,57 @@ +#include "vendor_item_data.h" + +#include "../../data/item_template.h" + +Ref VendorItemData::get_item() { + return _item; +} +void VendorItemData::set_item(Ref 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"); +} diff --git a/entities/data/vendor_item_data.h b/entities/data/vendor_item_data.h new file mode 100644 index 0000000..0bade75 --- /dev/null +++ b/entities/data/vendor_item_data.h @@ -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 get_item(); + void set_item(Ref 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 _item; + int _item_price; + int _item_count; + int _item_spawn_time; +}; + +#endif diff --git a/entities/entity.cpp b/entities/entity.cpp index e187b4d..8f5a2cc 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -425,6 +425,29 @@ Entity::Entity() { } Entity::~Entity() { + //Ref _s_entity_data; + //Ref _c_entity_data; + + _s_resources.clear(); + _c_resources.clear(); + + //Ref _s_spell_cast_info; + //Ref _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 info) { @@ -2675,6 +2698,43 @@ void Entity::creceive_rank(int talentID, int rank) { //} +//// DATA //// +void Entity::adds_data(Ref data) { + _s_data.push_back(data); +} +void Entity::removes_data(int index) { + ERR_FAIL_INDEX(index, _s_data.size()); + + _s_data.remove(index); +} +Ref Entity::gets_data(int index) { + ERR_FAIL_INDEX_V(index, _s_data.size(),Ref()); + + _s_data.get(index); +} +int Entity::gets_data_count() { + return _s_data.size(); +} + + +void Entity::addc_data(Ref data) { + _c_data.push_back(data); +} +void Entity::removec_data(int index) { + ERR_FAIL_INDEX(index, _c_data.size()); + + _c_data.remove(index); +} +Ref Entity::getc_data(int index) { + ERR_FAIL_INDEX_V(index, _c_data.size(),Ref()); + + _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"))); diff --git a/entities/entity.h b/entities/entity.h index 82d2463..dff7e1f 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -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 data); + void removes_data(int index); + Ref gets_data(int index); + int gets_data_count(); + + void addc_data(Ref data); + void removec_data(int index); + Ref getc_data(int index); + int getc_data_count(); + void loaded(); @@ -628,6 +642,10 @@ private: //Vector > _s_talents; //Vector > _c_talents; + + //// Data //// + Vector > _s_data; + Vector > _c_data; }; #endif diff --git a/register_types.cpp b/register_types.cpp index c0318e3..5699440 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -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(); ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class();