From 992d0672f9b143fc0b3996e798dcf9aa7e064a92 Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 29 Nov 2019 10:16:59 +0100 Subject: [PATCH] Fixed sending item count changes to the client. Also added the stack_size_changed signal to ItemInstance. --- data/item_instance.cpp | 3 +++ entities/entity.cpp | 6 +----- inventory/bag.cpp | 12 ++++++++++++ inventory/bag.h | 1 + 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/data/item_instance.cpp b/data/item_instance.cpp index c9abca8..475a56f 100644 --- a/data/item_instance.cpp +++ b/data/item_instance.cpp @@ -41,6 +41,8 @@ int ItemInstance::get_stack_size() { } void ItemInstance::set_stack_size(int value) { _stack_size = value; + + emit_signal("stack_size_changed", Ref(this)); } Dictionary ItemInstance::to_dict() { @@ -100,6 +102,7 @@ ItemInstance::~ItemInstance() { void ItemInstance::_bind_methods() { + ADD_SIGNAL(MethodInfo("stack_size_changed", PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"))); ClassDB::bind_method(D_METHOD("get_item_template"), &ItemInstance::get_item_template); ClassDB::bind_method(D_METHOD("set_item_template", "value"), &ItemInstance::set_item_template); diff --git a/entities/entity.cpp b/entities/entity.cpp index 559018d..da6cb8f 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -4455,11 +4455,7 @@ void Entity::ons_item_count_changed(Ref bag, Ref item, int sl void Entity::cchange_item_count(int slot_id, int new_count) { ERR_FAIL_COND(!_c_bag.is_valid()); - Ref ii = _c_bag->get_item(slot_id); - - ERR_FAIL_COND(!ii.is_valid()); - - ii->set_stack_size(new_count); + _c_bag->set_item_count(slot_id, new_count); } void Entity::ons_overburdened(Ref bag) { diff --git a/inventory/bag.cpp b/inventory/bag.cpp index d0f49d9..e7b3983 100644 --- a/inventory/bag.cpp +++ b/inventory/bag.cpp @@ -157,6 +157,18 @@ void Bag::change_item_equip(int slot_id, Ref item) { emit_signal("change_item_equip", Ref(this), slot_id, item); } +void Bag::set_item_count(int slot_id, int new_count) { + ERR_FAIL_INDEX(slot_id, _items.size()); + + Ref ii = _items.get(slot_id); + + ERR_FAIL_COND(!ii.is_valid()); + + ii->set_stack_size(new_count); + + emit_signal("item_count_changed", Ref(this), ii, slot_id); +} + bool Bag::can_add_item(const Ref item) { if (has_method("_can_add_item")) { return call("_can_add_item", item); diff --git a/inventory/bag.h b/inventory/bag.h index c5082b0..bcb7e92 100644 --- a/inventory/bag.h +++ b/inventory/bag.h @@ -22,6 +22,7 @@ public: Ref remove_item(const int index); void swap_items(const int item1_index, const int item2_index); void change_item_equip(int slot_id, Ref item); + void set_item_count(int slot_id, int new_count); bool can_add_item(Ref item);