summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Makefile.am1
-rw-r--r--src/client.cpp2
-rw-r--r--src/gui/windows/equipmentwindow.cpp109
-rw-r--r--src/gui/windows/equipmentwindow.h4
-rw-r--r--src/resources/equipmentslots.h91
6 files changed, 114 insertions, 94 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 684f6afd4..83860b0a6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -615,6 +615,7 @@ SET(SRCS
resources/effectdescription.h
resources/emoteinfo.h
resources/emotesprite.h
+ resources/equipmentslots.h
resources/db/emotedb.cpp
resources/db/emotedb.h
resources/db/homunculusdb.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index da4e77bf4..7b948ac50 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -79,6 +79,7 @@ dyecmd_SOURCES = gui/cliprect.cpp \
resources/effectdescription.h \
resources/emoteinfo.h \
resources/emotesprite.h \
+ resources/equipmentslots.h \
resources/image.cpp \
resources/image.h \
resources/imagehelper.cpp \
diff --git a/src/client.cpp b/src/client.cpp
index 497717339..690c2b434 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -62,6 +62,7 @@
#include "gui/windows/changepassworddialog.h"
#include "gui/windows/charselectdialog.h"
#include "gui/windows/connectiondialog.h"
+#include "gui/windows/equipmentwindow.h"
#include "gui/windows/logindialog.h"
#include "gui/windows/npcdialog.h"
#include "gui/windows/okdialog.h"
@@ -1262,6 +1263,7 @@ int Client::gameExec()
// ModDB::load();
StatusEffect::load();
Units::loadUnits();
+ EquipmentWindow::prepareSlotNames();
ActorSprite::load();
diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp
index c5933b106..e37d623d6 100644
--- a/src/gui/windows/equipmentwindow.cpp
+++ b/src/gui/windows/equipmentwindow.cpp
@@ -45,6 +45,7 @@
#include "gui/widgets/playerbox.h"
#include "gui/widgets/tabstrip.h"
+#include "resources/equipmentslots.h"
#include "resources/imageset.h"
#include "resources/itemslot.h"
@@ -57,6 +58,7 @@
EquipmentWindow *equipmentWindow = nullptr;
EquipmentWindow *beingEquipmentWindow = nullptr;
static const int BOX_COUNT = 22;
+std::map<std::string, int> EquipmentWindow::mSlotNames;
EquipmentWindow::EquipmentWindow(Equipment *const equipment,
Being *const being,
@@ -644,104 +646,23 @@ void EquipmentWindow::loadSlot(const XmlNodePtr slotNode,
mMaxY = y + mBoxSize;
}
-int EquipmentWindow::parseSlotName(const std::string &name)
+void EquipmentWindow::prepareSlotNames()
{
- int id = -1;
- if (name == "shoes" || name == "boot"
- || name == "boots" || name == "slot4")
- {
- id = 4;
- }
- else if (name == "bottomclothes" || name == "bottom"
- || name == "pants" || name == "slot3")
- {
- id = 3;
- }
- else if (name == "topclothes" || name == "top"
- || name == "torso" || name == "body" || name == "slot0")
- {
- id = 0;
- }
- else if (name == "misc1" || name == "cape" || name == "slot5")
- {
- id = 5;
- }
- else if (name == "misc2" || name == "scarf"
- || name == "scarfs" || name == "slot7")
- {
- id = 7;
- }
- else if (name == "hat" || name == "hats" || name == "slot2")
- {
- id = 2;
- }
- else if (name == "wings" || name == "slot6")
- {
- id = 6;
- }
- else if (name == "glove" || name == "gloves" || name == "slot1")
- {
- id = 1;
- }
- else if (name == "weapon" || name == "weapons" || name == "slot8")
- {
- id = 8;
- }
- else if (name == "shield" || name == "shields" || name == "slot9")
- {
- id = 9;
- }
- else if (name == "amulet" || name == "amulets" || name == "slot11")
- {
- id = 11;
- }
- else if (name == "ring" || name == "rings" || name == "slot12")
+ const int sz = sizeof(equipmentSlots) / sizeof(EquipmentSlotMap);
+ mSlotNames.clear();
+ for (int f = 0; f < sz; f ++)
{
- id = 12;
- }
- else if (name == "arrow" || name == "arrows"
- || name == "ammo" || name == "slot10")
- {
- id = 10;
- }
- else if (name == "slot13")
- {
- id = 13;
- }
- else if (name == "slot14")
- {
- id = 14;
- }
- else if (name == "slot15")
- {
- id = 15;
- }
- else if (name == "slot16")
- {
- id = 16;
- }
- else if (name == "slot17")
- {
- id = 17;
- }
- else if (name == "slot18")
- {
- id = 18;
- }
- else if (name == "slot19")
- {
- id = 19;
- }
- else if (name == "slot20")
- {
- id = 20;
- }
- else if (name == "slot21")
- {
- id = 21;
+ const EquipmentSlotMap &slotMap = equipmentSlots[f];
+ mSlotNames[slotMap.name] = slotMap.id;
}
+}
- return id;
+int EquipmentWindow::parseSlotName(const std::string &name)
+{
+ std::map<std::string, int>::const_iterator it = mSlotNames.find(name);
+ if (it != mSlotNames.end())
+ return (*it).second;
+ return -1;
}
void EquipmentWindow::fillDefault()
diff --git a/src/gui/windows/equipmentwindow.h b/src/gui/windows/equipmentwindow.h
index 8c77b6d28..5295e20b5 100644
--- a/src/gui/windows/equipmentwindow.h
+++ b/src/gui/windows/equipmentwindow.h
@@ -94,6 +94,8 @@ class EquipmentWindow final : public Window,
void recalcSize();
+ static void prepareSlotNames();
+
private:
Item *getItem(const int x, const int y) const A_WARN_UNUSED;
@@ -123,6 +125,8 @@ class EquipmentWindow final : public Window,
static int parseSlotName(const std::string &name) A_WARN_UNUSED;
+ static std::map<std::string, int> mSlotNames;
+
Equipment *mEquipment;
PlayerBox *mPlayerBox;
diff --git a/src/resources/equipmentslots.h b/src/resources/equipmentslots.h
new file mode 100644
index 000000000..31373a8e4
--- /dev/null
+++ b/src/resources/equipmentslots.h
@@ -0,0 +1,91 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RESOURCES_EQUIPMENTSLOTS_H
+#define RESOURCES_EQUIPMENTSLOTS_H
+
+#include "localconsts.h"
+
+struct EquipmentSlotMap final
+{
+ const char *const name;
+ const int id;
+};
+
+static const EquipmentSlotMap equipmentSlots[] =
+{
+ {"topclothes", 0},
+ {"top", 0},
+ {"torso", 0},
+ {"body", 0},
+ {"slot0", 0},
+ {"glove", 1},
+ {"gloves", 1},
+ {"slot1", 1},
+ {"hat", 2},
+ {"hats", 2},
+ {"slot2", 2},
+ {"bottomclothes", 3},
+ {"bottom", 3},
+ {"pants", 3},
+ {"slot3", 3},
+ {"shoes", 4},
+ {"boot", 4},
+ {"boots", 4},
+ {"slot4", 4},
+ {"misc1", 5},
+ {"cape", 5},
+ {"slot5", 5},
+ {"wings", 6},
+ {"slot6", 6},
+ {"misc2", 7},
+ {"scarf", 7},
+ {"scarfs", 7},
+ {"slot7", 7},
+ {"weapon", 8},
+ {"weapons", 8},
+ {"slot8", 8},
+ {"shield", 9},
+ {"shields", 9},
+ {"slot9", 9},
+ {"arrow", 10},
+ {"arrows", 10},
+ {"ammo", 10},
+ {"slot10", 10},
+ {"amulet", 11},
+ {"amulets", 11},
+ {"slot11", 11},
+ {"ring", 12},
+ {"rings", 12},
+ {"slot12", 12},
+ {"slot13", 13},
+ {"slot14", 14},
+ {"slot15", 15},
+ {"slot16", 16},
+ {"slot17", 17},
+ {"slot18", 18},
+ {"slot19", 19},
+ {"slot20", 20},
+ {"slot21", 21}
+};
+
+#endif // RESOURCES_EQUIPMENTSLOTS_H