From 859750479ac0c8febfaf4eb603fc599aef4571ca Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Thu, 9 Aug 2012 02:28:08 +0200 Subject: [PATCH] added icons for item select --- src/graphics/Menu.h | 19 +++++++++----- src/main.cpp | 53 ++++++++++++++++++++++++++++----------- test-data/item-icons.png | Bin 0 -> 717 bytes 3 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 test-data/item-icons.png diff --git a/src/graphics/Menu.h b/src/graphics/Menu.h index decd99d..172c318 100644 --- a/src/graphics/Menu.h +++ b/src/graphics/Menu.h @@ -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::Menu() , charsPerEntry(0) , rows(0) , rowGap(0) +, iconSpace(0) , cols(0) , colGap(0) , selected(0) @@ -103,13 +105,14 @@ Menu::Menu() } template -Menu::Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap, int cols, int colGap) +Menu::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::Draw(SDL_Surface *dest, geometry::Point 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 offset( + geometry::Vector iconOffset( (i % cols) * (ColWidth() + colGap), (i / cols) * RowHeight()); + if (entries[start + i].icon) { + entries[start + i].icon->Draw(dest, position + iconOffset); + } + geometry::Vector 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 cursorOffset( diff --git a/src/main.cpp b/src/main.cpp index a09f014..8820004 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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(&normalFont, &disabledFont, &handCursorSprite, 12, 6, 8, 2, 32); + battleRes.spellMenuPrototype = Menu(&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(&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(&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 index 0000000000000000000000000000000000000000..5d5e42ae3418eeb4084b1c05a362af49f7e515d7 GIT binary patch literal 717 zcmV;;0y6!HP)&82<^;BWS+}XfcJI5~_4`@sX}{lk_&l^JrL=flbpGM->zGnXY5BCwnh01V%=46T z;Cc2U=^a61KWtt%MgOpRUd8Uh@LzCM2cCu3!SF`W=&gN1yFk%ss6*R->@Qe)0$6Cg zHIE04n0;Mm8m>Dt!%Ce$%(JErn3-qRH*`5*IsqfoD->pylY08VJjP?;^nGg2Jy`$8 z{jY}wul9AESX%qx5sXkDpjn-u+3x5W$vk1j)?;P#tnW;Sg?ecGuVdwdq76ImjMKS?CxFLOD zYCU{*&ZVB2n$szi(pfq#2R5-93XuiVEzHGbyPPSByzv-lfNTQjmQ=7RMJ-7X*(%64Hy`oP14>@2N8 z&rGE=&Wz_o@7^(<6Ft;1cGfEtM4hfXm(~H(53}3H!k<$+Q|#Jvr18APsW!Pb*pcu= zi+!$}T#*AkbjE9C&+wcvE(dJQ`l$`GYo1sIhAWg2=>s-5uoLb0N@OgIbr61nk-e7= z45jh<0N0F)mA#PZAA#*N-Y?Xf-mwxHGa+BZ-!pk%uBFP9Kyg zu`YhFNT&2w7jxmAE9ubay;Ib`oM(~9Zhe0MH