From: Daniel Karbach Date: Thu, 9 Aug 2012 00:28:08 +0000 (+0200) Subject: added icons for item select X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=859750479ac0c8febfaf4eb603fc599aef4571ca;p=l2e.git added icons for item select --- 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 0000000..5d5e42a Binary files /dev/null and b/test-data/item-icons.png differ