]> git.localhorst.tv Git - l2e.git/commitdiff
added icons for item select
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 9 Aug 2012 00:28:08 +0000 (02:28 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 9 Aug 2012 00:28:08 +0000 (02:28 +0200)
src/graphics/Menu.h
src/main.cpp
test-data/item-icons.png [new file with mode: 0644]

index decd99dac3bc423d23ac1717a8020a0ddc9d1764..172c3184d4e57d7912083a4f3b4f78eb3a9caacc 100644 (file)
@@ -27,12 +27,12 @@ class Menu {
 
 public:
        Menu();
-       Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap = 0, int cols = 1, int colGap = 0);
+       Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap = 0, int iconSpace = 0, int cols = 1, int colGap = 0);
 
 public:
        int Width() const;
        int Height() const;
-       int ColWidth() const { return font->CharWidth() * charsPerEntry; }
+       int ColWidth() const { return iconSpace + font->CharWidth() * charsPerEntry; }
        int RowHeight() const { return font->CharHeight() + rowGap; }
 
        T &Selected() { return entries[selected].value; }
@@ -79,6 +79,7 @@ private:
        int charsPerEntry;
        int rows;
        int rowGap;
+       int iconSpace;
        int cols;
        int colGap;
        int selected;
@@ -95,6 +96,7 @@ Menu<T>::Menu()
 , charsPerEntry(0)
 , rows(0)
 , rowGap(0)
+, iconSpace(0)
 , cols(0)
 , colGap(0)
 , selected(0)
@@ -103,13 +105,14 @@ Menu<T>::Menu()
 }
 
 template<class T>
-Menu<T>::Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap, int cols, int colGap)
+Menu<T>::Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap, int iconSpace, int cols, int colGap)
 : font(font)
 , disabledFont(disabledFont ? disabledFont : font)
 , cursor(cursor)
 , charsPerEntry(charsPerEntry)
 , rows(rows)
 , rowGap(rowGap)
+, iconSpace(iconSpace)
 , cols(cols)
 , colGap(colGap)
 , selected(0)
