2019-05-06 18:07:07 +02:00
|
|
|
#include "item_instance.h"
|
2019-04-20 14:02:55 +02:00
|
|
|
|
|
|
|
#if ENTITY_MEM_TOOLS
|
2019-05-06 18:07:07 +02:00
|
|
|
int ItemInstance::allocs = 0;
|
2019-04-20 14:02:55 +02:00
|
|
|
#endif
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
int ItemInstance::get_id() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _id;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_id(int value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_id = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
String ItemInstance::get_name_key() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _name_key;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_name_key(String value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_name_key = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemEnums::ItemType ItemInstance::get_item_type() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _item_type;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_type(ItemEnums::ItemType value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_item_type = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemEnums::ItemSubtype ItemInstance::get_item_sub_type() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _item_sub_type;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_sub_type(ItemEnums::ItemSubtype value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_item_sub_type = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemEnums::ItemSubSubtype ItemInstance::get_item_sub_sub_type() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _item_sub_sub_type;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_sub_sub_type(ItemEnums::ItemSubSubtype value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_item_sub_sub_type = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemEnums::ItemRarity ItemInstance::get_rarity() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _rarity;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_rarity(ItemEnums::ItemRarity value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_rarity = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
int ItemInstance::get_spell_id() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _spell_id;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_spell_id(int value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_spell_id = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_scale_x() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _scale_x;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_scale_x(float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_scale_x = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_scale_y() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _scale_y;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_scale_y(float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_scale_y = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_scale_z() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _scale_z;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_scale_z(float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_scale_z = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
Ref<Texture> ItemInstance::get_icon() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _icon;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_icon(Ref<Texture> value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_icon = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
int ItemInstance::get_animator_weapon_type() {
|
2019-04-20 14:02:55 +02:00
|
|
|
if (_item_sub_type == ItemEnums::ITEM_SUB_TYPE_SWORD) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (_item_sub_type == ItemEnums::ITEM_SUB_TYPE_BOW) {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
if (_item_sub_type == ItemEnums::ITEM_SUB_TYPE_AXE) {
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
Ref<ItemStatModifier> ItemInstance::get_item_stat_modifier(int index) {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifiers[index];
|
|
|
|
}
|
|
|
|
/*
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_stat_modifier(int index, ItemStatModifier modifier) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifiers[index] = modifier;
|
|
|
|
}*/
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
int ItemInstance::get_item_stat_modifier_count() {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifier_count;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_stat_modifier_count(int value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifier_count = value;
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
Stat::StatId ItemInstance::get_item_stat_id(int index) {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifiers[index]->get_stat_id();
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_stat_id(int index, Stat::StatId value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifiers[index]->set_stat_id(value);
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_item_base_mod(int index) {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifiers[index]->get_base_mod();
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_base_mod(int index, float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifiers[index]->set_base_mod(value);
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_item_bonus_mod(int index) {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifiers[index]->get_bonus_mod();
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_item_bonus_mod(int index, float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifiers[index]->set_bonus_mod(value);
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
float ItemInstance::get_percent_mod(int index) {
|
2019-04-20 14:02:55 +02:00
|
|
|
return _modifiers[index]->get_percent_mod();
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::set_percent_mod(int index, float value) {
|
2019-04-20 14:02:55 +02:00
|
|
|
_modifiers[index]->set_percent_mod(value);
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemInstance::ItemInstance() {
|
2019-04-20 14:02:55 +02:00
|
|
|
_id = 0;
|
|
|
|
_name_key = "";
|
|
|
|
_item_type = ItemEnums::ITEM_TYPE_NONE;
|
|
|
|
_item_sub_type = ItemEnums::ITEM_SUB_TYPE_NONE;
|
|
|
|
_item_sub_sub_type = ItemEnums::ITEM_SUB_SUB_TYPE_NONE;
|
|
|
|
_rarity = ItemEnums::ITEM_RARITY_UNCOMMON;
|
|
|
|
_spell_id = 0;
|
|
|
|
_scale_x = 0;
|
|
|
|
_scale_y = 0;
|
|
|
|
_scale_z = 0;
|
|
|
|
_modifier_count = 0;
|
|
|
|
|
|
|
|
for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) {
|
|
|
|
_modifiers[i] = Ref<ItemStatModifier>(memnew(ItemStatModifier()));
|
|
|
|
}
|
|
|
|
|
|
|
|
#if ENTITY_MEM_TOOLS
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemInstance::allocs++;
|
|
|
|
print_error("ItemInstance alloc " + String::num(ItemInstance::allocs));
|
2019-04-20 14:02:55 +02:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemInstance::~ItemInstance() {
|
2019-04-20 14:02:55 +02:00
|
|
|
#if ENTITY_MEM_TOOLS
|
2019-05-06 18:07:07 +02:00
|
|
|
ItemInstance::allocs--;
|
|
|
|
print_error("ItemInstance dealloc " + String::num(ItemInstance::allocs));
|
2019-04-20 14:02:55 +02:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::_validate_property(PropertyInfo &property) const {
|
2019-04-20 14:02:55 +02:00
|
|
|
String prop = property.name;
|
|
|
|
if (prop.begins_with("Modifiers_")) {
|
|
|
|
int frame = prop.get_slicec('/', 0).get_slicec('_', 1).to_int();
|
|
|
|
if (frame >= _modifier_count) {
|
|
|
|
property.usage = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
void ItemInstance::_bind_methods() {
|
2019-04-20 14:02:55 +02:00
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_id"), &ItemInstance::get_id);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_id", "count"), &ItemInstance::set_id);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_name_key"), &ItemInstance::get_name_key);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_name_key", "count"), &ItemInstance::set_name_key);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "name_key"), "set_name_key", "get_name_key");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_type"), &ItemInstance::get_item_type);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_type", "count"), &ItemInstance::set_item_type);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_type", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ITEM_TYPE), "set_item_type", "get_item_type");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_sub_type"), &ItemInstance::get_item_sub_type);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_sub_type", "count"), &ItemInstance::set_item_sub_type);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_sub_type", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ITEM_SUB_TYPE), "set_item_sub_type", "get_item_sub_type");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_sub_sub_type"), &ItemInstance::get_item_sub_sub_type);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_sub_sub_type", "count"), &ItemInstance::set_item_sub_sub_type);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_sub_sub_type", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_ITEM_SUB_SUB_TYPE), "set_item_sub_sub_type", "get_item_sub_sub_type");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_rarity"), &ItemInstance::get_rarity);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_rarity", "count"), &ItemInstance::set_rarity);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "rarity", PROPERTY_HINT_ENUM, ItemEnums::BINDING_STRING_RARITY), "set_rarity", "get_rarity");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_spell_id"), &ItemInstance::get_spell_id);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_spell_id", "count"), &ItemInstance::set_spell_id);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "spell_id"), "set_spell_id", "get_spell_id");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_scale_x"), &ItemInstance::get_scale_x);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_scale_x", "count"), &ItemInstance::set_scale_x);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "scale_x"), "set_scale_x", "get_scale_x");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_scale_y"), &ItemInstance::get_scale_y);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_scale_y", "count"), &ItemInstance::set_scale_y);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "scale_y"), "set_scale_y", "get_scale_y");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_scale_z"), &ItemInstance::get_scale_z);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_scale_z", "count"), &ItemInstance::set_scale_z);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "scale_z"), "set_scale_z", "get_scale_z");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_icon"), &ItemInstance::get_icon);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_icon", "count"), &ItemInstance::set_icon);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_icon", "get_icon");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_animator_weapon_type"), &ItemInstance::get_animator_weapon_type);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
//ClassDB::bind_method(D_METHOD("get_item_stat_modifier", "index"), &ItemInstance::get_item_stat_modifier);
|
|
|
|
//ClassDB::bind_method(D_METHOD("set_item_stat_modifier", "index", "value"), &ItemInstance::set_item_stat_modifier);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
|
|
|
//StatMods Property binds
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_stat_modifier_count"), &ItemInstance::get_item_stat_modifier_count);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_stat_modifier_count", "count"), &ItemInstance::set_item_stat_modifier_count);
|
2019-04-20 14:02:55 +02:00
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "set_item_stat_modifier_count", PROPERTY_HINT_RANGE, "0," + itos(MAX_ITEM_STAT_MOD), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_item_stat_modifier_count", "get_item_stat_modifier_count");
|
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_stat_id", "index"), &ItemInstance::get_item_stat_id);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_stat_id", "index", "value"), &ItemInstance::set_item_stat_id);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_base_mod", "index"), &ItemInstance::get_item_base_mod);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_base_mod", "index", "value"), &ItemInstance::set_item_base_mod);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_item_bonus_mod", "index"), &ItemInstance::get_item_bonus_mod);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_item_bonus_mod", "index", "value"), &ItemInstance::set_item_bonus_mod);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
2019-05-06 18:07:07 +02:00
|
|
|
ClassDB::bind_method(D_METHOD("get_percent_mod", "index"), &ItemInstance::get_percent_mod);
|
|
|
|
ClassDB::bind_method(D_METHOD("set_percent_mod", "index", "value"), &ItemInstance::set_percent_mod);
|
2019-04-20 14:02:55 +02:00
|
|
|
|
|
|
|
for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) {
|
|
|
|
ADD_PROPERTYI(PropertyInfo(Variant::INT, "Modifiers_" + itos(i) + "/stat_id", PROPERTY_HINT_ENUM, Stat::STAT_BINDING_STRING, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_stat_id", "get_item_stat_id", i);
|
|
|
|
|
|
|
|
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/item_base_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_base_mod", "get_item_base_mod", i);
|
|
|
|
|
|
|
|
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/item_bonus_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_bonus_mod", "get_item_bonus_mod", i);
|
|
|
|
|
|
|
|
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/percent_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_percent_mod", "get_percent_mod", i);
|
|
|
|
}
|
|
|
|
}
|