Moved vendor item data, spell train data, item container data, and craft recipes from EntityData to EntityClassData.

This commit is contained in:
Relintai 2020-10-18 18:04:15 +02:00
parent a90d4f997a
commit fe16d4573f
5 changed files with 124 additions and 109 deletions

View File

@ -23,12 +23,15 @@ SOFTWARE.
#include "entity_class_data.h"
#include "../../data/auras/aura.h"
#include "../../data/items/craft_recipe.h"
#include "../../data/items/item_instance.h"
#include "../../data/spells/spell.h"
#include "../../infos/spell_cast_info.h"
#include "../ai/entity_ai.h"
#include "../entity.h"
#include "character_spec.h"
#include "item_container_data.h"
#include "vendor_item_data.h"
#include "../../defines.h"
@ -227,6 +230,55 @@ void EntityClassData::set_auras(const Vector<Variant> &auras) {
}
}
Ref<VendorItemData> EntityClassData::get_vendor_item_data() const {
return _vendor_item_data;
}
void EntityClassData::set_vendor_item_data(const Ref<VendorItemData> &data) {
_vendor_item_data = data;
}
Ref<VendorItemData> EntityClassData::get_spell_train_data() const {
return _spell_train_data;
}
void EntityClassData::set_spell_train_data(const Ref<VendorItemData> &data) {
_spell_train_data = data;
}
Ref<ItemContainerData> EntityClassData::get_item_container_data() const {
return _item_container_data;
}
void EntityClassData::set_item_container_data(const Ref<ItemContainerData> &data) {
_item_container_data = data;
}
//Craft Recipes
int EntityClassData::get_num_craft_recipes() const {
return _craft_recipes.size();
}
Ref<CraftRecipe> EntityClassData::get_craft_recipe(int index) {
ERR_FAIL_INDEX_V(index, _craft_recipes.size(), Ref<CraftRecipe>());
return _craft_recipes[index];
}
void EntityClassData::set_craft_recipe(int index, const Ref<CraftRecipe> &craft_data) {
ERR_FAIL_INDEX(index, _craft_recipes.size());
_craft_recipes.set(index, craft_data);
}
Vector<Variant> EntityClassData::get_craft_recipes() const {
VARIANT_ARRAY_GET(_craft_recipes);
}
void EntityClassData::set_craft_recipes(const Vector<Variant> &craft_datas) {
_craft_recipes.clear();
for (int i = 0; i < craft_datas.size(); i++) {
Ref<CraftRecipe> craft_data = Ref<CraftRecipe>(craft_datas[i]);
_craft_recipes.push_back(craft_data);
}
}
//// AI ACTIONS ////
int EntityClassData::get_num_ais() {
@ -306,6 +358,12 @@ EntityClassData::~EntityClassData() {
_spells.clear();
_specs.clear();
_auras.clear();
_vendor_item_data.unref();
_spell_train_data.unref();
_item_container_data.unref();
_craft_recipes.clear();
_ais.clear();
}
@ -391,6 +449,30 @@ void EntityClassData::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_auras", "auras"), &EntityClassData::set_auras);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "auras", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_auras", "get_auras");
//Vendor
ClassDB::bind_method(D_METHOD("get_vendor_item_data"), &EntityClassData::get_vendor_item_data);
ClassDB::bind_method(D_METHOD("set_vendor_item_data", "value"), &EntityClassData::set_vendor_item_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "vendor_item_data", PROPERTY_HINT_RESOURCE_TYPE, "VendorItemData"), "set_vendor_item_data", "get_vendor_item_data");
ClassDB::bind_method(D_METHOD("get_spell_train_data"), &EntityClassData::get_spell_train_data);
ClassDB::bind_method(D_METHOD("set_spell_train_data", "value"), &EntityClassData::set_spell_train_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "spell_train_data", PROPERTY_HINT_RESOURCE_TYPE, "VendorItemData"), "set_spell_train_data", "get_spell_train_data");
//ItemContainerData
ClassDB::bind_method(D_METHOD("get_item_container_data"), &EntityClassData::get_item_container_data);
ClassDB::bind_method(D_METHOD("set_item_container_data", "value"), &EntityClassData::set_item_container_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item_container_data", PROPERTY_HINT_RESOURCE_TYPE, "ItemContainerData"), "set_item_container_data", "get_item_container_data");
//Crafting
ClassDB::bind_method(D_METHOD("get_num_craft_recipes"), &EntityClassData::get_num_craft_recipes);
ClassDB::bind_method(D_METHOD("get_craft_recipe", "index"), &EntityClassData::get_craft_recipe);
ClassDB::bind_method(D_METHOD("set_craft_recipe", "index", "recipe"), &EntityClassData::set_craft_recipe);
ClassDB::bind_method(D_METHOD("get_craft_recipes"), &EntityClassData::get_craft_recipes);
ClassDB::bind_method(D_METHOD("set_craft_recipes", "recipe"), &EntityClassData::set_craft_recipes);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "craft_recipes", PROPERTY_HINT_NONE, "17/17:CraftRecipe", PROPERTY_USAGE_DEFAULT, "CraftRecipe"), "set_craft_recipes", "get_craft_recipes");
//// AI ACTIONS ////
ClassDB::bind_method(D_METHOD("get_num_ais"), &EntityClassData::get_num_ais);
ClassDB::bind_method(D_METHOD("set_num_ais", "value"), &EntityClassData::set_num_ais);

