diff --git a/entities/entity.cpp b/entities/entity.cpp index 56ffcc2..2a46384 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -703,6 +703,17 @@ void Entity::_from_dict(const Dictionary &dict) { } else { _s_bag->from_dict(bagd); } + /* + if (!_c_bag.is_valid()) { + Ref bag; + bag.instance(); + + bag->from_dict(bagd); + + setc_bag(bag); + } else { + _c_bag->from_dict(bagd); + }*/ } if (DataManager::get_instance() != NULL) { @@ -1310,31 +1321,37 @@ void Entity::con_equip_fail(ItemEnums::EquipSlots equip_slot, Ref emit_signal("con_equip_fail", this, equip_slot, item, old_item, bag_slot); } -void Entity::crequest_equip(int equip_slot, int bag_slot) { +void Entity::crequest_equip(ItemEnums::EquipSlots equip_slot, int bag_slot) { sequip(equip_slot, bag_slot); } -void Entity::sequip(int equip_slot, int bag_slot) { +void Entity::sequip(ItemEnums::EquipSlots equip_slot, int bag_slot) { call("_sequip", equip_slot, bag_slot); } -void Entity::_sequip(int equip_slot, int bag_slot) { -} +void Entity::_sequip(ItemEnums::EquipSlots equip_slot, int bag_slot) { -void Entity::sequip_succeeded(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { - son_equip_success(equip_slot, item, old_item, bag_slot); - SEND_RPC(rpc("cequip_succeeded", equip_slot, item, old_item, bag_slot), cequip_succeeded(equip_slot, item, old_item, bag_slot)); } -void Entity::sequip_failed(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { - son_equip_fail(equip_slot, item, old_item, bag_slot); +void Entity::cequip_success(ItemEnums::EquipSlots equip_slot, int bag_slot) { + ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + ERR_FAIL_COND(!_c_bag.is_valid()); - SEND_RPC(rpc("cequip_failed", equip_slot, item, old_item, bag_slot), cequip_failed(equip_slot, item, old_item, bag_slot)); -} + Ref bag_item = _c_bag->get_item(bag_slot); + Ref equipped_item = getc_equip_slot(equip_slot); -void Entity::cequip_succeeded(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { - con_equip_success(equip_slot, item, old_item, bag_slot); + //Not Yet + //setc_equip_slot(equip_slot, bag_item); + //_c_bag->set_item(bag_slot, old_item); + + con_equip_success(equip_slot, equipped_item, bag_item, bag_slot); } -void Entity::cequip_failed(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot) { - con_equip_fail(equip_slot, item, old_item, bag_slot); +void Entity::cequip_fail(ItemEnums::EquipSlots equip_slot, int bag_slot) { + ERR_FAIL_INDEX(equip_slot, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + ERR_FAIL_COND(!_c_bag.is_valid()); + + Ref bag_item = _c_bag->get_item(bag_slot); + Ref equipped_item = getc_equip_slot(equip_slot); + + con_equip_success(equip_slot, equipped_item, bag_item, bag_slot); } Ref Entity::gets_equip_slot(int index) { @@ -1342,12 +1359,22 @@ Ref Entity::gets_equip_slot(int index) { return _s_equipment[index]; } +void Entity::sets_equip_slot(int index, Ref item) { + ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + + _s_equipment[index] = item; +} Ref Entity::getc_equip_slot(int index) { ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref()); return _c_equipment[index]; } +void Entity::setc_equip_slot(int index, Ref item) { + ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX); + + _c_equipment[index] = item; +} void Entity::sapply_item_stats(Ref item) { call("_sapply_item_stats", item); @@ -4733,10 +4760,8 @@ void Entity::_bind_methods() { ClassDB::bind_method(D_METHOD("sequip", "equip_slot", "bag_slot"), &Entity::sequip); ClassDB::bind_method(D_METHOD("_sequip", "equip_slot", "bag_slot"), &Entity::_sequip); - ClassDB::bind_method(D_METHOD("sequip_succeeded", "equip_slot", "item", "old_item", "bag_slot"), &Entity::sequip_succeeded); - ClassDB::bind_method(D_METHOD("sequip_failed", "equip_slot", "item", "old_item", "bag_slot"), &Entity::sequip_failed); - ClassDB::bind_method(D_METHOD("cequip_succeeded", "equip_slot", "item", "old_item", "bag_slot"), &Entity::cequip_succeeded); - ClassDB::bind_method(D_METHOD("cequip_failed", "equip_slot", "item", "old_item", "bag_slot"), &Entity::cequip_failed); + ClassDB::bind_method(D_METHOD("cequip_success", "equip_slot", "bag_slot"), &Entity::cequip_success); + ClassDB::bind_method(D_METHOD("cequip_fail", "equip_slot", "bag_slot"), &Entity::cequip_fail); ClassDB::bind_method(D_METHOD("gets_equip_slot", "index"), &Entity::gets_equip_slot); ClassDB::bind_method(D_METHOD("getc_equip_slot", "index"), &Entity::getc_equip_slot); diff --git a/entities/entity.h b/entities/entity.h index 84f78b8..4b3447e 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -248,18 +248,18 @@ public: void con_equip_success(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); void con_equip_fail(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void crequest_equip(int equip_slot, int bag_slot); - void sequip(int equip_slot, int bag_slot); - void _sequip(int equip_slot, int bag_slot); + void crequest_equip(ItemEnums::EquipSlots equip_slot, int bag_slot); + void sequip(ItemEnums::EquipSlots equip_slot, int bag_slot); + void _sequip(ItemEnums::EquipSlots equip_slot, int bag_slot); - void sequip_succeeded(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void sequip_failed(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - - void cequip_succeeded(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); - void cequip_failed(ItemEnums::EquipSlots equip_slot, Ref item, Ref old_item, int bag_slot); + void cequip_success(ItemEnums::EquipSlots equip_slot, int bag_slot); + void cequip_fail(ItemEnums::EquipSlots equip_slot, int bag_slot); Ref gets_equip_slot(int index); + void sets_equip_slot(int index, Ref item); + Ref getc_equip_slot(int index); + void setc_equip_slot(int index, Ref item); void sapply_item_stats(Ref item); void sdeapply_item_stats(Ref item); diff --git a/inventory/bag.cpp b/inventory/bag.cpp index ea8fbfd..cd444e7 100644 --- a/inventory/bag.cpp +++ b/inventory/bag.cpp @@ -75,6 +75,16 @@ bool Bag::add_item(Ref item) { return true; } +void Bag::set_item(int index, Ref item) { + if (has_method("_set_item")) { + call("_set_item", index, item); + } + + ERR_FAIL_INDEX(index, _items.size()); + + _items.set(index, item); +} + Ref Bag::get_item(const int index) { if (has_method("_get_item")) { return call("_get_item", index); @@ -261,6 +271,7 @@ Bag::~Bag() { void Bag::_bind_methods() { BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "could_add"), "_add_item", PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); + BIND_VMETHOD(MethodInfo("_set_item", PropertyInfo(Variant::INT, "index") , PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_get_item", PropertyInfo(Variant::INT, "index"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_remove_item", PropertyInfo(Variant::INT, "index"))); BIND_VMETHOD(MethodInfo("_swap_items", PropertyInfo(Variant::INT, "item1_index"), PropertyInfo(Variant::INT, "item2_index"))); @@ -273,6 +284,7 @@ void Bag::_bind_methods() { BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "overburdened"), "_is_overburdened")); ADD_SIGNAL(MethodInfo("item_added", PropertyInfo(Variant::OBJECT, "bag", PROPERTY_HINT_RESOURCE_TYPE, "Bag"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "slot_id"))); + ADD_SIGNAL(MethodInfo("item_set", PropertyInfo(Variant::OBJECT, "bag", PROPERTY_HINT_RESOURCE_TYPE, "Bag"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "slot_id"))); ADD_SIGNAL(MethodInfo("item_removed", PropertyInfo(Variant::OBJECT, "bag", PROPERTY_HINT_RESOURCE_TYPE, "Bag"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "slot_id"))); ADD_SIGNAL(MethodInfo("item_swapped", PropertyInfo(Variant::OBJECT, "bag", PROPERTY_HINT_RESOURCE_TYPE, "Bag"), PropertyInfo(Variant::INT, "slot_id_1"), PropertyInfo(Variant::INT, "slot_id_2"))); ADD_SIGNAL(MethodInfo("item_count_changed", PropertyInfo(Variant::OBJECT, "bag", PROPERTY_HINT_RESOURCE_TYPE, "Bag"), PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), PropertyInfo(Variant::INT, "slot_id"))); @@ -285,6 +297,7 @@ void Bag::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "allowed_item_types", PROPERTY_HINT_FLAGS, ItemEnums::BINDING_STRING_ITEM_TYPE_FLAGS), "set_allowed_item_types", "get_allowed_item_types"); ClassDB::bind_method(D_METHOD("add_item", "item"), &Bag::add_item); + ClassDB::bind_method(D_METHOD("set_item", "index", "item"), &Bag::set_item); ClassDB::bind_method(D_METHOD("get_item", "index"), &Bag::get_item); ClassDB::bind_method(D_METHOD("remove_item", "index"), &Bag::remove_item); ClassDB::bind_method(D_METHOD("swap_items", "item1_index", "item2_index"), &Bag::swap_items); diff --git a/inventory/bag.h b/inventory/bag.h index 214d5e0..670457d 100644 --- a/inventory/bag.h +++ b/inventory/bag.h @@ -17,6 +17,7 @@ public: void set_allowed_item_types(const int value); bool add_item(Ref item); + void set_item(int index, Ref item); Ref get_item(const int index); Ref remove_item(const int index); void swap_items(const int item1_index, const int item2_index);