@@ -168,13 +171,17 @@ void Menu<T>::Draw(SDL_Surface *dest, geometry::Point<int> position) const {
        int items(entries.size() - start);
        int end(start + (items < slots ? items : slots));
        for (int i(0), count(end - start); i < count; ++i) {
-               geometry::Vector<int> offset(
+               geometry::Vector<int> iconOffset(
                                (i % cols) * (ColWidth() + colGap),
                                (i / cols) * RowHeight());
+               if (entries[start + i].icon) {
+                       entries[start + i].icon->Draw(dest, position + iconOffset);
+               }
+               geometry::Vector<int> labelOffset(iconOffset.X() +  + iconSpace, iconOffset.Y());
                if (entries[start + i].enabled) {
-                       font->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry);
+                       font->DrawString(entries[start + i].title, dest, position + labelOffset, charsPerEntry);
                } else {
-                       disabledFont->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry);
+                       disabledFont->DrawString(entries[start + i].title, dest, position + labelOffset, charsPerEntry);
                }
        }
        geometry::Vector<int> cursorOffset(
index a09f014c6a509ca588cd951efb7ce10ca8675907..8820004ea2d45e44a4088ff3fb55aa36bd668d57 100644 (file)
@@ -166,7 +166,7 @@ int main(int argc, char **argv) {
                normalFont.MapChar(':', 10, 0);
                normalFont.MapChar('!', 10, 0);
                normalFont.MapChar('?', 10, 0);
-               // TODO: add '.' character
+               // TODO: add '.' and '-' characters
                battleRes.normalFont = &normalFont;
 
                SDL_Surface *disabledFontImg(IMG_Load("test-data/disabled-font.png"));
@@ -179,7 +179,7 @@ int main(int argc, char **argv) {
                disabledFont.MapChar(':', 10, 0);
                disabledFont.MapChar('!', 10, 0);
                disabledFont.MapChar('?', 10, 0);
-               // TODO: add '.' character
+               // TODO: add '.' and '-' characters
                battleRes.disabledFont = &disabledFont;
 
                SDL_Surface *handCursorImg(IMG_Load("test-data/cursor-hand.png"));
@@ -187,7 +187,7 @@ int main(int argc, char **argv) {
                battleRes.menuCursor = &handCursorSprite;
 
                battleRes.spellMenuHeadline = "Please choose a spell.";
-               battleRes.spellMenuPrototype = Menu</* Spell */ void *>(&normalFont, &disabledFont, &handCursorSprite, 12, 6, 8, 2, 32);
+               battleRes.spellMenuPrototype = Menu</* Spell */ void *>(&normalFont, &disabledFont, &handCursorSprite, 12, 6, 8, 0, 2, 32);
                battleRes.spellMenuPrototype.Add("Reset    : 0", 0, false);
                battleRes.spellMenuPrototype.Add("Strong   : 3", 0);
                battleRes.spellMenuPrototype.Add("Stronger : 8", 0);
@@ -208,19 +208,44 @@ int main(int argc, char **argv) {
                battleRes.spellMenuPrototype.Add("Blizzard : 8", 0);
                battleRes.spellMenuPrototype.Add("Spark    : 3", 0);
 
+               SDL_Surface *itemIcons(IMG_Load("test-data/item-icons.png"));
+               Sprite potionIcon(itemIcons, 16, 16);
+               Sprite ballIcon(itemIcons, 16, 16, 0, 16);
+               Sprite crankIcon(itemIcons, 16, 16, 0, 32);
+               Sprite spearIcon(itemIcons, 16, 16, 0, 48);
+               Sprite swordIcon(itemIcons, 16, 16, 0, 64);
+               Sprite axIcon(itemIcons, 16, 16, 0, 80);
+               Sprite rodIcon(itemIcons, 16, 16, 0, 96);
+               Sprite armorIcon(itemIcons, 16, 16, 0, 112);
+               Sprite shieldIcon(itemIcons, 16, 16, 0, 128);
+               Sprite helmetIcon(itemIcons, 16, 16, 0, 144);
+               Sprite ringIcon(itemIcons, 16, 16, 0, 160);
+               Sprite stoneIcon(itemIcons, 16, 16, 0, 176);
+
                battleRes.itemMenuHeadline = "Please choose an item.";
-               battleRes.itemMenuPrototype = Menu</* Item */ void *>(&normalFont, &disabledFont, &handCursorSprite, 15, 6, 8, 1, 32);
-               battleRes.itemMenuPrototype.Add("Antidote    : 9", 0);
-               battleRes.itemMenuPrototype.Add("Magic jar   : 4", 0);
-               battleRes.itemMenuPrototype.Add("Miracle     : 4", 0);
-               battleRes.itemMenuPrototype.Add("Hi-Potion   : 6", 0);
-               battleRes.itemMenuPrototype.Add("Hi-Magic    : 7", 0);
-               battleRes.itemMenuPrototype.Add("Regain      : 4", 0);
-               battleRes.itemMenuPrototype.Add("Power potion: 4", 0, false);
-               battleRes.itemMenuPrototype.Add("Life potion : 1", 0, false);
+               battleRes.itemMenuPrototype = Menu</* Item */ void *>(&normalFont, &disabledFont, &handCursorSprite, 15, 6, 8, 16, 1, 32);
+               battleRes.itemMenuPrototype.Add("Antidote    : 9", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Magic jar   : 4", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Miracle     : 4", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Hi-Potion   : 6", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Hi-Magic    : 7", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Regain      : 4", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Power potion: 4", 0, false, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Life potion : 1", 0, false, &potionIcon);
                battleRes.itemMenuPrototype.Add("Escape      : 2", 0, false);
-               battleRes.itemMenuPrototype.Add("Power gourd : 3", 0);
-               battleRes.itemMenuPrototype.Add("Mystery pin : 2", 0);
+               battleRes.itemMenuPrototype.Add("Power gourd : 3", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Mystery pin : 2", 0, true, &potionIcon);
+               battleRes.itemMenuPrototype.Add("Sleep ball  : 1", 0, false, &ballIcon);
+               battleRes.itemMenuPrototype.Add("Figgoru     : 1", 0, false, &crankIcon);
+               battleRes.itemMenuPrototype.Add("Spear       : 1", 0, false, &spearIcon);
+               battleRes.itemMenuPrototype.Add("Silvo rapier: 1", 0, false, &swordIcon);
+               battleRes.itemMenuPrototype.Add("Rainy ax    : 1", 0, false, &axIcon);
+               battleRes.itemMenuPrototype.Add("Pounder rod : 2", 0, false, &rodIcon);
+               battleRes.itemMenuPrototype.Add("Silver mail : 2", 0, false, &armorIcon);
+               battleRes.itemMenuPrototype.Add("Slash shield: 2", 0, false, &shieldIcon);
+               battleRes.itemMenuPrototype.Add("Golden helm : 1", 0, false, &helmetIcon);
+               battleRes.itemMenuPrototype.Add("Protect ring: 1", 0, false, &ringIcon);
+               battleRes.itemMenuPrototype.Add("Mysto jewel : 1", 0, false, &stoneIcon);
 
                BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &battleRes));
                battleState->AddMonster(monster);
diff --git a/test-data/item-icons.png b/test-data/item-icons.png
new file mode 100644 (file)
index 0000000..5d5e42a
Binary files /dev/null and b/test-data/item-icons.png differ