View File

@ -48,6 +48,9 @@ class CharacterSpec;
class Entity;
class SpellCastInfo;
class EntityAI;
class VendorItemData;
class ItemContainerData;
class CraftRecipe;
class EntityClassData : public Resource {
GDCLASS(EntityClassData, Resource);
@ -118,6 +121,25 @@ public:
Vector<Variant> get_auras();
void set_auras(const Vector<Variant> &auras);
//Data
Ref<VendorItemData> get_vendor_item_data() const;
void set_vendor_item_data(const Ref<VendorItemData> &data);
Ref<VendorItemData> get_spell_train_data() const;
void set_spell_train_data(const Ref<VendorItemData> &data);
Ref<ItemContainerData> get_item_container_data() const;
void set_item_container_data(const Ref<ItemContainerData> &data);
//Craft Recipes
int get_num_craft_recipes() const;
Ref<CraftRecipe> get_craft_recipe(int index);
void set_craft_recipe(int index, const Ref<CraftRecipe> &recipe);
Vector<Variant> get_craft_recipes() const;
void set_craft_recipes(const Vector<Variant> &recipe);
//AI
int get_num_ais();
void set_num_ais(int value);
@ -157,6 +179,12 @@ private:
Vector<Ref<Spell> > _spells;
Vector<Ref<Spell> > _start_spells;
Vector<Ref<Aura> > _auras;
Ref<VendorItemData> _vendor_item_data;
Ref<VendorItemData> _spell_train_data;
Ref<ItemContainerData> _item_container_data;
Vector<Ref<CraftRecipe> > _craft_recipes;
Vector<Ref<EntityAI> > _ais;
};

View File

