From 21b8d432e0fecf7aa037fa86a3a78b81f9d09b8c Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 13 Oct 2019 15:21:28 +0200 Subject: [PATCH] Added EquipmentData. --- data/data_manager.cpp | 18 ++++++++++++ data/data_manager.h | 6 ++++ data/equipment_data.cpp | 32 +++++++++++++++++++++ data/equipment_data.h | 26 ++++++++++++++++++ data/equipment_data_entry.cpp | 23 ++++++++++++++++ data/equipment_data_entry.h | 23 ++++++++++++++++ item_enums.cpp | 52 +++++++++++++++++++++++++++++++++++ item_enums.h | 22 +++++++++++++++ 8 files changed, 202 insertions(+) create mode 100644 data/equipment_data.cpp create mode 100644 data/equipment_data.h create mode 100644 data/equipment_data_entry.cpp create mode 100644 data/equipment_data_entry.h diff --git a/data/data_manager.cpp b/data/data_manager.cpp index 8d08a2c..ce9d91b 100644 --- a/data/data_manager.cpp +++ b/data/data_manager.cpp @@ -26,6 +26,17 @@ void DataManager::_notification(int p_what) { } } +Ref DataManager::get_skill_for_armor_type(int index) { + ERR_FAIL_INDEX_V(index, ItemEnums::ARMOR_TYPE_MAX, Ref()); + + return _armor_type_skills[index]; +} +void DataManager::set_skill_for_armor_type(int index, Ref aura) { + ERR_FAIL_INDEX(index, ItemEnums::ARMOR_TYPE_MAX); + + _armor_type_skills[index] = aura; +} + String DataManager::get_xp_data_path() { return _xp_data_path; } @@ -620,6 +631,13 @@ void DataManager::list_player_character_datas() { } void DataManager::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_skill_for_armor_type", "index"), &DataManager::get_skill_for_armor_type); + ClassDB::bind_method(D_METHOD("set_skill_for_armor_type", "index", "aura"), &DataManager::set_skill_for_armor_type); + + for (int i = 0; i < ItemEnums::ARMOR_TYPE_MAX; ++i) { + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "skill_for_armor_type_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_skill_for_armor_type", "get_skill_for_armor_type", i); + } + ClassDB::bind_method(D_METHOD("get_automatic_load"), &DataManager::get_automatic_load); ClassDB::bind_method(D_METHOD("set_automatic_load", "load"), &DataManager::set_automatic_load); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "automatic_load"), "set_automatic_load", "get_automatic_load"); diff --git a/data/data_manager.h b/data/data_manager.h index 2effc92..b35a509 100644 --- a/data/data_manager.h +++ b/data/data_manager.h @@ -12,6 +12,7 @@ #include "scene/main/node.h" #include "core/bind/core_bind.h" +#include "../item_enums.h" #include "xp_data.h" @@ -27,6 +28,9 @@ class DataManager : public Node { public: static DataManager *get_instance(); + Ref get_skill_for_armor_type(int index); + void set_skill_for_armor_type(int index, Ref aura); + String get_xp_data_path(); void set_xp_data_path(String path); Ref get_xp_data(); @@ -147,6 +151,8 @@ private: Vector > _player_character_datas; HashMap > _player_character_data_map; + Ref _armor_type_skills[ItemEnums::ARMOR_TYPE_MAX]; + static DataManager *instance; bool _automatic_load; diff --git a/data/equipment_data.cpp b/data/equipment_data.cpp new file mode 100644 index 0000000..4d55296 --- /dev/null +++ b/data/equipment_data.cpp @@ -0,0 +1,32 @@ +#include "equipment_data.h" + +Ref EquipmentDataEntry::get_slot(int index) { + ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); + + return _entries[index]; +} +void EquipmentDataEntry::set_slot(int index, Ref entry) { + ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + + _entries[index] = entry; +} + +EquipmentDataEntry::EquipmentDataEntry() { +} + +EquipmentDataEntry::~EquipmentDataEntry() { + for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) + _entries[i].unref(); +} + +void EquipmentDataEntry::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_slot", "index"), &EquipmentDataEntry::get_slot); + ClassDB::bind_method(D_METHOD("set_slot", "index", "entry"), &EquipmentDataEntry::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, "EntityData"), "sets_entity_data", "gets_entity_data", i); + } + + +} diff --git a/data/equipment_data.h b/data/equipment_data.h new file mode 100644 index 0000000..611c44c --- /dev/null +++ b/data/equipment_data.h @@ -0,0 +1,26 @@ +#ifndef EQUIPMENT_DATA_H +#define EQUIPMENT_DATA_H + +#include "core/resource.h" + +#include "../item_enums.h" +#include "equipment_data_entry.h" + +class EquipmentDataEntry : public Resource { + GDCLASS(EquipmentDataEntry, Resource); + +public: + Ref get_slot(int index); + void set_slot(int index, Ref entry); + + EquipmentDataEntry(); + ~EquipmentDataEntry(); + +protected: + static void _bind_methods(); + +private: + Ref _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; +}; + +#endif diff --git a/data/equipment_data_entry.cpp b/data/equipment_data_entry.cpp new file mode 100644 index 0000000..5f483e1 --- /dev/null +++ b/data/equipment_data_entry.cpp @@ -0,0 +1,23 @@ +#include "equipment_data_entry.h" + +#include "item_instance.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/equipment_data_entry.h b/data/equipment_data_entry.h new file mode 100644 index 0000000..2846189 --- /dev/null +++ b/data/equipment_data_entry.h @@ -0,0 +1,23 @@ +#ifndef EQUIPMENT_DATA_ENTRY_H +#define EQUIPMENT_DATA_ENTRY_H + +#include "core/resource.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/item_enums.cpp b/item_enums.cpp index 716a6bc..b66f087 100644 --- a/item_enums.cpp +++ b/item_enums.cpp @@ -8,4 +8,56 @@ const String ItemEnums::BINDING_STRING_ITEM_TYPE_FLAGS = "Equipment,Weapon,Potio 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"; +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: + return "none"; + case 1: + return "cloth"; + case 2: + return "leather"; + case 3: + return "mail"; + case 4: + return "plate"; + } + + return ""; +} diff --git a/item_enums.h b/item_enums.h index db34fd4..65d0c44 100644 --- a/item_enums.h +++ b/item_enums.h @@ -2,6 +2,7 @@ #define ITEM_ENUMS_H #include "core/object.h" +#include "core/ustring.h" class ItemEnums : public Object { GDCLASS(ItemEnums, Object); @@ -14,6 +15,7 @@ public: 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; enum ItemRarity { ITEM_RARITY_NONE = 0, @@ -97,6 +99,18 @@ public: EQUIP_SLOT_NONE = 14 }; + enum ArmorType { + ARMOR_TYPE_NONE = 0, + ARMOR_TYPE_CLOTH = 1, + ARMOR_TYPE_LEATHER = 2, + ARMOR_TYPE_MAIL = 3, + ARMOR_TYPE_PLATE = 4, + ARMOR_TYPE_MAX = 5, + }; + + static String get_equip_slot_string(int slot); + static String get_armor_type_string(int type); + ItemEnums() {} protected: @@ -170,6 +184,13 @@ protected: 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); + BIND_ENUM_CONSTANT(ARMOR_TYPE_MAIL); + BIND_ENUM_CONSTANT(ARMOR_TYPE_PLATE); + BIND_ENUM_CONSTANT(ARMOR_TYPE_MAX); } }; @@ -179,6 +200,7 @@ 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); #endif