summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/equipmentwindow.cpp19
-rw-r--r--src/gui/equipmentwindow.h8
-rw-r--r--src/net/inventoryhandler.h23
-rw-r--r--src/net/manaserv/inventoryhandler.cpp11
-rw-r--r--src/net/manaserv/inventoryhandler.h6
5 files changed, 67 insertions, 0 deletions
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<unsigned int, Slot> Slots;
Slots mSlots;
std::vector<Position> mBoxesPositions;
+ std::vector<std::string> 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;
};