From a0973bc302f2972c4c70d973090c4d29ea2f7c6d Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Sun, 13 Nov 2011 00:33:01 +0100 Subject: Added background support to the equipment boxes. The background images are auto-centered. Also, for Manaserv, a new background parameter has been added in the box node of the equip.xml file to specify the background image. Note that the filename is relative to the gui theme folder. Reviewed-by: Thorbjorn Lindeijer Resolves: TMW-Mantis #769. --- data/graphics/gui/equip-box-ammo.png | Bin 0 -> 2083 bytes data/graphics/gui/equip-box-chest.png | Bin 0 -> 1758 bytes data/graphics/gui/equip-box-feet.png | Bin 0 -> 1496 bytes data/graphics/gui/equip-box-hands.png | Bin 0 -> 1912 bytes data/graphics/gui/equip-box-head.png | Bin 0 -> 1647 bytes data/graphics/gui/equip-box-legs.png | Bin 0 -> 1765 bytes data/graphics/gui/equip-box-neck.png | Bin 0 -> 1738 bytes data/graphics/gui/equip-box-ring.png | Bin 0 -> 1581 bytes data/graphics/gui/equip-box-shield.png | Bin 0 -> 1762 bytes data/graphics/gui/equip-box-weapon.png | Bin 0 -> 2094 bytes src/gui/equipmentwindow.cpp | 19 +++++++++++++++++++ src/gui/equipmentwindow.h | 8 ++++++++ src/net/inventoryhandler.h | 23 +++++++++++++++++++++++ src/net/manaserv/inventoryhandler.cpp | 11 +++++++++++ src/net/manaserv/inventoryhandler.h | 6 ++++++ 15 files changed, 67 insertions(+) create mode 100644 data/graphics/gui/equip-box-ammo.png create mode 100644 data/graphics/gui/equip-box-chest.png create mode 100644 data/graphics/gui/equip-box-feet.png create mode 100644 data/graphics/gui/equip-box-hands.png create mode 100644 data/graphics/gui/equip-box-head.png create mode 100644 data/graphics/gui/equip-box-legs.png create mode 100644 data/graphics/gui/equip-box-neck.png create mode 100644 data/graphics/gui/equip-box-ring.png create mode 100644 data/graphics/gui/equip-box-shield.png create mode 100644 data/graphics/gui/equip-box-weapon.png diff --git a/data/graphics/gui/equip-box-ammo.png b/data/graphics/gui/equip-box-ammo.png new file mode 100644 index 00000000..d9977b0b Binary files /dev/null and b/data/graphics/gui/equip-box-ammo.png differ diff --git a/data/graphics/gui/equip-box-chest.png b/data/graphics/gui/equip-box-chest.png new file mode 100644 index 00000000..03641b85 Binary files /dev/null and b/data/graphics/gui/equip-box-chest.png differ diff --git a/data/graphics/gui/equip-box-feet.png b/data/graphics/gui/equip-box-feet.png new file mode 100644 index 00000000..31e35fad Binary files /dev/null and b/data/graphics/gui/equip-box-feet.png differ diff --git a/data/graphics/gui/equip-box-hands.png b/data/graphics/gui/equip-box-hands.png new file mode 100644 index 00000000..ac299f8d Binary files /dev/null and b/data/graphics/gui/equip-box-hands.png differ diff --git a/data/graphics/gui/equip-box-head.png b/data/graphics/gui/equip-box-head.png new file mode 100644 index 00000000..8bed0940 Binary files /dev/null and b/data/graphics/gui/equip-box-head.png differ diff --git a/data/graphics/gui/equip-box-legs.png b/data/graphics/gui/equip-box-legs.png new file mode 100644 index 00000000..19b1ebff Binary files /dev/null and b/data/graphics/gui/equip-box-legs.png differ diff --git a/data/graphics/gui/equip-box-neck.png b/data/graphics/gui/equip-box-neck.png new file mode 100644 index 00000000..809861bf Binary files /dev/null and b/data/graphics/gui/equip-box-neck.png differ diff --git a/data/graphics/gui/equip-box-ring.png b/data/graphics/gui/equip-box-ring.png new file mode 100644 index 00000000..f5e79346 Binary files /dev/null and b/data/graphics/gui/equip-box-ring.png differ diff --git a/data/graphics/gui/equip-box-shield.png b/data/graphics/gui/equip-box-shield.png new file mode 100644 index 00000000..bedb28f3 Binary files /dev/null and b/data/graphics/gui/equip-box-shield.png differ diff --git a/data/graphics/gui/equip-box-weapon.png b/data/graphics/gui/equip-box-weapon.png new file mode 100644 index 00000000..c01e077c Binary files /dev/null and b/data/graphics/gui/equip-box-weapon.png differ diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp index 209ecdb0..4e8eae4d 100644 --- a/src/gui/equipmentwindow.cpp +++ b/src/gui/equipmentwindow.cpp @@ -95,6 +95,15 @@ void EquipmentWindow::loadEquipBoxes() Position boxPosition = Net::getInventoryHandler()->getBoxPosition(i); mEquipBox[i].posX = boxPosition.x + getPadding(); mEquipBox[i].posY = boxPosition.y + getTitleBarHeight(); + + const std::string &backgroundFile = + Net::getInventoryHandler()->getBoxBackground(i); + + if (!backgroundFile.empty()) + { + mEquipBox[i].backgroundImage = + Theme::instance()->getImageFromTheme(backgroundFile); + } } } @@ -117,6 +126,16 @@ void EquipmentWindow::draw(gcn::Graphics *graphics) for (int i = 0; i < mBoxesNumber; i++) { + // When there is a background image, draw it centered in the box: + if (mEquipBox[i].backgroundImage) + { + int posX = mEquipBox[i].posX + + (BOX_WIDTH - mEquipBox[i].backgroundImage->getWidth()) / 2; + int posY = mEquipBox[i].posY + + (BOX_HEIGHT - mEquipBox[i].backgroundImage->getHeight()) / 2; + g->drawImage(mEquipBox[i].backgroundImage, posX, posY); + } + if (i == mSelected) { const gcn::Color color = Theme::getThemeColor(Theme::HIGHLIGHT); diff --git a/src/gui/equipmentwindow.h b/src/gui/equipmentwindow.h index 57a13d40..408dd8e7 100644 --- a/src/gui/equipmentwindow.h +++ b/src/gui/equipmentwindow.h @@ -23,6 +23,7 @@ #define EQUIPMENTWINDOW_H #include "equipment.h" +#include "resources/image.h" #include "gui/widgets/window.h" @@ -70,8 +71,15 @@ class EquipmentWindow : public Window, public gcn::ActionListener */ struct EquipBox { + EquipBox() : + posX(0), + posY(0), + backgroundImage(0) + {} + int posX; int posY; + Image* backgroundImage; }; EquipBox *mEquipBox; /**< Equipment Boxes. */ diff --git a/src/net/inventoryhandler.h b/src/net/inventoryhandler.h index 83ef91a7..24e6dd43 100644 --- a/src/net/inventoryhandler.h +++ b/src/net/inventoryhandler.h @@ -45,6 +45,22 @@ const int fallBackBoxesPosition[][2] = { { 129, 78 } // EQUIP_PROJECTILE_SLOT }; +const std::string fallBackBoxesBackground[] = { + "equip-box-chest.png", + "equip-box-hands.png", + "equip-box-head.png", + "equip-box-legs.png", + "equip-box-feet.png", + "equip-box-ring.png", + "equip-box-ring.png", + "equip-box-neck.png", + "equip-box-weapon.png", + "equip-box-shield.png", + "equip-box-ammo.png" +}; + +static const std::string empty = std::string(); + class InventoryHandler { public: @@ -70,6 +86,13 @@ class InventoryHandler fallBackBoxesPosition[slotIndex][1]); return Position(0,0); } + + virtual const std::string& getBoxBackground(unsigned int slotIndex) const + { + if (slotIndex < sizeof(fallBackBoxesBackground)) + return fallBackBoxesBackground[slotIndex]; + return empty; // The empty string + } }; } // namespace Net diff --git a/src/net/manaserv/inventoryhandler.cpp b/src/net/manaserv/inventoryhandler.cpp index 67c79a17..7dd971ab 100644 --- a/src/net/manaserv/inventoryhandler.cpp +++ b/src/net/manaserv/inventoryhandler.cpp @@ -271,6 +271,10 @@ void EquipBackend::readBoxNode(xmlNodePtr slotNode) int y = XML::getProperty(boxNode, "y" , 0); mBoxesPositions.push_back(Position(x, y)); + + std::string backgroundFile = + XML::getProperty(boxNode, "background" , std::string()); + mBoxesBackgroundFile.push_back(backgroundFile); } } @@ -303,6 +307,13 @@ Position EquipBackend::getBoxPosition(unsigned int slotIndex) const return Position(0, 0); } +const std::string& EquipBackend::getBoxBackground(unsigned int slotIndex) const +{ + if (slotIndex < mBoxesBackgroundFile.size()) + return mBoxesBackgroundFile.at(slotIndex); + return Net::empty; +} + InventoryHandler::InventoryHandler() { static const Uint16 _messages[] = { diff --git a/src/net/manaserv/inventoryhandler.h b/src/net/manaserv/inventoryhandler.h index 446105ee..c9192525 100644 --- a/src/net/manaserv/inventoryhandler.h +++ b/src/net/manaserv/inventoryhandler.h @@ -63,6 +63,8 @@ class EquipBackend : public Equipment::Backend, public EventListener Position getBoxPosition(unsigned int slotIndex) const; + const std::string& getBoxBackground(unsigned int slotIndex) const; + private: void readEquipFile(); @@ -114,6 +116,7 @@ class EquipBackend : public Equipment::Backend, public EventListener typedef std::map Slots; Slots mSlots; std::vector mBoxesPositions; + std::vector mBoxesBackgroundFile; }; class InventoryHandler : public MessageHandler, Net::InventoryHandler, @@ -142,6 +145,9 @@ class InventoryHandler : public MessageHandler, Net::InventoryHandler, Position getBoxPosition(unsigned int slotIndex) const { return mEquipBackend.getBoxPosition(slotIndex); } + const std::string& getBoxBackground(unsigned int slotIndex) const + { return mEquipBackend.getBoxBackground(slotIndex); } + private: EquipBackend mEquipBackend; }; -- cgit v1.2.3-70-g09d2