From: Daniel Karbach Date: Wed, 8 Aug 2012 21:41:57 +0000 (+0200) Subject: added cursor sprite for menu X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=167fe3525cd1c29cbe1a23e3b14e2a1f2774835c;p=l2e.git added cursor sprite for menu --- diff --git a/src/battle/Resources.h b/src/battle/Resources.h index 098c844..3876072 100644 --- a/src/battle/Resources.h +++ b/src/battle/Resources.h @@ -39,6 +39,8 @@ struct Resources { graphics::Font *normalFont; graphics::Font *disabledFont; + graphics::Sprite *menuCursor; + const char *spellMenuHeadline; graphics::Menu spellMenuPrototype; @@ -62,6 +64,8 @@ struct Resources { , normalFont(0) , disabledFont(0) + , menuCursor(0) + , spellMenuHeadline("") { } diff --git a/src/graphics/Menu.h b/src/graphics/Menu.h index 90af3e4..ab661c7 100644 --- a/src/graphics/Menu.h +++ b/src/graphics/Menu.h @@ -9,6 +9,7 @@ #define GRAPHICS_MENU_H_ #include "Font.h" +#include "Sprite.h" #include "../geometry/operators.h" #include "../geometry/Point.h" #include "../geometry/Vector.h" @@ -27,7 +28,8 @@ template class Menu { public: - explicit Menu(const Font *font = NULL, const Font *disabledFont = NULL, int charsPerEntry = 16, int rows = 1, int rowGap = 0, int cols = 1, int colGap = 0); + Menu(); + Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap = 0, int cols = 1, int colGap = 0); public: int Width() const; @@ -72,6 +74,7 @@ private: }; const Font *font; const Font *disabledFont; + const Sprite *cursor; std::vector entries; int charsPerEntry; int rows; @@ -85,9 +88,25 @@ private: template -Menu::Menu(const Font *font, const Font *disabledFont, int charsPerEntry, int rows, int rowGap, int cols, int colGap) +Menu::Menu() +: font(0) +, disabledFont(0) +, cursor(0) +, charsPerEntry(0) +, rows(0) +, rowGap(0) +, cols(0) +, colGap(0) +, selected(0) +, topRow(0) { + +} + +template +Menu::Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap, int cols, int colGap) : font(font) , disabledFont(disabledFont ? disabledFont : font) +, cursor(cursor) , charsPerEntry(charsPerEntry) , rows(rows) , rowGap(rowGap) @@ -149,13 +168,19 @@ void Menu::Draw(SDL_Surface *dest, geometry::Point position) const { int items(entries.size() - start); int end(items < slots ? items : slots); for (int i(0), count(end - start); i < count; ++i) { - geometry::Vector offset((i % cols) * (ColWidth() + colGap), (i / cols) * RowHeight()); + geometry::Vector offset( + (i % cols) * (ColWidth() + colGap), + (i / cols) * RowHeight()); if (entries[start + i].enabled) { font->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry); } else { disabledFont->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry); } } + geometry::Vector cursorOffset( + (selected % cols) * (ColWidth() + colGap) - cursor->Width(), + (selected / cols) * RowHeight()); + cursor->Draw(dest, position + cursorOffset); } } diff --git a/src/main.cpp b/src/main.cpp index df3def1..9a68807 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -182,8 +182,12 @@ int main(int argc, char **argv) { // TODO: add '.' character battleRes.disabledFont = &disabledFont; + SDL_Surface *handCursorImg(IMG_Load("test-data/cursor-hand.png")); + Sprite handCursorSprite(handCursorImg, 32, 32); + battleRes.menuCursor = &handCursorSprite; + battleRes.spellMenuHeadline = "Please choose a spell."; - battleRes.spellMenuPrototype = Menu(&normalFont, &disabledFont, 12, 6, 8, 2, 32); + battleRes.spellMenuPrototype = Menu(&normalFont, &disabledFont, &handCursorSprite, 12, 6, 8, 2, 32); BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &battleRes)); battleState->AddMonster(monster); diff --git a/test-data/cursor-hand.png b/test-data/cursor-hand.png new file mode 100644 index 0000000..3f2c514 Binary files /dev/null and b/test-data/cursor-hand.png differ