From dba901cc9ece5b2c3ab906e1f61c7837b7906b70 Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 24 Oct 2019 22:06:47 +0200 Subject: [PATCH] Started implementing switchable equipment. --- data/character_skeleton_visual_entry.cpp | 23 +------ data/character_skeleton_visual_entry.h | 24 ------- data/equipment_data.cpp | 15 +++-- data/equipment_data.h | 9 ++- data/equipment_data_entry.cpp | 23 ------- data/equipment_data_entry.h | 25 ------- data/item_visual.cpp | 64 ++++++++++++++++++ data/item_visual.h | 13 +++- data/item_visual_entry.cpp | 84 ++++++++++++++++++++++++ data/item_visual_entry.h | 43 +++++++++++- item_enums.cpp | 2 +- item_enums.h | 34 +++++++++- skeleton/character_skeleton_3d.h | 2 + skeleton/entity_texture_layer.cpp | 0 skeleton/entity_texture_layer.h | 45 ------------- 15 files changed, 254 insertions(+), 152 deletions(-) delete mode 100644 data/equipment_data_entry.cpp delete mode 100644 data/equipment_data_entry.h delete mode 100644 skeleton/entity_texture_layer.cpp delete mode 100644 skeleton/entity_texture_layer.h diff --git a/data/character_skeleton_visual_entry.cpp b/data/character_skeleton_visual_entry.cpp index be8a6d1..e17a547 100644 --- a/data/character_skeleton_visual_entry.cpp +++ b/data/character_skeleton_visual_entry.cpp @@ -1,7 +1,5 @@ #include "character_skeleton_visual_entry.h" -const String CharacterSkeletonVisualEntry::BINDING_STRING_BONE_ATTACHMENT_TYPES = "None, Mesh, Effect, Equipment, Override"; - int CharacterSkeletonVisualEntry::get_id() { return _id; } @@ -10,14 +8,6 @@ void CharacterSkeletonVisualEntry::set_id(int id) { _id = id; } -CharacterSkeletonVisualEntry::CharacterSkeletonVisualEntryType CharacterSkeletonVisualEntry::get_attachment_type() { - return _attachment_type; -} - -void CharacterSkeletonVisualEntry::set_attachment_type(CharacterSkeletonVisualEntry::CharacterSkeletonVisualEntryType attachment_type) { - _attachment_type = attachment_type; -} - EntityEnums::CharacterSkeletonPoints CharacterSkeletonVisualEntry::get_target_bone() { return _target_bone; } @@ -43,18 +33,13 @@ void CharacterSkeletonVisualEntry::set_mesh(Ref mesh) { CharacterSkeletonVisualEntry::CharacterSkeletonVisualEntry() { _id = 0; _target_bone = EntityEnums::SKELETON_POINT_ROOT; - _attachment_type = BONE_ATTACHMENT_TYPE_NONE; } void CharacterSkeletonVisualEntry::_bind_methods() { ClassDB::bind_method(D_METHOD("get_id"), &CharacterSkeletonVisualEntry::get_id); ClassDB::bind_method(D_METHOD("set_id", "path"), &CharacterSkeletonVisualEntry::set_id); ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id"); - - ClassDB::bind_method(D_METHOD("get_attachment_type"), &CharacterSkeletonVisualEntry::get_attachment_type); - ClassDB::bind_method(D_METHOD("set_attachment_type", "target_bone"), &CharacterSkeletonVisualEntry::set_attachment_type); - ADD_PROPERTY(PropertyInfo(Variant::INT, "attachment_type", PROPERTY_HINT_ENUM, CharacterSkeletonVisualEntry::BINDING_STRING_BONE_ATTACHMENT_TYPES), "set_attachment_type", "get_attachment_type"); - + ClassDB::bind_method(D_METHOD("get_target_bone"), &CharacterSkeletonVisualEntry::get_target_bone); ClassDB::bind_method(D_METHOD("set_target_bone", "target_bone"), &CharacterSkeletonVisualEntry::set_target_bone); ADD_PROPERTY(PropertyInfo(Variant::INT, "target_bone", PROPERTY_HINT_ENUM, EntityEnums::BINDING_STRING_CHARCATER_SKELETON_POINTS), "set_target_bone", "get_target_bone"); @@ -66,11 +51,5 @@ void CharacterSkeletonVisualEntry::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mesh"), &CharacterSkeletonVisualEntry::get_mesh); ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &CharacterSkeletonVisualEntry::set_mesh); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh", "get_mesh"); - - BIND_ENUM_CONSTANT(BONE_ATTACHMENT_TYPE_NONE); - BIND_ENUM_CONSTANT(BONE_ATTACHMENT_TYPE_MESH); - BIND_ENUM_CONSTANT(BONE_ATTACHMENT_TYPE_EFFECT); - BIND_ENUM_CONSTANT(BONE_ATTACHMENT_TYPE_EQUIPMENT); - BIND_ENUM_CONSTANT(BONE_ATTACHMENT_TYPE_OVERRIDE); } diff --git a/data/character_skeleton_visual_entry.h b/data/character_skeleton_visual_entry.h index fbf55a7..b7055aa 100644 --- a/data/character_skeleton_visual_entry.h +++ b/data/character_skeleton_visual_entry.h @@ -9,33 +9,14 @@ #include "../entity_enums.h" #include "../meshes/mesh_data_resource.h" -#include "../skeleton/entity_texture_layer.h" class CharacterSkeletonVisualEntry : public Resource { GDCLASS(CharacterSkeletonVisualEntry, Resource); public: - static const String BINDING_STRING_BONE_ATTACHMENT_TYPES; - - enum { - MAX_TEXTURE_LAYERS = 5 - }; - - //not needed, delete - enum CharacterSkeletonVisualEntryType { - BONE_ATTACHMENT_TYPE_NONE = 0, - BONE_ATTACHMENT_TYPE_MESH = 1, - BONE_ATTACHMENT_TYPE_EFFECT = 2, - BONE_ATTACHMENT_TYPE_EQUIPMENT = 3, - BONE_ATTACHMENT_TYPE_OVERRIDE = 4 - }; - int get_id(); void set_id(int id); - CharacterSkeletonVisualEntryType get_attachment_type(); - void set_attachment_type(CharacterSkeletonVisualEntryType attachment_type); - EntityEnums::CharacterSkeletonPoints get_target_bone(); void set_target_bone(EntityEnums::CharacterSkeletonPoints bone); @@ -52,14 +33,9 @@ protected: private: int _id; - CharacterSkeletonVisualEntryType _attachment_type; EntityEnums::CharacterSkeletonPoints _target_bone; Ref _effect; Ref _mesh; - //apply these from to to bottom, with color index 0, if index not present. store color index in item instance. Use the same index for all of them at once. - Ref _texture_layers[MAX_TEXTURE_LAYERS]; }; -VARIANT_ENUM_CAST(CharacterSkeletonVisualEntry::CharacterSkeletonVisualEntryType); - #endif diff --git a/data/equipment_data.cpp b/data/equipment_data.cpp index 9a0814f..fb1c515 100644 --- a/data/equipment_data.cpp +++ b/data/equipment_data.cpp @@ -1,11 +1,14 @@ #include "equipment_data.h" -Ref EquipmentData::get_slot(int index) { - ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); +#include "item_template.h" +#include "item_instance.h" + +Ref EquipmentData::get_slot(int index) { + ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); return _entries[index]; } -void EquipmentData::set_slot(int index, Ref entry) { +void EquipmentData::set_slot(int index, Ref entry) { ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); _entries[index] = entry; @@ -14,12 +17,12 @@ void EquipmentData::set_slot(int index, Ref entry) { Ref EquipmentData::get_item(int index) { ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, 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() { @@ -36,6 +39,6 @@ void EquipmentData::_bind_methods() { 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); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "slot_" + ItemEnums::get_equip_slot_string(i), PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"), "set_slot", "get_slot", i); } } diff --git a/data/equipment_data.h b/data/equipment_data.h index 9367d95..1c59e4e 100644 --- a/data/equipment_data.h +++ b/data/equipment_data.h @@ -6,12 +6,15 @@ #include "../item_enums.h" #include "equipment_data_entry.h" +class ItemTemplate; +class ItemInstance; + 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); @@ -22,7 +25,7 @@ protected: static void _bind_methods(); private: - Ref _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; + Ref _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX]; }; #endif diff --git a/data/equipment_data_entry.cpp b/data/equipment_data_entry.cpp deleted file mode 100644 index 1893343..0000000 --- a/data/equipment_data_entry.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#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/equipment_data_entry.h b/data/equipment_data_entry.h deleted file mode 100644 index f781248..0000000 --- a/data/equipment_data_entry.h +++ /dev/null @@ -1,25 +0,0 @@ -#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/item_visual.cpp b/data/item_visual.cpp index 9fbc3b8..e9a71de 100644 --- a/data/item_visual.cpp +++ b/data/item_visual.cpp @@ -1,10 +1,74 @@ #include "item_visual.h" +ItemEnums::EntityTextureLayers ItemVisual::get_layer() { + return _layer; +} +void ItemVisual::set_layer(ItemEnums::EntityTextureLayers layer) { + _layer = layer; +} + +Ref ItemVisual::get_visual(int index) { + ERR_FAIL_INDEX_V(index, EntityEnums::SKELETON_POINTS_MAX, Ref()); + + return _entries[index]; +} +void ItemVisual::set_visual(int index, Ref entry) { + ERR_FAIL_INDEX(index, EntityEnums::SKELETON_POINTS_MAX); + + _entries[index] = entry; +} + ItemVisual::ItemVisual() { + _layer = ItemEnums::ENTITY_TEXTURE_LAYER_NONE; } ItemVisual::~ItemVisual() { + for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) { + _entries[i].unref(); + } } void ItemVisual::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_layer"), &ItemVisual::get_layer); + ClassDB::bind_method(D_METHOD("set_layer", "layer"), &ItemVisual::set_layer); + ADD_PROPERTY(PropertyInfo(Variant::INT, "layer", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ENTITY_TEXTURE_LAYERS), "set_layer", "get_layer"); + + ClassDB::bind_method(D_METHOD("get_visual", "index"), &ItemVisual::get_visual); + ClassDB::bind_method(D_METHOD("set_visual", "index", "entry"), &ItemVisual::set_visual); + + ADD_GROUP("Visuals", "visual_"); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_root", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_ROOT); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_pelvis", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_PELVIS); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine_1", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE_1); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine_2", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE_2); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_neck", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_NECK); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_head", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_HEAD); + + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_clavicle", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_CLAVICLE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_upper_arm", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_UPPER_ARM); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_forearm", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FOREARM); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_hand", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_HAND); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thumb_base", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THUMB_BASE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thumb_end", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THUMB_END); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_fingers_base", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FINGERS_BASE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_fingers_end", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FINGERS_END); + + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_clavicle", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_CLAVICLE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_upper_arm", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_UPPER_ARM); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_forearm", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FOREARM); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_hand", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_HAND); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thumb_base", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THUMB_BASE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thumb_end", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THUMB_END); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_fingers_base", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FINGERS_BASE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_fingers_end", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FINGERS_END); + + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thigh", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THIGH); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_calf", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_CALF); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_foot", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FOOT); + + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thigh", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THIGH); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_calf", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_CALF); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_foot", PROPERTY_HINT_RESOURCE_TYPE, "ItemVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FOOT); + } diff --git a/data/item_visual.h b/data/item_visual.h index 258ac1b..94bd3ba 100644 --- a/data/item_visual.h +++ b/data/item_visual.h @@ -3,17 +3,28 @@ #include "core/resource.h" +#include "../item_enums.h" +#include "item_visual_entry.h" + class ItemVisual : public Resource { GDCLASS(ItemVisual, Resource); public: + ItemEnums::EntityTextureLayers get_layer(); + void set_layer(ItemEnums::EntityTextureLayers layer); + + Ref get_visual(int index); + void set_visual(int index, Ref entry); + ItemVisual(); ~ItemVisual(); protected: static void _bind_methods(); -//private: +private: + ItemEnums::EntityTextureLayers _layer; + Ref _entries[EntityEnums::SKELETON_POINTS_MAX]; }; #endif diff --git a/data/item_visual_entry.cpp b/data/item_visual_entry.cpp index a465c2c..9030b06 100644 --- a/data/item_visual_entry.cpp +++ b/data/item_visual_entry.cpp @@ -1,11 +1,95 @@ #include "item_visual_entry.h" +int ItemVisualEntry::get_id() { + return _id; +} +void ItemVisualEntry::set_id(int id) { + _id = id; +} + +EntityEnums::CharacterSkeletonPoints ItemVisualEntry::get_target_bone() { + return _target_bone; +} +void ItemVisualEntry::set_target_bone(EntityEnums::CharacterSkeletonPoints bone) { + _target_bone = bone; +} + +ItemEnums::EntityTextureLayers ItemVisualEntry::get_layer() { + return _layer; +} +void ItemVisualEntry::set_layer(ItemEnums::EntityTextureLayers layer) { + _layer = layer; +} + +Ref ItemVisualEntry::get_mesh() { + return _mesh; +} +void ItemVisualEntry::set_mesh(Ref mesh) { + _mesh = mesh; +} + +Ref ItemVisualEntry::get_texture() { + return _texture; +} +void ItemVisualEntry::set_texture(Ref texture) { + _texture = texture; +} + +Color ItemVisualEntry::get_color() { + return _color; +} +void ItemVisualEntry::set_color(Color color) { + _color = color; +} + +Ref ItemVisualEntry::get_effect() { + return _effect; +} +void ItemVisualEntry::set_effect(Ref effect) { + _effect = effect; +} ItemVisualEntry::ItemVisualEntry() { + _id = 0; + + _target_bone = EntityEnums::SKELETON_POINT_HEAD; + _layer = ItemEnums::ENTITY_TEXTURE_LAYER_NONE; + + _color = Color(1, 1, 1, 1); } ItemVisualEntry::~ItemVisualEntry() { + _mesh.unref(); + _texture.unref(); + _effect.unref(); } void ItemVisualEntry::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_id"), &ItemVisualEntry::get_id); + ClassDB::bind_method(D_METHOD("set_id", "value"), &ItemVisualEntry::set_id); + ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id"); + + ClassDB::bind_method(D_METHOD("get_target_bone"), &ItemVisualEntry::get_target_bone); + ClassDB::bind_method(D_METHOD("set_target_bone", "bone"), &ItemVisualEntry::set_target_bone); + ADD_PROPERTY(PropertyInfo(Variant::INT, "target_bone", PROPERTY_HINT_ENUM, EntityEnums::BINDING_STRING_CHARCATER_SKELETON_POINTS), "set_target_bone", "get_target_bone"); + + ClassDB::bind_method(D_METHOD("get_layer"), &ItemVisualEntry::get_layer); + ClassDB::bind_method(D_METHOD("set_layer", "value"), &ItemVisualEntry::set_layer); + ADD_PROPERTY(PropertyInfo(Variant::INT, "layer", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ENTITY_TEXTURE_LAYERS), "set_layer", "get_layer"); + + ClassDB::bind_method(D_METHOD("get_mesh"), &ItemVisualEntry::get_mesh); + ClassDB::bind_method(D_METHOD("set_mesh", "value"), &ItemVisualEntry::set_mesh); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh", "get_mesh"); + + ClassDB::bind_method(D_METHOD("get_texture"), &ItemVisualEntry::get_texture); + ClassDB::bind_method(D_METHOD("set_texture", "value"), &ItemVisualEntry::set_texture); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); + + ClassDB::bind_method(D_METHOD("get_color"), &ItemVisualEntry::get_color); + ClassDB::bind_method(D_METHOD("set_color", "value"), &ItemVisualEntry::set_color); + ADD_PROPERTY(PropertyInfo(Variant::INT, "color"), "set_color", "get_color"); + + ClassDB::bind_method(D_METHOD("get_effect"), &ItemVisualEntry::get_effect); + ClassDB::bind_method(D_METHOD("set_effect", "value"), &ItemVisualEntry::set_effect); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "effect", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_effect", "get_effect"); } diff --git a/data/item_visual_entry.h b/data/item_visual_entry.h index f89a76e..388b2e3 100644 --- a/data/item_visual_entry.h +++ b/data/item_visual_entry.h @@ -2,18 +2,59 @@ #define ITEM_VISUAL_ENTRY_H #include "core/resource.h" +#include "core/ustring.h" +#include "core/color.h" +#include "scene/resources/texture.h" + +#include "../entity_enums.h" +#include "../item_enums.h" + +#include "scene/resources/packed_scene.h" +#include "scene/resources/mesh.h" +#include "../meshes/mesh_data_resource.h" class ItemVisualEntry : public Resource { GDCLASS(ItemVisualEntry, Resource); public: + int get_id(); + void set_id(int id); + + EntityEnums::CharacterSkeletonPoints get_target_bone(); + void set_target_bone(EntityEnums::CharacterSkeletonPoints bone); + + ItemEnums::EntityTextureLayers get_layer(); + void set_layer(ItemEnums::EntityTextureLayers layer); + + Ref get_mesh(); + void set_mesh(Ref mesh); + + Ref get_texture(); + void set_texture(Ref texture); + + Color get_color(); + void set_color(Color color); + + Ref get_effect(); + void set_effect(Ref effect); + ItemVisualEntry(); ~ItemVisualEntry(); protected: static void _bind_methods(); -//private: +private: + int _id; + + EntityEnums::CharacterSkeletonPoints _target_bone; + ItemEnums::EntityTextureLayers _layer; + Ref _mesh; + + Ref _texture; + Color _color; + + Ref _effect; }; #endif diff --git a/item_enums.cpp b/item_enums.cpp index b66f087..130037d 100644 --- a/item_enums.cpp +++ b/item_enums.cpp @@ -1,6 +1,5 @@ #include "item_enums.h" - const String ItemEnums::BINDING_STRING_RARITY = "None,Common,Uncommon,Superior,Heroic,Mythic,Artifact"; const String ItemEnums::BINDING_STRING_RARITY_FLAG = "Common,Uncommon,Superior,Heroic,Mythic,Artifact"; const String ItemEnums::BINDING_STRING_ITEM_TYPE = "None,Equipment,Weapon,Potion,Herb,Ore,Gemstone,Food,Alchemy,Engineering,Enchanting,Tailoring,Recipe,Currency,Bag"; @@ -9,6 +8,7 @@ const String ItemEnums::BINDING_STRING_ITEM_SUB_TYPE = "None,Sword,Axe,Mace,Dagg 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) { diff --git a/item_enums.h b/item_enums.h index 65d0c44..bf00533 100644 --- a/item_enums.h +++ b/item_enums.h @@ -16,6 +16,7 @@ public: 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; enum ItemRarity { ITEM_RARITY_NONE = 0, @@ -108,6 +109,23 @@ public: ARMOR_TYPE_MAX = 5, }; + enum EntityTextureLayers { + ENTITY_TEXTURE_LAYER_NONE = 0, + ENTITY_TEXTURE_LAYER_SKIN = 1, + ENTITY_TEXTURE_LAYER_UNDERWEAR = 2, + ENTITY_TEXTURE_LAYER_SHIRT = 3, + ENTITY_TEXTURE_LAYER_CLOTHES_BASE = 4, + ENTITY_TEXTURE_LAYER_CLOTHES_1 = 5, + ENTITY_TEXTURE_LAYER_CLOTHES_2 = 6, + ENTITY_TEXTURE_LAYER_CLOTHES_3 = 7, + ENTITY_TEXTURE_LAYER_CLOTHES_4 = 8, + ENTITY_TEXTURE_LAYER_CLOTHES_5 = 9, + ENTITY_TEXTURE_LAYER_BELT = 10, + ENTITY_TEXTURE_LAYER_TABARD = 11, + ENTITY_TEXTURE_LAYER_OVERLAY = 12 + }; + + static String get_equip_slot_string(int slot); static String get_armor_type_string(int type); @@ -191,6 +209,20 @@ protected: BIND_ENUM_CONSTANT(ARMOR_TYPE_MAIL); BIND_ENUM_CONSTANT(ARMOR_TYPE_PLATE); BIND_ENUM_CONSTANT(ARMOR_TYPE_MAX); + + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_NONE); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_SKIN); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_UNDERWEAR); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_SHIRT); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_BASE); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_1); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_2); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_3); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_4); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_CLOTHES_5); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_BELT); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_TABARD); + BIND_ENUM_CONSTANT(ENTITY_TEXTURE_LAYER_OVERLAY); } }; @@ -201,6 +233,6 @@ 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); #endif diff --git a/skeleton/character_skeleton_3d.h b/skeleton/character_skeleton_3d.h index 620afde..fe795c5 100644 --- a/skeleton/character_skeleton_3d.h +++ b/skeleton/character_skeleton_3d.h @@ -52,6 +52,8 @@ private: Node *_bone_nodes[EntityEnums::SKELETON_POINTS_MAX]; + Vector > _item_visuals; + Ref _visuals[EntityEnums::SKELETON_POINTS_MAX]; }; diff --git a/skeleton/entity_texture_layer.cpp b/skeleton/entity_texture_layer.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/skeleton/entity_texture_layer.h b/skeleton/entity_texture_layer.h deleted file mode 100644 index dc0a168..0000000 --- a/skeleton/entity_texture_layer.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef ENTITY_TEXTURE_LAYER_H -#define ENTITY_TEXTURE_LAYER_H - -#include "core/resource.h" -#include "core/ustring.h" - -class EntityTextureLayer : public Resource { - GDCLASS(EntityTextureLayer, Resource); - -public: - enum { - MAX_COLORS = 6 - }; - - enum EntityTextureLayerLayers { - ENTITY_TEXTURE_LAYER_NONE = 0, - ENTITY_TEXTURE_LAYER_SKIN = 1, - ENTITY_TEXTURE_LAYER_UNDERWEAR = 2, - ENTITY_TEXTURE_LAYER_SHIRT = 3, - ENTITY_TEXTURE_LAYER_CLOTHES_BASE = 4, - ENTITY_TEXTURE_LAYER_BELT = 5, - ENTITY_TEXTURE_LAYER_TABARD = 6, - ENTITY_TEXTURE_LAYER_OVERLAY = 7 - }; - - enum EntityTextureLayerRectId { - ENTITY_TEXTURE_LAYER_RECT_ID_FULL = 0, - ENTITY_TEXTURE_LAYER_RECT_ID_HEAD = 1, - ENTITY_TEXTURE_LAYER_RECT_ID_FOOT = 2, - //etc - }; - - Ref get_texture(); - void set_texture(Ref texture); - -protected: - static void _bind_methods(); - -private: - Ref _texture; - int _layer; - Color _colors[MAX_COLORS]; -}; - -#endif