diff --git a/SCsub b/SCsub index b69fba0..a841d74 100644 --- a/SCsub +++ b/SCsub @@ -24,7 +24,6 @@ sources = [ "data/items/item_instance.cpp", "data/items/item_template.cpp", "data/items/equipment_data.cpp", - "data/items/equipment_data_entry.cpp", "data/items/craft_recipe_helper.cpp", "data/items/craft_recipe.cpp", "data/items/item_visual.cpp", diff --git a/config.py b/config.py index 3c1ae5e..14dbfc6 100644 --- a/config.py +++ b/config.py @@ -21,7 +21,6 @@ def get_doc_classes(): "Aura", "CraftRecipeHelper", "CraftRecipe", - "EquipmentDataEntry", "EquipmentData", "ItemInstance", "ItemStatModifier", diff --git a/data/auras/aura.cpp b/data/auras/aura.cpp index 413c629..73d722e 100644 --- a/data/auras/aura.cpp +++ b/data/auras/aura.cpp @@ -799,7 +799,7 @@ void Aura::notification_centity_resource_removed(Ref data, Ref data, ItemEnums::EquipSlots equip_slot, Ref item) { +bool Aura::equip_should_deny(Ref data, int equip_slot, Ref item) { ERR_FAIL_COND_V(!data.is_valid(), false); if (has_method("_equip_should_deny")) @@ -809,26 +809,26 @@ bool Aura::equip_should_deny(Ref data, ItemEnums::EquipSlots equip_slo return false; } -void Aura::equip_son_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Aura::equip_son_success(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot) { ERR_FAIL_COND(!data.is_valid()); if (has_method("_equip_son_success")) call("_equip_son_success", data, equip_slot, item, old_item, bag_slot); } -void Aura::equip_son_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Aura::equip_son_fail(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot) { ERR_FAIL_COND(!data.is_valid()); if (has_method("_equip_son_fail")) call("_equip_son_fail", data, equip_slot, item, old_item, bag_slot); } -void Aura::equip_con_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Aura::equip_con_success(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot) { ERR_FAIL_COND(!data.is_valid()); if (has_method("_equip_con_success")) call("_equip_con_success", data, equip_slot, item, old_item, bag_slot); } -void Aura::equip_con_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Aura::equip_con_fail(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot) { ERR_FAIL_COND(!data.is_valid()); if (has_method("_equip_con_fail")) diff --git a/data/auras/aura.h b/data/auras/aura.h index 6b6a789..c4885d2 100644 --- a/data/auras/aura.h +++ b/data/auras/aura.h @@ -304,13 +304,13 @@ public: void notification_centity_resource_removed(Ref data, Ref resource); //Equipment - bool equip_should_deny(Ref data, ItemEnums::EquipSlots equip_slot, Ref item); + bool equip_should_deny(Ref data, int equip_slot, Ref item); - void equip_son_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail(Ref data, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail(Ref data, int equip_slot, Ref item, Ref old_item, int bag_slot); //Calculations / Queries void setup_aura_data(Ref data, Ref info); diff --git a/data/items/equipment_data.cpp b/data/items/equipment_data.cpp index 82f4f80..069822c 100644 --- a/data/items/equipment_data.cpp +++ b/data/items/equipment_data.cpp @@ -22,42 +22,100 @@ SOFTWARE. #include "equipment_data.h" -Ref EquipmentData::get_slot(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); +#include "item_instance.h" +#include "item_template.h" + +#include "../../singletons/ess.h" + +Ref EquipmentData::get_slot(int index) { + ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref()); return _entries[index]; } -void EquipmentData::set_slot(int index, Ref entry) { - ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); +void EquipmentData::set_slot(int index, Ref entry) { + ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count()); - _entries[index] = entry; + _entries.write[index] = entry; } Ref EquipmentData::get_item(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); + ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref()); - Ref ede = _entries[index]; + Ref ede = _entries[index]; if (!ede.is_valid()) return Ref(); - return ede->get_item(); + return ede->create_item_instance(); } EquipmentData::EquipmentData() { + _entries.resize(ESS::get_instance()->equip_slot_get_count()); } EquipmentData::~EquipmentData() { - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) - _entries[i].unref(); + _entries.clear(); +} + +bool EquipmentData::_set(const StringName &p_name, const Variant &p_value) { + String name = p_name; + + if (name.get_slicec('/', 0) == "slot") { + StringName prop = name.get_slicec('/', 1); + + if (ESS::get_instance()->equip_slot_is_property(prop)) { + int id = ESS::get_instance()->equip_slot_get_property_id(prop); + + if (_entries.size() < id) { + return false; + } + + _entries.set(id, p_value); + + return true; + } else { + return false; + } + } else { + return false; + } + + return true; +} + +bool EquipmentData::_get(const StringName &p_name, Variant &r_ret) const { + String name = p_name; + + if (name.get_slicec('/', 0) == "slot") { + StringName prop = name.get_slicec('/', 1); + + if (ESS::get_instance()->equip_slot_is_property(prop)) { + int id = ESS::get_instance()->equip_slot_get_property_id(prop); + + if (_entries.size() < id) { + return false; + } + + r_ret = _entries[id]; + + return true; + } else { + return false; + } + } else { + return false; + } + + return true; +} + +void EquipmentData::_get_property_list(List *p_list) const { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { + p_list->push_back(PropertyInfo(Variant::OBJECT, "slot/" + ESS::get_instance()->equip_slot_get_property_name(i), PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate")); + } } void EquipmentData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_slot", "index"), &EquipmentData::get_slot); ClassDB::bind_method(D_METHOD("set_slot", "index", "entry"), &EquipmentData::set_slot); - - ADD_GROUP("Slots", "slot"); - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "slot_" + ItemEnums::get_equip_slot_string(i), PROPERTY_HINT_RESOURCE_TYPE, "EquipmentDataEntry"), "set_slot", "get_slot", i); - } } diff --git a/data/items/equipment_data.h b/data/items/equipment_data.h index dc3f393..6111ace 100644 --- a/data/items/equipment_data.h +++ b/data/items/equipment_data.h @@ -25,15 +25,15 @@ SOFTWARE. #include "core/resource.h" -#include "../../item_enums.h" -#include "equipment_data_entry.h" +class ItemInstance; +class ItemTemplate; class EquipmentData : public Resource { GDCLASS(EquipmentData, Resource); public: - Ref get_slot(int index); - void set_slot(int index, Ref entry); + Ref get_slot(int index); + void set_slot(int index, Ref entry); Ref get_item(int index); @@ -41,10 +41,13 @@ public: ~EquipmentData(); protected: + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List *p_list) const; static void _bind_methods(); private: - Ref _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; + Vector > _entries; }; #endif diff --git a/data/items/equipment_data_entry.cpp b/data/items/equipment_data_entry.cpp deleted file mode 100644 index d775676..0000000 --- a/data/items/equipment_data_entry.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright (c) 2019-2020 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include "equipment_data_entry.h" - -Ref EquipmentDataEntry::get_item() { - if (has_method("_get_item")) { - return call("_get_item"); - } - - return Ref(); -} - -EquipmentDataEntry::EquipmentDataEntry() { -} - -EquipmentDataEntry::~EquipmentDataEntry() { -} - -void EquipmentDataEntry::_bind_methods() { - BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_get_item")); - - ClassDB::bind_method(D_METHOD("get_item"), &EquipmentDataEntry::get_item); -} diff --git a/data/items/equipment_data_entry.h b/data/items/equipment_data_entry.h deleted file mode 100644 index b70e44b..0000000 --- a/data/items/equipment_data_entry.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright (c) 2019-2020 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef EQUIPMENT_DATA_ENTRY_H -#define EQUIPMENT_DATA_ENTRY_H - -#include "core/resource.h" - -#include "item_instance.h" - -class ItemInstance; - -class EquipmentDataEntry : public Resource { - GDCLASS(EquipmentDataEntry, Resource); - -public: - Ref get_item(); - - EquipmentDataEntry(); - ~EquipmentDataEntry(); - -protected: - static void _bind_methods(); - - //private: -}; - -#endif diff --git a/data/items/item_template.cpp b/data/items/item_template.cpp index 6764fe7..bc7546e 100644 --- a/data/items/item_template.cpp +++ b/data/items/item_template.cpp @@ -73,10 +73,10 @@ void ItemTemplate::set_armor_type(const ItemEnums::ArmorType value) { _armor_type = value; } -ItemEnums::EquipSlots ItemTemplate::get_equip_slot() const { +int ItemTemplate::get_equip_slot() const { return _equip_slot; } -void ItemTemplate::set_equip_slot(const ItemEnums::EquipSlots value) { +void ItemTemplate::set_equip_slot(const int value) { _equip_slot = value; } @@ -461,7 +461,7 @@ ItemTemplate::ItemTemplate() { _item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE; _rarity = ItemEnums::ITEM_RARITY_NONE; _armor_type = ItemEnums::ARMOR_TYPE_NONE; - _equip_slot = ItemEnums::EQUIP_SLOT_NONE; + _equip_slot = ESS::get_instance()->equip_slot_get_count(); _price = 0; _scale_x = 0; @@ -497,6 +497,8 @@ void ItemTemplate::_validate_property(PropertyInfo &property) const { if (property.name.ends_with("stat_id")) property.hint_string = ESS::get_instance()->stat_get_string(); + } else if (prop == "equip_slot") { + property.hint_string = ESS::get_instance()->equip_slot_get_string(); } } @@ -531,7 +533,7 @@ void ItemTemplate::_bind_methods() { ClassDB::bind_method(D_METHOD("get_equip_slot"), &ItemTemplate::get_equip_slot); ClassDB::bind_method(D_METHOD("set_equip_slot", "count"), &ItemTemplate::set_equip_slot); - ADD_PROPERTY(PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_EQUIP_SLOTS), "set_equip_slot", "get_equip_slot"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ""), "set_equip_slot", "get_equip_slot"); ClassDB::bind_method(D_METHOD("get_price"), &ItemTemplate::get_price); ClassDB::bind_method(D_METHOD("set_price", "count"), &ItemTemplate::set_price); diff --git a/data/items/item_template.h b/data/items/item_template.h index cebeae6..baa240d 100644 --- a/data/items/item_template.h +++ b/data/items/item_template.h @@ -58,8 +58,8 @@ public: ItemEnums::ArmorType get_armor_type() const; void set_armor_type(const ItemEnums::ArmorType value); - ItemEnums::EquipSlots get_equip_slot() const; - void set_equip_slot(const ItemEnums::EquipSlots value); + int get_equip_slot() const; + void set_equip_slot(const int value); Ref get_item_visual() const; void set_item_visual(const Ref &value); @@ -195,7 +195,7 @@ private: ItemEnums::ItemSubtype _item_sub_type; ItemEnums::ItemSubSubtype _item_sub_sub_type; ItemEnums::ArmorType _armor_type; - ItemEnums::EquipSlots _equip_slot; + int _equip_slot; int _price; diff --git a/doc_classes/EquipmentDataEntry.xml b/doc_classes/EquipmentDataEntry.xml deleted file mode 100644 index ce1a6cc..0000000 --- a/doc_classes/EquipmentDataEntry.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - Stores equipment information. - - - - - - - - - - - - - - - - - - - - - - diff --git a/entities/data/entity_class_data.cpp b/entities/data/entity_class_data.cpp index e5407d2..9dcd9a7 100644 --- a/entities/data/entity_class_data.cpp +++ b/entities/data/entity_class_data.cpp @@ -732,14 +732,14 @@ void EntityClassData::notification_centity_resource_removed(Ref //Equipment -bool EntityClassData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item) { +bool EntityClassData::equip_should_deny(Entity *entity, int equip_slot, Ref item) { if (has_method("_equip_should_deny")) if (call("_equip_should_deny", entity, equip_slot, item)) return true; return false; } -bool EntityClassData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item) { +bool EntityClassData::equip_should_deny_bind(Node *entity, int equip_slot, Ref item) { #if VERSION_MAJOR < 4 ERR_FAIL_COND_V(!ObjectDB::instance_validate(entity), false); #else @@ -753,11 +753,11 @@ bool EntityClassData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots return equip_should_deny(e, equip_slot, item); } -void EntityClassData::equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_son_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (has_method("_equip_son_success")) call("_equip_son_success", entity, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_son_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -771,11 +771,11 @@ void EntityClassData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_son_success(e, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_son_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (has_method("_equip_son_fail")) call("_equip_son_fail", entity, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_son_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -789,11 +789,11 @@ void EntityClassData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots eq equip_son_fail(e, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_con_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (has_method("_equip_con_success")) call("_equip_con_success", entity, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_con_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -807,11 +807,11 @@ void EntityClassData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_con_success(e, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_con_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (has_method("_equip_con_fail")) call("_equip_con_fail", entity, equip_slot, item, old_item, bag_slot); } -void EntityClassData::equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityClassData::equip_con_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else diff --git a/entities/data/entity_class_data.h b/entities/data/entity_class_data.h index b8ac87e..90eb0ec 100644 --- a/entities/data/entity_class_data.h +++ b/entities/data/entity_class_data.h @@ -204,18 +204,18 @@ public: //Equipment - bool equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item); - bool equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item); + bool equip_should_deny(Entity *entity, int equip_slot, Ref item); + bool equip_should_deny_bind(Node *entity, int equip_slot, Ref item); - void equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); EntityClassData(); ~EntityClassData(); diff --git a/entities/data/entity_data.cpp b/entities/data/entity_data.cpp index 457f76f..9661017 100644 --- a/entities/data/entity_data.cpp +++ b/entities/data/entity_data.cpp @@ -770,7 +770,7 @@ void EntityData::notification_centity_resource_removed(Ref resou //Equipment -bool EntityData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item) { +bool EntityData::equip_should_deny(Entity *entity, int equip_slot, Ref item) { if (_entity_class_data.is_valid()) if (_entity_class_data->equip_should_deny(entity, equip_slot, item)) return true; @@ -781,7 +781,7 @@ bool EntityData::equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_s return false; } -bool EntityData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item) { +bool EntityData::equip_should_deny_bind(Node *entity, int equip_slot, Ref item) { #if VERSION_MAJOR < 4 ERR_FAIL_COND_V(!ObjectDB::instance_validate(entity), false); #else @@ -795,14 +795,14 @@ bool EntityData::equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equi return equip_should_deny(e, equip_slot, item); } -void EntityData::equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_son_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_entity_class_data.is_valid()) _entity_class_data->equip_son_success(entity, equip_slot, item, old_item, bag_slot); if (has_method("_equip_son_success")) call("_equip_son_success", entity, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_son_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -816,14 +816,14 @@ void EntityData::equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equi equip_son_success(e, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_son_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_entity_class_data.is_valid()) _entity_class_data->equip_son_fail(entity, equip_slot, item, old_item, bag_slot); if (has_method("_equip_son_fail")) call("_equip_son_fail", entity, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_son_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -837,14 +837,14 @@ void EntityData::equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_s equip_son_fail(e, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_con_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_entity_class_data.is_valid()) _entity_class_data->equip_con_success(entity, equip_slot, item, old_item, bag_slot); if (has_method("_equip_con_success")) call("_equip_con_success", entity, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_con_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else @@ -858,14 +858,14 @@ void EntityData::equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equi equip_con_success(e, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_con_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_entity_class_data.is_valid()) _entity_class_data->equip_con_fail(entity, equip_slot, item, old_item, bag_slot); if (has_method("_equip_con_fail")) call("_equip_con_fail", entity, equip_slot, item, old_item, bag_slot); } -void EntityData::equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void EntityData::equip_con_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot) { #if VERSION_MAJOR < 4 ERR_FAIL_COND(!ObjectDB::instance_validate(entity)); #else diff --git a/entities/data/entity_data.h b/entities/data/entity_data.h index 9b88d98..18e3ba6 100644 --- a/entities/data/entity_data.h +++ b/entities/data/entity_data.h @@ -214,18 +214,18 @@ public: //Equipment - bool equip_should_deny(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item); - bool equip_should_deny_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item); + bool equip_should_deny(Entity *entity, int equip_slot, Ref item); + bool equip_should_deny_bind(Node *entity, int equip_slot, Ref item); - void equip_son_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail(Entity *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail_bind(Node *entity, ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail(Entity *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail_bind(Node *entity, int equip_slot, Ref item, Ref old_item, int bag_slot); EntityData(); ~EntityData(); diff --git a/entities/entity.cpp b/entities/entity.cpp index ea25e7e..16bb7f0 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -700,11 +700,11 @@ void Entity::_setup() { if (_s_entity_data->get_equipment_data().is_valid()) { Ref eqd = _s_entity_data->get_equipment_data(); - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { Ref ii = eqd->get_item(i); if (ii.is_valid()) - _s_equipment[i] = ii; + _s_equipment.write[i] = ii; } } @@ -1124,7 +1124,7 @@ Dictionary Entity::_to_dict() { Dictionary equipment; - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { Ref ii = _s_equipment[i]; if (ii.is_valid()) @@ -1311,7 +1311,7 @@ void Entity::_from_dict(const Dictionary &dict) { Dictionary equipment = dict.get("equipment", Dictionary()); - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { if (equipment.has(String::num(i))) { Ref ii = _s_equipment[i]; @@ -1321,8 +1321,8 @@ void Entity::_from_dict(const Dictionary &dict) { ii->from_dict(dict[String::num(i)]); - _s_equipment[i] = ii; - _c_equipment[i] = ii; + _s_equipment.write[i] = ii; + _c_equipment.write[i] = ii; } } @@ -2030,7 +2030,7 @@ void Entity::creceive_stat(int id, int ccurrent) { //// Equip Slots //// -bool Entity::equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref item) { +bool Entity::equip_should_deny(int equip_slot, Ref item) { if (_s_entity_data.is_valid()) { if (_s_entity_data->equip_should_deny(this, equip_slot, item)) return true; @@ -2050,7 +2050,7 @@ bool Entity::equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Entity::equip_son_success(int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_s_entity_data.is_valid()) { _s_entity_data->equip_son_success(this, equip_slot, item, old_item, bag_slot); } @@ -2067,7 +2067,7 @@ void Entity::equip_son_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Entity::equip_son_fail(int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_s_entity_data.is_valid()) { _s_entity_data->equip_son_fail(this, equip_slot, item, old_item, bag_slot); } @@ -2084,7 +2084,7 @@ void Entity::equip_son_fail(ItemEnums::EquipSlots equip_slot, Ref emit_signal("equip_son_fail", this, equip_slot, item, old_item, bag_slot); } -void Entity::equip_con_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Entity::equip_con_success(int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_c_entity_data.is_valid()) { _c_entity_data->equip_con_success(this, equip_slot, item, old_item, bag_slot); } @@ -2101,7 +2101,7 @@ void Entity::equip_con_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { +void Entity::equip_con_fail(int equip_slot, Ref item, Ref old_item, int bag_slot) { if (_c_entity_data.is_valid()) { _c_entity_data->equip_con_fail(this, equip_slot, item, old_item, bag_slot); } @@ -2118,14 +2118,14 @@ void Entity::equip_con_fail(ItemEnums::EquipSlots equip_slot, Ref emit_signal("equip_con_fail", this, equip_slot, item, old_item, bag_slot); } -void Entity::equip_crequest(ItemEnums::EquipSlots equip_slot, int bag_slot) { +void Entity::equip_crequest(int equip_slot, int bag_slot) { RPCS(equips, equip_slot, bag_slot) } -void Entity::equips(ItemEnums::EquipSlots equip_slot, int bag_slot) { +void Entity::equips(int equip_slot, int bag_slot) { call("_equips", equip_slot, bag_slot); } -void Entity::_equips(ItemEnums::EquipSlots equip_slot, int bag_slot) { - ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); +void Entity::_equips(int equip_slot, int bag_slot) { + ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count()); ERR_FAIL_COND(!_s_bag.is_valid()); Ref bag_item = _s_bag->get_item(bag_slot); @@ -2155,8 +2155,8 @@ void Entity::_equips(ItemEnums::EquipSlots equip_slot, int bag_slot) { ORPC(equip_csuccess, equip_slot, bag_slot); } -void Entity::equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot) { - ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); +void Entity::equip_csuccess(int equip_slot, int bag_slot) { + ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count()); ERR_FAIL_COND(!_c_bag.is_valid()); Ref old_bag_item = _c_bag->get_item(bag_slot); @@ -2173,8 +2173,8 @@ void Entity::equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot) { equip_con_success(equip_slot, old_bag_item, old_equipped_item, bag_slot); } -void Entity::equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot) { - ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); +void Entity::equip_cfail(int equip_slot, int bag_slot) { + ERR_FAIL_INDEX(equip_slot, ESS::get_instance()->equip_slot_get_count()); ERR_FAIL_COND(!_c_bag.is_valid()); Ref bag_item = _c_bag->get_item(bag_slot); @@ -2184,31 +2184,31 @@ void Entity::equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot) { } Ref Entity::equip_gets_slot(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); + ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref()); return _s_equipment[index]; } void Entity::equip_sets_slot(int index, Ref item) { - ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count()); - _s_equipment[index] = item; + _s_equipment.write[index] = item; } Ref Entity::equip_getc_slot(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); + ERR_FAIL_INDEX_V(index, ESS::get_instance()->equip_slot_get_count(), Ref()); return _c_equipment[index]; } void Entity::equip_setc_slot(int index, Ref item) { - ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + ERR_FAIL_INDEX(index, ESS::get_instance()->equip_slot_get_count()); - _c_equipment[index] = item; + _c_equipment.write[index] = item; } -bool Entity::equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref item) { +bool Entity::equip_can_equip_item(int equip_slot, Ref item) { return call("_equip_can_equip_item", equip_slot, item); } -bool Entity::_equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref item) { +bool Entity::_equip_can_equip_item(int equip_slot, Ref item) { //deequip if (!item.is_valid()) return true; @@ -5843,6 +5843,9 @@ Entity::Entity() { _s_pet_formation_index = 0; _s_pet_ai_state = EntityEnums::AI_STATE_OFF; + _s_equipment.resize(ESS::get_instance()->equip_slot_get_count()); + _c_equipment.resize(ESS::get_instance()->equip_slot_get_count()); + SET_RPC_REMOTE("csend_request_rank_increase"); SET_RPC_REMOTE("csend_request_rank_decrease"); @@ -6072,10 +6075,8 @@ Entity::~Entity() { _stats.clear(); - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { - _s_equipment[i].unref(); - _c_equipment[i].unref(); - } + _s_equipment.clear(); + _c_equipment.clear(); _action_bar_profile.unref(); @@ -6425,7 +6426,7 @@ bool Entity::_set(const StringName &p_name, const Variant &p_value) { Dictionary equipment = dict.get("equipment", Dictionary()); - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { if (equipment.has(String::num(i))) { Ref ii = _s_equipment[i]; @@ -6694,7 +6695,7 @@ bool Entity::_get(const StringName &p_name, Variant &r_ret) const { Dictionary equipment; - for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) { + for (int i = 0; i < ESS::get_instance()->equip_slot_get_count(); ++i) { Ref ii = _s_equipment[i]; if (ii.is_valid()) @@ -7394,7 +7395,7 @@ void Entity::_bind_methods() { ClassDB::bind_method(D_METHOD("equip_gets_slot", "index"), &Entity::equip_gets_slot); ClassDB::bind_method(D_METHOD("equip_getc_slot", "index"), &Entity::equip_getc_slot); - BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "can"), "_equip_can_equip_item", PropertyInfo(Variant::INT, "equip_slot", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_EQUIP_SLOTS), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); + BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "can"), "_equip_can_equip_item", PropertyInfo(Variant::INT, "equip_slot"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); ClassDB::bind_method(D_METHOD("equip_can_equip_item", "equip_slot", "item"), &Entity::equip_can_equip_item); ClassDB::bind_method(D_METHOD("_equip_can_equip_item", "equip_slot", "item"), &Entity::_equip_can_equip_item); diff --git a/entities/entity.h b/entities/entity.h index 4c44246..bfbd04f 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -411,20 +411,20 @@ public: //// Equip Slots //// - bool equip_should_deny(ItemEnums::EquipSlots equip_slot, Ref item); + bool equip_should_deny(int equip_slot, Ref item); - void equip_son_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_son_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_success(int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_son_fail(int equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_con_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_success(int equip_slot, Ref item, Ref old_item, int bag_slot); + void equip_con_fail(int equip_slot, Ref item, Ref old_item, int bag_slot); - void equip_crequest(ItemEnums::EquipSlots equip_slot, int bag_slot); - void equips(ItemEnums::EquipSlots equip_slot, int bag_slot); - void _equips(ItemEnums::EquipSlots equip_slot, int bag_slot); + void equip_crequest(int equip_slot, int bag_slot); + void equips(int equip_slot, int bag_slot); + void _equips(int equip_slot, int bag_slot); - void equip_csuccess(ItemEnums::EquipSlots equip_slot, int bag_slot); - void equip_cfail(ItemEnums::EquipSlots equip_slot, int bag_slot); + void equip_csuccess(int equip_slot, int bag_slot); + void equip_cfail(int equip_slot, int bag_slot); Ref equip_gets_slot(int index); void equip_sets_slot(int index, Ref item); @@ -432,8 +432,8 @@ public: Ref equip_getc_slot(int index); void equip_setc_slot(int index, Ref item); - bool equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref item); - bool _equip_can_equip_item(ItemEnums::EquipSlots equip_slot, Ref item); + bool equip_can_equip_item(int equip_slot, Ref item); + bool _equip_can_equip_item(int equip_slot, Ref item); void equip_applys_item(Ref item); void equip_deapplys_item(Ref item); @@ -702,11 +702,11 @@ public: //// Cooldowns //// - Vector> *cooldowns_gets(); - Vector> *cooldowns_getc(); + Vector > *cooldowns_gets(); + Vector > *cooldowns_getc(); - HashMap> *cooldown_get_maps(); - HashMap> *cooldown_get_mapc(); + HashMap > *cooldown_get_maps(); + HashMap > *cooldown_get_mapc(); bool cooldown_hass(int spell_id); void cooldown_adds(int spell_id, float value); @@ -724,8 +724,8 @@ public: //Category Cooldowns - Vector> category_cooldowns_gets(); - Vector> category_cooldowns_getc(); + Vector > category_cooldowns_gets(); + Vector > category_cooldowns_getc(); bool category_cooldown_hass(int category_id); void category_cooldown_adds(int category_id, float value); @@ -1128,13 +1128,13 @@ private: //// Equipment //// - Ref _s_equipment[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; - Ref _c_equipment[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; + Vector > _s_equipment; + Vector > _c_equipment; //// Resources //// - Vector> _s_resources; - Vector> _c_resources; + Vector > _s_resources; + Vector > _c_resources; //// GCD //// @@ -1155,8 +1155,8 @@ private: //// AuraComponent //// - Vector> _s_auras; - Vector> _c_auras; + Vector > _s_auras; + Vector > _c_auras; EntityEnums::EntityType _s_entity_type; EntityEnums::EntityType _c_entity_type; @@ -1167,14 +1167,14 @@ private: int _c_entity_flags; //// Cooldowns //// - Vector> _s_cooldowns; - Vector> _c_cooldowns; + Vector > _s_cooldowns; + Vector > _c_cooldowns; - HashMap> _s_cooldown_map; - HashMap> _c_cooldown_map; + HashMap > _s_cooldown_map; + HashMap > _c_cooldown_map; - Vector> _s_category_cooldowns; - Vector> _c_category_cooldowns; + Vector > _s_category_cooldowns; + Vector > _c_category_cooldowns; int _s_active_category_cooldowns; int _c_active_category_cooldowns; @@ -1194,8 +1194,8 @@ private: //// Data //// - Vector> _s_data; - Vector> _c_data; + Vector > _s_data; + Vector > _c_data; //// Actionbars //// @@ -1204,21 +1204,21 @@ private: //// Crafting System //// - Vector> _s_craft_recipes; - Vector> _c_craft_recipes; + Vector > _s_craft_recipes; + Vector > _c_craft_recipes; //// Known Spells //// int _s_free_spell_points; int _c_free_spell_points; - Vector> _s_spells; - Vector> _c_spells; + Vector > _s_spells; + Vector > _c_spells; //// Skills //// - Vector> _s_skills; - Vector> _c_skills; + Vector > _s_skills; + Vector > _c_skills; //// Stat Allocations //// @@ -1262,7 +1262,7 @@ private: // Callbacks - Vector> _physics_process_scis; + Vector > _physics_process_scis; }; #endif diff --git a/item_enums.cpp b/item_enums.cpp index c7a0aa3..e79feeb 100644 --- a/item_enums.cpp +++ b/item_enums.cpp @@ -28,45 +28,9 @@ const String ItemEnums::BINDING_STRING_ITEM_TYPE = "None,Equipment,Potion,Herb,O const String ItemEnums::BINDING_STRING_ITEM_TYPE_FLAGS = "Equipment,Potion,Herb,Ore,Gemstone,Food,Alchemy,Engineering,Enchanting,Tailoring,Recipe,Currency,Bag"; const String ItemEnums::BINDING_STRING_ITEM_SUB_TYPE = "None,Sword,Axe,Mace,Dagger,Bow,Crossbow,Gun,Wand,Quest Item"; const String ItemEnums::BINDING_STRING_ITEM_SUB_SUB_TYPE = "None,Two Hand,One Hand,Left Hand,Right Hand"; -const String ItemEnums::BINDING_STRING_EQUIP_SLOTS = "Head,Neck,Shoulders,Chest,Gloves,Belt,Legs,Feet,Ring 1,Ring 2,Trinket 1,Trinket 2,Main Hand,Off Hand,None"; const String ItemEnums::BINDING_STRING_ARMOR_TYPE = "None,Cloth,Leather,Mail,Plate"; const String ItemEnums::BINDING_STRING_ENTITY_TEXTURE_LAYERS = "None,Skin,Underwear,Shirt,Clothes Base,Clothes 1,Clothes 2,Clothes 3,Clothes 4,Clothes 5,Belt,Tabard,Overlay"; -String ItemEnums::get_equip_slot_string(int slot) { - switch (slot) { - case 0: - return "head"; - case 1: - return "neck"; - case 2: - return "shoulders"; - case 3: - return "chest"; - case 4: - return "gloves"; - case 5: - return "belt"; - case 6: - return "legs"; - case 7: - return "feet"; - case 8: - return "ring_1"; - case 9: - return "ring_2"; - case 10: - return "trinket_1"; - case 11: - return "trinket_2"; - case 12: - return "main_hand"; - case 13: - return "off_hand"; - } - - return ""; -} - String ItemEnums::get_armor_type_string(int type) { switch (type) { case 0: diff --git a/item_enums.h b/item_enums.h index cd7d209..fa2a359 100644 --- a/item_enums.h +++ b/item_enums.h @@ -36,7 +36,6 @@ public: static const String BINDING_STRING_ITEM_TYPE_FLAGS; static const String BINDING_STRING_ITEM_SUB_TYPE; static const String BINDING_STRING_ITEM_SUB_SUB_TYPE; - static const String BINDING_STRING_EQUIP_SLOTS; static const String BINDING_STRING_ARMOR_TYPE; static const String BINDING_STRING_ENTITY_TEXTURE_LAYERS; @@ -98,29 +97,6 @@ public: ITEM_SUB_SUB_TYPE_RIGHT_HAND }; - enum EquipSlots { - EQUIP_SLOT_HEAD = 0, - EQUIP_SLOT_NECK = 1, - EQUIP_SLOT_SHOULDERS = 2, - EQUIP_SLOT_CHEST = 3, - EQUIP_SLOT_GLOVES = 4, - EQUIP_SLOT_BELT = 5, - EQUIP_SLOT_LEGS = 6, - EQUIP_SLOT_FEET = 7, - - EQUIP_SLOT_RING_1 = 8, - EQUIP_SLOT_RING_2 = 9, - - EQUIP_SLOT_TRINKET_1 = 10, - EQUIP_SLOT_TRINKET_2 = 11, - - EQUIP_SLOT_MAIN_HAND = 12, - EQUIP_SLOT_OFF_HAND = 13, - - EQUIP_SLOT_EQUIP_SLOT_MAX = 14, - EQUIP_SLOT_NONE = 14 - }; - enum ArmorType { ARMOR_TYPE_NONE = 0, ARMOR_TYPE_CLOTH = 1, @@ -201,27 +177,6 @@ protected: BIND_ENUM_CONSTANT(ITEM_SUB_SUB_TYPE_LEFT_HAND); BIND_ENUM_CONSTANT(ITEM_SUB_SUB_TYPE_RIGHT_HAND); - BIND_ENUM_CONSTANT(EQUIP_SLOT_HEAD); - BIND_ENUM_CONSTANT(EQUIP_SLOT_NECK); - BIND_ENUM_CONSTANT(EQUIP_SLOT_SHOULDERS); - BIND_ENUM_CONSTANT(EQUIP_SLOT_CHEST); - BIND_ENUM_CONSTANT(EQUIP_SLOT_GLOVES); - BIND_ENUM_CONSTANT(EQUIP_SLOT_BELT); - BIND_ENUM_CONSTANT(EQUIP_SLOT_LEGS); - BIND_ENUM_CONSTANT(EQUIP_SLOT_FEET); - - BIND_ENUM_CONSTANT(EQUIP_SLOT_RING_1); - BIND_ENUM_CONSTANT(EQUIP_SLOT_RING_2); - BIND_ENUM_CONSTANT(EQUIP_SLOT_TRINKET_1); - BIND_ENUM_CONSTANT(EQUIP_SLOT_TRINKET_2); - - BIND_ENUM_CONSTANT(EQUIP_SLOT_MAIN_HAND); - BIND_ENUM_CONSTANT(EQUIP_SLOT_OFF_HAND); - - BIND_ENUM_CONSTANT(EQUIP_SLOT_NONE); - - BIND_ENUM_CONSTANT(EQUIP_SLOT_EQUIP_SLOT_MAX); - BIND_ENUM_CONSTANT(ARMOR_TYPE_NONE); BIND_ENUM_CONSTANT(ARMOR_TYPE_CLOTH); BIND_ENUM_CONSTANT(ARMOR_TYPE_LEATHER); @@ -250,7 +205,6 @@ VARIANT_ENUM_CAST(ItemEnums::ItemRarityFlag); VARIANT_ENUM_CAST(ItemEnums::ItemType); VARIANT_ENUM_CAST(ItemEnums::ItemSubtype); VARIANT_ENUM_CAST(ItemEnums::ItemSubSubtype); -VARIANT_ENUM_CAST(ItemEnums::EquipSlots); VARIANT_ENUM_CAST(ItemEnums::ArmorType); VARIANT_ENUM_CAST(ItemEnums::EntityTextureLayers); diff --git a/register_types.cpp b/register_types.cpp index 81d3ccd..8e68c74 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -33,7 +33,6 @@ SOFTWARE. #include "data/entities/xp_data.h" #include "data/items/equipment_data.h" -#include "data/items/equipment_data_entry.h" #include "data/items/item_stat_modifier.h" #include "data/items/item_template_stat_modifier.h" #include "data/spells/spell_cooldown_manipulation_data.h" @@ -178,7 +177,6 @@ void register_entity_spell_system_types() { ClassDB::register_class(); ClassDB::register_class(); - ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); diff --git a/singletons/ess.cpp b/singletons/ess.cpp index 9b1ac20..d1ee7db 100644 --- a/singletons/ess.cpp +++ b/singletons/ess.cpp @@ -306,6 +306,114 @@ void ESS::stat_set_main_stat_count(const int index) { _stat_main_stat_count = index; } +//Equipslots +void ESS::equip_slot_set_string(const String &equip_slot_enum_string) { + _equip_slot_id_to_name.clear(); + _equip_slot_name_to_id.clear(); + + _equip_slot_id_to_property.clear(); + _equip_slot_property_to_id.clear(); + + int slicec = equip_slot_enum_string.get_slice_count(","); + _equip_slot_id_to_name.resize(slicec); + _equip_slot_id_to_property.resize(slicec); + + for (int i = 0; i < slicec; ++i) { + String slice = equip_slot_enum_string.get_slicec(',', i); + StringName s = StringName(slice); + + _equip_slot_id_to_name.set(i, s); + _equip_slot_name_to_id.set(s, i); + + String st = slice; + st = st.to_lower(); + st = st.replace(" ", "_"); + StringName stp = StringName(st); + + _equip_slot_id_to_property.set(i, stp); + _equip_slot_property_to_id.set(stp, i); + } + + _equip_slot_enum_string = equip_slot_enum_string + ",None"; +} +String ESS::equip_slot_get_string() const { + return _equip_slot_enum_string; +} + +int ESS::equip_slot_get_id(const StringName &name) const { + ERR_FAIL_COND_V(!_equip_slot_name_to_id.has(name), 0); + + return _equip_slot_name_to_id[name]; +} +StringName ESS::equip_slot_get_name(const int id) const { + ERR_FAIL_INDEX_V(id, _equip_slot_id_to_name.size(), StringName()); + + return _equip_slot_id_to_name[id]; +} + +int ESS::equip_slot_get_property_id(const StringName &name) const { + ERR_FAIL_COND_V(!_equip_slot_property_to_id.has(name), 0); + + return _equip_slot_property_to_id[name]; +} +StringName ESS::equip_slot_get_property_name(const int id) const { + ERR_FAIL_INDEX_V(id, _equip_slot_id_to_property.size(), StringName()); + + return _equip_slot_id_to_property[id]; +} +bool ESS::equip_slot_is_property(const StringName &name) const { + return _equip_slot_property_to_id.has(name); +} + +int ESS::equip_slot_get_count() const { + return _equip_slot_id_to_name.size(); +} + +PoolStringArray ESS::equip_slots_get() const { + PoolStringArray arr; + arr.resize(_equip_slot_id_to_name.size()); + + for (int i = 0; i < _equip_slot_id_to_name.size(); ++i) { + arr.set(i, _equip_slot_id_to_name[i]); + } + + return arr; +} + +void ESS::equip_slots_set(const PoolStringArray &array) { + _equip_slot_enum_string = ""; + + _equip_slot_id_to_name.clear(); + _equip_slot_name_to_id.clear(); + + _equip_slot_id_to_property.clear(); + _equip_slot_property_to_id.clear(); + + _equip_slot_id_to_name.resize(array.size()); + _equip_slot_id_to_property.resize(array.size()); + + if (array.size() > 0) + _equip_slot_enum_string += array[0]; + + for (int i = 0; i < array.size(); ++i) { + StringName s = StringName(array[i]); + + _equip_slot_id_to_name.set(i, s); + _equip_slot_name_to_id.set(s, i); + + String st = array[i]; + st = st.to_lower(); + st = st.replace(" ", "_"); + StringName stp = StringName(st); + + _equip_slot_id_to_property.set(i, stp); + _equip_slot_property_to_id.set(stp, i); + + _equip_slot_enum_string += ","; + _equip_slot_enum_string += array[i]; + } +} + void ESS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_use_spell_points"), &ESS::get_use_spell_points); ClassDB::bind_method(D_METHOD("set_use_spell_points", "value"), &ESS::set_use_spell_points); @@ -397,6 +505,24 @@ void ESS::_bind_methods() { ClassDB::bind_method(D_METHOD("stat_get_main_stat_count"), &ESS::stat_get_main_stat_count); ClassDB::bind_method(D_METHOD("stat_set_main_stat_count", "index"), &ESS::stat_set_main_stat_count); ADD_PROPERTY(PropertyInfo(Variant::INT, "main_stat_count"), "stat_set_main_stat_count", "stat_get_main_stat_count"); + + //Equipslots + ClassDB::bind_method(D_METHOD("equip_slot_get_string"), &ESS::equip_slot_get_string); + ClassDB::bind_method(D_METHOD("equip_slot_set_string", "equip_slot_enum_string"), &ESS::equip_slot_set_string); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "equip_slot_string"), "equip_slot_set_string", "equip_slot_get_string"); + + ClassDB::bind_method(D_METHOD("equip_slot_get_id", "name"), &ESS::equip_slot_get_id); + ClassDB::bind_method(D_METHOD("equip_slot_get_name", "id"), &ESS::equip_slot_get_name); + + ClassDB::bind_method(D_METHOD("equip_slot_get_property_id", "name"), &ESS::equip_slot_get_property_id); + ClassDB::bind_method(D_METHOD("equip_slot_get_property_name", "id"), &ESS::equip_slot_get_property_name); + ClassDB::bind_method(D_METHOD("equip_slot_is_property", "name"), &ESS::equip_slot_is_property); + + ClassDB::bind_method(D_METHOD("equip_slot_get_count"), &ESS::equip_slot_get_count); + + ClassDB::bind_method(D_METHOD("equip_slots_get"), &ESS::equip_slots_get); + ClassDB::bind_method(D_METHOD("equip_slots_set", "array"), &ESS::equip_slots_set); + ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "equip_slots"), "equip_slots_set", "equip_slots_get"); } ESS::ESS() { @@ -422,6 +548,8 @@ ESS::ESS() { stat_set_string(GLOBAL_DEF("ess/enums/stats", "Agility,Strength,Stamina,Intellect,Spirit,Health,Speed,Global Cooldown,Haste")); _stat_main_stat_count = GLOBAL_DEF("ess/enums/main_stat_count", 5); + equip_slot_set_string(GLOBAL_DEF("ess/enums/equip_slots", "Head,Neck,Shoulder,Chest,Gloves,Belt,Legs,Feet,Ring_1,Ring_2,Trinket_1,Trinket_2,Main_Hand,Off_Hand")); + if (!Engine::get_singleton()->is_editor_hint() && _automatic_load) { call_deferred("load_all"); } @@ -438,4 +566,10 @@ ESS::~ESS() { _stat_id_to_property.clear(); _stat_property_to_id.clear(); + + _equip_slot_id_to_name.clear(); + _equip_slot_name_to_id.clear(); + + _equip_slot_id_to_property.clear(); + _equip_slot_property_to_id.clear(); } diff --git a/singletons/ess.h b/singletons/ess.h index 3f9d41a..b107af9 100644 --- a/singletons/ess.h +++ b/singletons/ess.h @@ -126,6 +126,22 @@ public: int stat_get_main_stat_count() const; void stat_set_main_stat_count(const int index); + //Equipslots + String equip_slot_get_string() const; + void equip_slot_set_string(const String &equip_slot_enum_string); + + int equip_slot_get_id(const StringName &name) const; + StringName equip_slot_get_name(const int id) const; + + int equip_slot_get_property_id(const StringName &name) const; + StringName equip_slot_get_property_name(const int id) const; + bool equip_slot_is_property(const StringName &name) const; + + int equip_slot_get_count() const; + + PoolStringArray equip_slots_get() const; + void equip_slots_set(const PoolStringArray &array); + ESS(); ~ESS(); @@ -162,6 +178,15 @@ private: String _stat_enum_string; int _stat_main_stat_count; + + //Equipslots + Vector _equip_slot_id_to_name; + HashMap _equip_slot_name_to_id; + + Vector _equip_slot_id_to_property; + HashMap _equip_slot_property_to_id; + + String _equip_slot_enum_string; }; #endif