diff --git a/entities/data/entity_data.cpp b/entities/data/entity_data.cpp index e484fa6..ddd5a34 100644 --- a/entities/data/entity_data.cpp +++ b/entities/data/entity_data.cpp @@ -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 data) { _item_container_data = data; } +//Craft Recipes +int EntityData::get_num_craft_recipes() { + return _craft_recipes.size(); +} + +Ref EntityData::get_craft_recipe(int index) { + ERR_FAIL_INDEX_V(index, _craft_recipes.size(), Ref()); + + return _craft_recipes[index]; +} +void EntityData::set_craft_recipe(int index, Ref craft_data) { + ERR_FAIL_INDEX(index, _craft_recipes.size()); + + _craft_recipes.set(index, craft_data); +} + +Vector EntityData::get_craft_recipes() { + Vector 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 &craft_datas) { + _craft_recipes.clear(); + for (int i = 0; i < craft_datas.size(); i++) { + Ref craft_data = Ref(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"); } diff --git a/entities/data/entity_data.h b/entities/data/entity_data.h index d01d136..839917b 100644 --- a/entities/data/entity_data.h +++ b/entities/data/entity_data.h @@ -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 get_item_container_data() const; void set_item_container_data(const Ref data); + //Craft Recipes + int get_num_craft_recipes(); + + Ref get_craft_recipe(int index); + void set_craft_recipe(int index, Ref recipe); + + Vector get_craft_recipes(); + void set_craft_recipes(const Vector &recipe); + /* Vector get_mob_party_ids(); void set_mob_party_ids(Vector ids); @@ -223,6 +233,7 @@ private: Ref _lootdb; Ref _vendor_item_data; Ref _item_container_data; + Vector > _craft_recipes; //Vector _mob_party_ids; //Vector _mob_dislike_ids;