@ -23,12 +23,10 @@ SOFTWARE.
#include "entity_data.h"
#include "../../data/auras/aura.h"
#include "../../data/items/craft_recipe.h"
#include "../../data/spells/spell.h"
#include "../../infos/spell_cast_info.h"
#include "../entity.h"
#include "character_spec.h"
#include "vendor_item_data.h"
#include "../../singletons/ess.h"
@ -166,55 +164,6 @@ void EntityData::set_loot_db(const Ref<LootDataBase> &lootdb) {
_lootdb = lootdb;
}
Ref<VendorItemData> EntityData::get_vendor_item_data() const {
return _vendor_item_data;
}
void EntityData::set_vendor_item_data(const Ref<VendorItemData> &data) {
_vendor_item_data = data;
}
Ref<VendorItemData> EntityData::get_spell_train_data() const {
return _spell_train_data;
}
void EntityData::set_spell_train_data(const Ref<VendorItemData> &data) {
_spell_train_data = data;
}
Ref<ItemContainerData> EntityData::get_item_container_data() const {
return _item_container_data;
}
void EntityData::set_item_container_data(const Ref<ItemContainerData> &data) {
_item_container_data = data;
}
//Craft Recipes
int EntityData::get_num_craft_recipes() const {
return _craft_recipes.size();
}
Ref<CraftRecipe> EntityData::get_craft_recipe(int index) {
ERR_FAIL_INDEX_V(index, _craft_recipes.size(), Ref<CraftRecipe>());
return _craft_recipes[index];
}
void EntityData::set_craft_recipe(int index, const Ref<CraftRecipe> &craft_data) {
ERR_FAIL_INDEX(index, _craft_recipes.size());
_craft_recipes.set(index, craft_data);
}
Vector<Variant> EntityData::get_craft_recipes() const {
VARIANT_ARRAY_GET(_craft_recipes);
}
void EntityData::set_craft_recipes(const Vector<Variant> &craft_datas) {
_craft_recipes.clear();
for (int i = 0; i < craft_datas.size(); i++) {
Ref<CraftRecipe> craft_data = Ref<CraftRecipe>(craft_datas[i]);
_craft_recipes.push_back(craft_data);
}
}
//void EntityData::_setup_resources(Entity *entity) {
//}
@ -320,11 +269,6 @@ EntityData::~EntityData() {
_ai.unref();
_lootdb.unref();
_vendor_item_data.unref();
_spell_train_data.unref();
_item_container_data.unref();
_craft_recipes.clear();
}
void EntityData::_validate_property(PropertyInfo &property) const {
@ -406,20 +350,6 @@ void EntityData::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_loot_db", "value"), &EntityData::set_loot_db);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "loot_db", PROPERTY_HINT_RESOURCE_TYPE, "LootDataBase"), "set_loot_db", "get_loot_db");
//Vendor
ClassDB::bind_method(D_METHOD("get_vendor_item_data"), &EntityData::get_vendor_item_data);
ClassDB::bind_method(D_METHOD("set_vendor_item_data", "value"), &EntityData::set_vendor_item_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "vendor_item_data", PROPERTY_HINT_RESOURCE_TYPE, "VendorItemData"), "set_vendor_item_data", "get_vendor_item_data");
ClassDB::bind_method(D_METHOD("get_spell_train_data"), &EntityData::get_spell_train_data);
ClassDB::bind_method(D_METHOD("set_spell_train_data", "value"), &EntityData::set_spell_train_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "spell_train_data", PROPERTY_HINT_RESOURCE_TYPE, "VendorItemData"), "set_spell_train_data", "get_spell_train_data");
//ItemContainerData
ClassDB::bind_method(D_METHOD("get_item_container_data"), &EntityData::get_item_container_data);
ClassDB::bind_method(D_METHOD("set_item_container_data", "value"), &EntityData::set_item_container_data);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item_container_data", PROPERTY_HINT_RESOURCE_TYPE, "ItemContainerData"), "set_item_container_data", "get_item_container_data");
ClassDB::bind_method(D_METHOD("generate_name"), &EntityData::generate_name);
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::STRING, "name"), "_generate_name"));
@ -432,14 +362,4 @@ void EntityData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_entity_flags"), &EntityData::get_entity_flags);
ClassDB::bind_method(D_METHOD("set_entity_flags", "value"), &EntityData::set_entity_flags);
ADD_PROPERTY(PropertyInfo(Variant::INT, "entity_flags", PROPERTY_HINT_FLAGS, EntityEnums::BINDING_STRING_ENTITY_FLAGS), "set_entity_flags", "get_entity_flags");
//Crafting
ClassDB::bind_method(D_METHOD("get_num_craft_recipes"), &EntityData::get_num_craft_recipes);
ClassDB::bind_method(D_METHOD("get_craft_recipe", "index"), &EntityData::get_craft_recipe);
ClassDB::bind_method(D_METHOD("set_craft_recipe", "index", "recipe"), &EntityData::set_craft_recipe);
ClassDB::bind_method(D_METHOD("get_craft_recipes"), &EntityData::get_craft_recipes);
ClassDB::bind_method(D_METHOD("set_craft_recipes", "recipe"), &EntityData::set_craft_recipes);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "craft_recipes", PROPERTY_HINT_NONE, "17/17:CraftRecipe", PROPERTY_USAGE_DEFAULT, "CraftRecipe"), "set_craft_recipes", "get_craft_recipes");
}

