diff --git a/data/item_visual_entry.cpp b/data/item_visual_entry.cpp index 9ab3111..daac35e 100644 --- a/data/item_visual_entry.cpp +++ b/data/item_visual_entry.cpp @@ -7,18 +7,18 @@ void ItemVisualEntry::set_override_layer(ItemEnums::EntityTextureLayers layer) { _override_layer = layer; } -Ref ItemVisualEntry::get_mesh() { - return _mesh; +Ref ItemVisualEntry::get_mesh(int index) { + return _mesh[index]; } -void ItemVisualEntry::set_mesh(Ref mesh) { - _mesh = mesh; +void ItemVisualEntry::set_mesh(int index, Ref mesh) { + _mesh[index] = mesh; } -Ref ItemVisualEntry::get_texture() { - return _texture; +Ref ItemVisualEntry::get_texture(int index) { + return _texture[index]; } -void ItemVisualEntry::set_texture(Ref texture) { - _texture = texture; +void ItemVisualEntry::set_texture(int index, Ref texture) { + _texture[index] = texture; } Color ItemVisualEntry::get_color() { @@ -35,16 +35,25 @@ void ItemVisualEntry::set_effect(Ref effect) { _effect = effect; } -ItemVisualEntry::ItemVisualEntry() { +Vector3 ItemVisualEntry::get_effect_offset(int index) { + return _effect_offset[index]; +} +void ItemVisualEntry::set_effect_offset(int index, Vector3 offset) { + _effect_offset[index] = offset; +} +ItemVisualEntry::ItemVisualEntry() { _override_layer = ItemEnums::ENTITY_TEXTURE_LAYER_NONE; _color = Color(1, 1, 1, 1); } ItemVisualEntry::~ItemVisualEntry() { - _mesh.unref(); - _texture.unref(); + for (int i = 0; i < EntityEnums::GENDER_COUNT; ++i) { + _mesh[i].unref(); + _texture[i].unref(); + } + _effect.unref(); } @@ -53,13 +62,15 @@ void ItemVisualEntry::_bind_methods() { ClassDB::bind_method(D_METHOD("set_override_layer", "value"), &ItemVisualEntry::set_override_layer); ADD_PROPERTY(PropertyInfo(Variant::INT, "override_layer", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ENTITY_TEXTURE_LAYERS), "set_override_layer", "get_override_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_mesh", "index"), &ItemVisualEntry::get_mesh); + ClassDB::bind_method(D_METHOD("set_mesh", "index", "value"), &ItemVisualEntry::set_mesh); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "mesh_male", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh", "get_mesh", EntityEnums::GENDER_MALE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "mesh_female", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh", "get_mesh", EntityEnums::GENDER_FEMALE); - 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_texture", "index"), &ItemVisualEntry::get_texture); + ClassDB::bind_method(D_METHOD("set_texture", "index", "value"), &ItemVisualEntry::set_texture); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_male", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", EntityEnums::GENDER_MALE); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_female", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", EntityEnums::GENDER_FEMALE); ClassDB::bind_method(D_METHOD("get_color"), &ItemVisualEntry::get_color); ClassDB::bind_method(D_METHOD("set_color", "value"), &ItemVisualEntry::set_color); @@ -67,5 +78,11 @@ void ItemVisualEntry::_bind_methods() { 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"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "effect_male", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_effect", "get_effect"); + + ClassDB::bind_method(D_METHOD("get_effect_offset", "index"), &ItemVisualEntry::get_effect_offset); + ClassDB::bind_method(D_METHOD("set_effect_offset", "index", "value"), &ItemVisualEntry::set_effect_offset); + ADD_PROPERTYI(PropertyInfo(Variant::VECTOR3, "effect_offset_male"), "set_effect_offset", "get_effect_offset", EntityEnums::GENDER_MALE); + ADD_PROPERTYI(PropertyInfo(Variant::VECTOR3, "effect_offset_female"), "set_effect_offset", "get_effect_offset", EntityEnums::GENDER_FEMALE); } +; diff --git a/data/item_visual_entry.h b/data/item_visual_entry.h index 49a9169..e80ed3f 100644 --- a/data/item_visual_entry.h +++ b/data/item_visual_entry.h @@ -20,11 +20,11 @@ public: ItemEnums::EntityTextureLayers get_override_layer(); void set_override_layer(ItemEnums::EntityTextureLayers layer); - Ref get_mesh(); - void set_mesh(Ref mesh); + Ref get_mesh(int index); + void set_mesh(int index, Ref mesh); - Ref get_texture(); - void set_texture(Ref texture); + Ref get_texture(int index); + void set_texture(int index, Ref texture); Color get_color(); void set_color(Color color); @@ -32,6 +32,9 @@ public: Ref get_effect(); void set_effect(Ref effect); + Vector3 get_effect_offset(int index); + void set_effect_offset(int index, Vector3 offset); + ItemVisualEntry(); ~ItemVisualEntry(); @@ -40,12 +43,14 @@ protected: private: ItemEnums::EntityTextureLayers _override_layer; - Ref _mesh; - Ref _texture; + Ref _mesh[EntityEnums::GENDER_COUNT]; + + Ref _texture[EntityEnums::GENDER_COUNT]; Color _color; Ref _effect; + Vector3 _effect_offset[EntityEnums::GENDER_COUNT]; }; #endif diff --git a/entities/entity.cpp b/entities/entity.cpp index 2217778..67909d1 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -113,20 +113,24 @@ void Entity::setc_entity_name(String value) { emit_signal("cname_changed", this); } -int Entity::gets_gender() { +EntityEnums::EntityGender Entity::gets_gender() { return _s_gender; } -void Entity::sets_gender(int value) { +void Entity::sets_gender(EntityEnums::EntityGender value) { _s_gender = value; VRPC(setc_gender, value); } -int Entity::getc_gender() { +EntityEnums::EntityGender Entity::getc_gender() { return _c_gender; } -void Entity::setc_gender(int value) { +void Entity::setc_gender(EntityEnums::EntityGender value) { _c_gender = value; + + if (ObjectDB::instance_validate(_character_skeleton)) { + _character_skeleton->set_gender(_c_gender); + } } int Entity::gets_level() { @@ -549,7 +553,7 @@ void Entity::_from_dict(const Dictionary &dict) { sets_entity_type((EntityEnums::EntityType)((int)dict.get("type", 0))); - sets_gender(dict.get("gender", 0)); + sets_gender(static_cast(static_cast(dict.get("gender", 0)))); sets_level(dict.get("level", 0)); sets_xp(dict.get("xp", 0)); sets_money(dict.get("money", 0)); @@ -4373,8 +4377,8 @@ Entity::Entity() { _s_type = 0; _c_type = 0; - _s_gender = 0; - _c_gender = 0; + _s_gender = EntityEnums::GENDER_MALE; + _c_gender = EntityEnums::GENDER_MALE; _s_level = 1; _c_level = 1; @@ -4442,21 +4446,6 @@ Entity::Entity() { _formation_index = 0; - /* - get_stat_enum(Stat::STAT_ID_HEALTH)->set_base(10000); - get_stat_enum(Stat::STAT_ID_MANA)->set_base(100); - get_stat_enum(Stat::STAT_ID_RAGE)->set_base(100); - get_stat_enum(Stat::STAT_ID_ENERGY)->set_base(100); - get_stat_enum(Stat::STAT_ID_SPEED)->set_base(4.2); - get_stat_enum(Stat::STAT_ID_GLOBAL_COOLDOWN)->set_base(1.5); - get_stat_enum(Stat::STAT_ID_MELEE_CRIT)->set_base(5); - get_stat_enum(Stat::STAT_ID_MELEE_CRIT_BONUS)->set_base(50); - get_stat_enum(Stat::STAT_ID_SPELL_CRIT)->set_base(5); - get_stat_enum(Stat::STAT_ID_SPELL_CRIT_BONUS)->set_base(50); - get_stat_enum(Stat::STAT_ID_BLOCK)->set_base(10); - get_stat_enum(Stat::STAT_ID_PARRY)->set_base(15); - get_stat_enum(Stat::STAT_ID_MELEE_DAMAGE_REDUCTION)->set_base(15);*/ - SET_RPC_REMOTE("csend_request_rank_increase"); SET_RPC_REMOTE("csend_request_rank_decrease"); @@ -4688,6 +4677,8 @@ void Entity::_notification(int p_what) { if (node != NULL) { _character_skeleton = Object::cast_to(node); + + _character_skeleton->set_gender(_c_gender); } else { _character_skeleton = NULL; } diff --git a/entities/entity.h b/entities/entity.h index e04fff8..56799fd 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -207,11 +207,11 @@ public: String getc_entity_name(); void setc_entity_name(String value); - int gets_gender(); - void sets_gender(int value); + EntityEnums::EntityGender gets_gender(); + void sets_gender(EntityEnums::EntityGender value); - int getc_gender(); - void setc_gender(int value); + EntityEnums::EntityGender getc_gender(); + void setc_gender(EntityEnums::EntityGender value); int gets_level(); void sets_level(int value); @@ -803,8 +803,8 @@ private: int _s_type; int _c_type; - int _s_gender; - int _c_gender; + EntityEnums::EntityGender _s_gender; + EntityEnums::EntityGender _c_gender; int _s_level; int _c_level; diff --git a/entity_enums.cpp b/entity_enums.cpp index e0b9635..632c374 100644 --- a/entity_enums.cpp +++ b/entity_enums.cpp @@ -11,6 +11,7 @@ const String EntityEnums::BINDING_STRING_AI_STATES = "Off,Rest,Patrol,Follow Pat const String EntityEnums::BINDING_STRING_ENTITY_IMMUNITY_FLAGS = "Stun,Root,Freeze,Silence,Disorient,Fear,Burning,Cold,Pacify,Magic,Poison,Physical,Curse,Bleed,Melee,Holy,Shadow,Nature,Fire,Frost,Lightning,Chaos,Slow,Crit,AOE,Damage,Fall Damage,Projectile,Debuff,Attacks"; const String EntityEnums::BINDING_STRING_ENTITY_INTERACTION_TYPE = "Normal,Speak,Loot,Use,None"; const String EntityEnums::BINDING_STRING_ENTITY_PLAYSTYLE_TYPE = "Melee,Spell,Hybrid,None"; +const String EntityEnums::BINDING_STRING_ENTITY_GENDER = "Male,Female"; const int EntityEnums::PLAYER_RESOURCE_TYPES_RAGE = 0; const int EntityEnums::PLAYER_RESOURCE_TYPES_MANA = 1; @@ -171,6 +172,10 @@ void EntityEnums::_bind_methods() { BIND_ENUM_CONSTANT(ENTITY_CLASS_PLAYSTYLE_TYPE_HYBRID); BIND_ENUM_CONSTANT(ENTITY_CLASS_PLAYSTYLE_TYPE_NONE); + BIND_ENUM_CONSTANT(GENDER_MALE); + BIND_ENUM_CONSTANT(GENDER_FEMALE); + + BIND_CONSTANT(GENDER_COUNT); BIND_CONSTANT(MAX_LEVEL); BIND_CONSTANT(BASE_XP); } diff --git a/entity_enums.h b/entity_enums.h index f41fd28..dee7aa5 100644 --- a/entity_enums.h +++ b/entity_enums.h @@ -19,6 +19,7 @@ public: static const String BINDING_STRING_ENTITY_IMMUNITY_FLAGS; static const String BINDING_STRING_ENTITY_INTERACTION_TYPE; static const String BINDING_STRING_ENTITY_PLAYSTYLE_TYPE; + static const String BINDING_STRING_ENTITY_GENDER; static const int PLAYER_RESOURCE_TYPES_RAGE; static const int PLAYER_RESOURCE_TYPES_MANA; @@ -221,7 +222,13 @@ public: ENTITY_CLASS_PLAYSTYLE_TYPE_NONE, }; + enum EntityGender { + GENDER_MALE = 0, + GENDER_FEMALE = 1, + }; + enum { + GENDER_COUNT = 2, MAX_LEVEL = 50, BASE_XP = 50, }; @@ -242,5 +249,6 @@ VARIANT_ENUM_CAST(EntityEnums::AIStates); VARIANT_ENUM_CAST(EntityEnums::EntityImmunityFlags); VARIANT_ENUM_CAST(EntityEnums::EntityInteractionType); VARIANT_ENUM_CAST(EntityEnums::EntityClassPlaystyleType); +VARIANT_ENUM_CAST(EntityEnums::EntityGender); #endif diff --git a/skeleton/character_skeleton.cpp b/skeleton/character_skeleton.cpp index 05a5c73..5d0b6fb 100644 --- a/skeleton/character_skeleton.cpp +++ b/skeleton/character_skeleton.cpp @@ -15,13 +15,25 @@ int CharacterSkeleton::get_item_visual_count() { void CharacterSkeleton::clear_item_visuals() { } +EntityEnums::EntityGender CharacterSkeleton::get_gender() { + return _gender; +} +void CharacterSkeleton::set_gender(EntityEnums::EntityGender value) { + _gender = value; +} + CharacterSkeleton::CharacterSkeleton() { + _gender = EntityEnums::GENDER_MALE; } CharacterSkeleton::~CharacterSkeleton() { } void CharacterSkeleton::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_gender"), &CharacterSkeleton::get_gender); + ClassDB::bind_method(D_METHOD("set_gender", "value"), &CharacterSkeleton::set_gender); + ADD_PROPERTY(PropertyInfo(Variant::INT, "gender", PROPERTY_HINT_ENUM, EntityEnums::BINDING_STRING_ENTITY_GENDER), "set_gender", "get_gender"); + ClassDB::bind_method(D_METHOD("add_item_visual", "vis"), &CharacterSkeleton::add_item_visual); ClassDB::bind_method(D_METHOD("remove_item_visual", "vis"), &CharacterSkeleton::remove_item_visual); ClassDB::bind_method(D_METHOD("remove_item_visual_index", "index"), &CharacterSkeleton::remove_item_visual_index); diff --git a/skeleton/character_skeleton.h b/skeleton/character_skeleton.h index 910dd63..c15680c 100644 --- a/skeleton/character_skeleton.h +++ b/skeleton/character_skeleton.h @@ -31,13 +31,17 @@ public: virtual int get_item_visual_count(); virtual void clear_item_visuals(); + EntityEnums::EntityGender get_gender(); + void set_gender(EntityEnums::EntityGender value); + CharacterSkeleton(); ~CharacterSkeleton(); protected: static void _bind_methods(); -//private: +private: + EntityEnums::EntityGender _gender; };