Added craft recipes to EntityData.

This commit is contained in:
Relintai 2019-10-07 17:17:21 +02:00
parent f6ee549d07
commit 1c48fc9634
2 changed files with 56 additions and 3 deletions

View File

@ -3,6 +3,7 @@
#include "../../ai/ai_action.h"
#include "../../data/aura.h"
#include "../../data/spell.h"
#include "../../data/craft_recipe.h"
#include "../../infos/spell_cast_info.h"
#include "../entity.h"
#include "character_spec.h"
@ -116,6 +117,39 @@ void EntityData::set_item_container_data(const Ref<ItemContainerData> data) {
_item_container_data = data;
}
//Craft Recipes
int EntityData::get_num_craft_recipes() {
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, Ref<CraftRecipe> craft_data) {
ERR_FAIL_INDEX(index, _craft_recipes.size());
_craft_recipes.set(index, craft_data);
}
Vector<Variant> EntityData::get_craft_recipes() {
Vector<Variant> r;
for (int i = 0; i < _craft_recipes.size(); i++) {
r.push_back(_craft_recipes[i].get_ref_ptr());
}
return r;
}
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) {
//}
@ -844,7 +878,7 @@ EntityData::EntityData() {
_entity_controller = EntityEnums::ENITIY_CONTROLLER_NONE;
}
EntityData::~EntityData() {
_craft_recipes.clear();
}
void EntityData::_bind_methods() {
@ -1028,10 +1062,10 @@ 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");
//VendorItemData
//EntityData
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");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "vendor_item_data", PROPERTY_HINT_RESOURCE_TYPE, "EntityData"), "set_vendor_item_data", "get_vendor_item_data");
//ItemContainerData
ClassDB::bind_method(D_METHOD("get_item_container_data"), &EntityData::get_item_container_data);
@ -1051,5 +1085,13 @@ void EntityData::_bind_methods() {
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

@ -29,6 +29,7 @@ class Entity;
class SpellCastInfo;
class AIAction;
class VendorItemData;
class CraftRecipe;
class EntityData : public Resource {
GDCLASS(EntityData, Resource);
@ -76,6 +77,15 @@ public:
Ref<ItemContainerData> get_item_container_data() const;
void set_item_container_data(const Ref<ItemContainerData> data);
//Craft Recipes
int get_num_craft_recipes();
Ref<CraftRecipe> get_craft_recipe(int index);
void set_craft_recipe(int index, Ref<CraftRecipe> recipe);
Vector<Variant> get_craft_recipes();
void set_craft_recipes(const Vector<Variant> &recipe);
/*
Vector<int> get_mob_party_ids();
void set_mob_party_ids(Vector<int> ids);
@ -223,6 +233,7 @@ private:
Ref<LootDataBase> _lootdb;
Ref<VendorItemData> _vendor_item_data;
Ref<ItemContainerData> _item_container_data;
Vector<Ref<CraftRecipe> > _craft_recipes;
//Vector<int> _mob_party_ids;
//Vector<int> _mob_dislike_ids;