View File

@ -38,13 +38,11 @@ SOFTWARE.
#include "../../data/loot/loot_data_base.h"
#include "entity_class_data.h"
#include "item_container_data.h"
#include "../../data/items/equipment_data.h"
#include "../../data/species/entity_species_data.h"
#include "../../formations/ai_formation.h"
#include "../ai/entity_ai.h"
class Aura;
@ -54,7 +52,6 @@ class CharacterSpec;
class Entity;
class SpellCastInfo;
class AIAction;
class VendorItemData;
class CraftRecipe;
class EntityData : public Resource {
@ -111,24 +108,6 @@ public:
Ref<LootDataBase> get_loot_db() const;
void set_loot_db(const Ref<LootDataBase> &data);
Ref<VendorItemData> get_vendor_item_data() const;
void set_vendor_item_data(const Ref<VendorItemData> &data);
Ref<VendorItemData> get_spell_train_data() const;
void set_spell_train_data(const Ref<VendorItemData> &data);
Ref<ItemContainerData> get_item_container_data() const;
void set_item_container_data(const Ref<ItemContainerData> &data);
//Craft Recipes
int get_num_craft_recipes() const;
Ref<CraftRecipe> get_craft_recipe(int index);
void set_craft_recipe(int index, const Ref<CraftRecipe> &recipe);
Vector<Variant> get_craft_recipes() const;
void set_craft_recipes(const Vector<Variant> &recipe);
String generate_name();
//Setup
@ -174,10 +153,6 @@ private:
Ref<EntityAI> _ai;
Ref<LootDataBase> _lootdb;
Ref<VendorItemData> _vendor_item_data;
Ref<VendorItemData> _spell_train_data;
Ref<ItemContainerData> _item_container_data;
Vector<Ref<CraftRecipe> > _craft_recipes;
};
#endif

View File

@ -739,8 +739,8 @@ void Entity::_setup() {
}
}
for (int i = 0; i < _s_entity_data->get_num_craft_recipes(); ++i) {
craft_adds_recipe(_s_entity_data->get_craft_recipe(i));
for (int i = 0; i < cc->get_num_craft_recipes(); ++i) {
craft_adds_recipe(cc->get_craft_recipe(i));
}
if (_s_entity_data->get_equipment_data().is_valid()) {
@ -6340,7 +6340,12 @@ void Entity::_vendor_item_sbuy(const int index, const int count) {
if (!ed.is_valid())
return;
Ref<VendorItemData> vid = ed->get_vendor_item_data();
Ref<EntityClassData> ecd = ed->get_entity_class_data();
if (!ecd.is_valid())
return;
Ref<VendorItemData> vid = ecd->get_vendor_item_data();
if (!vid.is_valid())
return;
@ -6392,7 +6397,12 @@ void Entity::_vendor_item_ssell(const int slot_id) {
if (!ed.is_valid())
return;
Ref<VendorItemData> vid = ed->get_vendor_item_data();
Ref<EntityClassData> ecd = ed->get_entity_class_data();
if (!ecd.is_valid())
return;
Ref<VendorItemData> vid = ecd->get_vendor_item_data();
if (!vid.is_valid())
return;