diff options
-rw-r--r-- | src/enums/being/attributes.h | 4 | ||||
-rw-r--r-- | src/gui/windows/inventorywindow.cpp | 32 | ||||
-rw-r--r-- | src/net/eathena/inventoryhandler.cpp | 8 |
3 files changed, 34 insertions, 10 deletions
diff --git a/src/enums/being/attributes.h b/src/enums/being/attributes.h index 91b809faf..45ac46d27 100644 --- a/src/enums/being/attributes.h +++ b/src/enums/being/attributes.h @@ -61,7 +61,9 @@ namespace Attributes MDEF, MATK, DEF, - ATK + ATK, + CART_TOTAL_WEIGHT = 1000, + CART_MAX_WEIGHT }; } // namespace Attributes diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index 7ea15ebc9..712ba7981 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -264,12 +264,18 @@ InventoryWindow::InventoryWindow(Inventory *const inventory) : // TRANSLATORS: storage button mInvCloseButton = new Button(this, _("Close"), "close", this); - mSlotsBarCell = &place(0, 0, mSlotsBar, 6); + mWeightBar = new ProgressBar(this, 0.0F, 100, 0, Theme::PROG_WEIGHT, + "weightprogressbar.xml", "weightprogressbar_fill.xml"); + mWeightBar->setColor(getThemeColor(Theme::WEIGHT_BAR), + getThemeColor(Theme::WEIGHT_BAR_OUTLINE)); + + mSlotsBarCell = &place(3, 0, mSlotsBar, 3); mSortDropDownCell = &place(6, 0, mSortDropDown, 1); mFilterCell = &place(0, 1, mFilter, 7).setPadding(3); mNameFilterCell = &place(6, 1, mNameFilter, 1); + place(0, 0, mWeightBar, 3); place(0, 2, invenScroll, 7, 4); place(0, 6, mStoreButton); place(1, 6, mRetrieveButton); @@ -755,11 +761,17 @@ void InventoryWindow::close() void InventoryWindow::updateWeight() { - if (!isMainInventory() || !mWeightBar) + if (!mInventory || !mWeightBar) + return; + const InventoryType::Type type = mInventory->getType(); + if (type != InventoryType::INVENTORY && type != InventoryType::CART) return; - const int total = PlayerInfo::getAttribute(Attributes::TOTAL_WEIGHT); - const int max = PlayerInfo::getAttribute(Attributes::MAX_WEIGHT); + const bool isInv = type != InventoryType::INVENTORY; + const int total = PlayerInfo::getAttribute(isInv + ? Attributes::TOTAL_WEIGHT : Attributes::CART_TOTAL_WEIGHT); + const int max = PlayerInfo::getAttribute(isInv + ? Attributes::MAX_WEIGHT : Attributes::CART_MAX_WEIGHT); if (max <= 0) return; @@ -767,8 +779,9 @@ void InventoryWindow::updateWeight() // Adjust progress bar mWeightBar->setProgress(static_cast<float>(total) / static_cast<float>(max)); - mWeightBar->setText(strprintf("%s/%s", Units::formatWeight(total).c_str(), - Units::formatWeight(max).c_str())); + mWeightBar->setText(strprintf("%s/%s", + Units::formatWeight(total).c_str(), + Units::formatWeight(max).c_str())); } void InventoryWindow::slotsChanged(Inventory *const inventory) @@ -905,6 +918,11 @@ void InventoryWindow::attributeChanged(const int id, const int oldVal A_UNUSED, const int newVal A_UNUSED) { - if (id == Attributes::TOTAL_WEIGHT || id == Attributes::MAX_WEIGHT) + if (id == Attributes::TOTAL_WEIGHT + || id == Attributes::MAX_WEIGHT + || id == Attributes::CART_TOTAL_WEIGHT + || id == Attributes::CART_MAX_WEIGHT) + { updateWeight(); + } } diff --git a/src/net/eathena/inventoryhandler.cpp b/src/net/eathena/inventoryhandler.cpp index 316617be1..ff0e8eaaf 100644 --- a/src/net/eathena/inventoryhandler.cpp +++ b/src/net/eathena/inventoryhandler.cpp @@ -26,6 +26,8 @@ #include "enums/equipslot.h" +#include "enums/being/attributes.h" + #include "being/localplayer.h" #include "listeners/arrowslistener.h" @@ -764,8 +766,10 @@ void InventoryHandler::processCartInfo(Net::MessageIn &msg) { msg.readInt16("cart items used"); const int size = msg.readInt16("max cart items"); - msg.readInt32("cart weight"); - msg.readInt32("max cart weight"); + PlayerInfo::setAttribute(Attributes::CART_TOTAL_WEIGHT, + msg.readInt32("cart weight")); + PlayerInfo::setAttribute(Attributes::CART_MAX_WEIGHT, + msg.readInt32("max cart weight")); if (mCartItems.empty()) return; |