Started implementing switchable equipment.

This commit is contained in:
Relintai 2019-10-24 22:06:47 +02:00
parent 30332f7e7d
commit dba901cc9e
15 changed files with 254 additions and 152 deletions

View File

@ -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<MeshDataResource> 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);
}

View File

@ -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<PackedScene> _effect;
Ref<MeshDataResource> _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<EntityTextureLayer> _texture_layers[MAX_TEXTURE_LAYERS];
};
VARIANT_ENUM_CAST(CharacterSkeletonVisualEntry::CharacterSkeletonVisualEntryType);
#endif

View File

@ -1,11 +1,14 @@
#include "equipment_data.h"
Ref<EquipmentDataEntry> EquipmentData::get_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<EquipmentDataEntry>());
#include "item_template.h"
#include "item_instance.h"
Ref<ItemTemplate> EquipmentData::get_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemTemplate>());
return _entries[index];
}
void EquipmentData::set_slot(int index, Ref<EquipmentDataEntry> entry) {
void EquipmentData::set_slot(int index, Ref<ItemTemplate> 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<EquipmentDataEntry> entry) {
Ref<ItemInstance> EquipmentData::get_item(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<ItemInstance>());
Ref<EquipmentDataEntry> ede = _entries[index];
Ref<ItemTemplate> ede = _entries[index];
if (!ede.is_valid())
return Ref<ItemInstance>();
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);
}
}

View File

@ -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<EquipmentDataEntry> get_slot(int index);
void set_slot(int index, Ref<EquipmentDataEntry> entry);
Ref<ItemTemplate> get_slot(int index);
void set_slot(int index, Ref<ItemTemplate> entry);
Ref<ItemInstance> get_item(int index);
@ -22,7 +25,7 @@ protected:
static void _bind_methods();
private:
Ref<EquipmentDataEntry> _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
Ref<ItemTemplate> _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
};
#endif

View File

@ -1,23 +0,0 @@
#include "equipment_data_entry.h"
Ref<ItemInstance> EquipmentDataEntry::get_item() {
if (has_method("_get_item")) {
return call("_get_item");
}
return Ref<ItemInstance>();
}
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);
}

View File

@ -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<ItemInstance> get_item();
EquipmentDataEntry();
~EquipmentDataEntry();
protected:
static void _bind_methods();
//private:
};
#endif

View File

@ -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<ItemVisualEntry> ItemVisual::get_visual(int index) {
ERR_FAIL_INDEX_V(index, EntityEnums::SKELETON_POINTS_MAX, Ref<ItemVisualEntry>());
return _entries[index];
}
void ItemVisual::set_visual(int index, Ref<ItemVisualEntry> 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);
}

View File

@ -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<ItemVisualEntry> get_visual(int index);
void set_visual(int index, Ref<ItemVisualEntry> entry);
ItemVisual();
~ItemVisual();
protected:
static void _bind_methods();
//private:
private:
ItemEnums::EntityTextureLayers _layer;
Ref<ItemVisualEntry> _entries[EntityEnums::SKELETON_POINTS_MAX];
};
#endif

View File

@ -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<MeshDataResource> ItemVisualEntry::get_mesh() {
return _mesh;
}
void ItemVisualEntry::set_mesh(Ref<MeshDataResource> mesh) {
_mesh = mesh;
}
Ref<Texture> ItemVisualEntry::get_texture() {
return _texture;
}
void ItemVisualEntry::set_texture(Ref<Texture> texture) {
_texture = texture;
}
Color ItemVisualEntry::get_color() {
return _color;
}
void ItemVisualEntry::set_color(Color color) {
_color = color;
}
Ref<PackedScene> ItemVisualEntry::get_effect() {
return _effect;
}
void ItemVisualEntry::set_effect(Ref<PackedScene> 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");
}

View File

@ -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<MeshDataResource> get_mesh();
void set_mesh(Ref<MeshDataResource> mesh);
Ref<Texture> get_texture();
void set_texture(Ref<Texture> texture);
Color get_color();
void set_color(Color color);
Ref<PackedScene> get_effect();
void set_effect(Ref<PackedScene> effect);
ItemVisualEntry();
~ItemVisualEntry();
protected:
static void _bind_methods();
//private:
private:
int _id;
EntityEnums::CharacterSkeletonPoints _target_bone;
ItemEnums::EntityTextureLayers _layer;
Ref<MeshDataResource> _mesh;
Ref<Texture> _texture;
Color _color;
Ref<PackedScene> _effect;
};
#endif

View File

@ -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) {

View File

@ -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

View File

@ -52,6 +52,8 @@ private:
Node *_bone_nodes[EntityEnums::SKELETON_POINTS_MAX];
Vector<Ref<ItemVisual> > _item_visuals;
Ref<CharacterSkeletonVisualEntry> _visuals[EntityEnums::SKELETON_POINTS_MAX];
};

View File

@ -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<Texture> get_texture();
void set_texture(Ref<Texture> texture);
protected:
static void _bind_methods();
private:
Ref<Texture> _texture;
int _layer;
Color _colors[MAX_COLORS];
};
#endif