X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FMenu.h;h=68deef8da0814c98144fb656c02560f5813852c6;hb=cc3905e6ddd9536139cb5d613c3e2d90c83b60fc;hp=188c574b341b834e8c6fad6101fd1b85cfa8b6d8;hpb=7e59a87ac7caf96ffa38f2595581a6009a20339a;p=l2e.git diff --git a/src/graphics/Menu.h b/src/graphics/Menu.h index 188c574..68deef8 100644 --- a/src/graphics/Menu.h +++ b/src/graphics/Menu.h @@ -24,6 +24,7 @@ struct MenuProperties { const Font *font; const Font *disabledFont; const Sprite *cursor; + const Sprite *selectedCursor; int charsPerEntry; int rows; int rowGap; @@ -38,9 +39,9 @@ struct MenuProperties { bool wrapY; MenuProperties() - : font(0), disabledFont(0), cursor(0) - , charsPerEntry(0), rows(0), rowGap(0) - , iconSpace(0), cols(0), colGap(0) + : font(0), disabledFont(0), cursor(0), selectedCursor(0) + , charsPerEntry(0), rows(1), rowGap(0) + , iconSpace(0), cols(1), colGap(0) , charsPerNumber(0), charsPerAdditionalText(0) , additionalTextGap(0), delimiter(':') , wrapX(false), wrapY(false) { } @@ -59,6 +60,12 @@ public: Menu(const MenuProperties &); public: + void SetInactive() { state = STATE_INACTIVE; } + void SetActive() { state = STATE_ACTIVE; } + void SetSelected() { state = STATE_SELECTED; } + bool IsActive() const { return state == STATE_ACTIVE; } + bool HasSelected() const { return state == STATE_SELECTED; } + int Width() const; int Height() const; int ColWidth() const; @@ -110,6 +117,12 @@ private: std::vector entries; int selected; int topRow; + enum State { + STATE_INACTIVE, + STATE_ACTIVE, + STATE_SELECTED, + }; + State state; }; @@ -118,7 +131,8 @@ template Menu::Menu() : MenuProperties() , selected(0) -, topRow(0) { +, topRow(0) +, state(STATE_ACTIVE) { } @@ -126,7 +140,8 @@ template Menu::Menu(const MenuProperties &p) : MenuProperties(p) , selected(0) -, topRow(0) { +, topRow(0) +, state(STATE_ACTIVE) { } @@ -214,6 +229,13 @@ void Menu::Draw(SDL_Surface *dest, const geometry::Vector &position) con geometry::Vector iconOffset( (i % cols) * (ColWidth() + colGap), (i / cols) * RowHeight()); + + // Third column hack! + // This fixes the position of the "DROP" item in the inventory menu. + if (i % cols == 2) { + iconOffset += geometry::Vector(font->CharWidth(), 0); + } + if (entries[start + i].icon) { entries[start + i].icon->Draw(dest, position + iconOffset); } @@ -234,13 +256,22 @@ void Menu::Draw(SDL_Surface *dest, const geometry::Vector &position) con if (charsPerNumber) { usedFont->DrawChar(delimiter, dest, position + textOffset); textOffset += geometry::Vector(usedFont->CharWidth(), 0); - usedFont->DrawNumber(entries[start + i].number, dest, position + textOffset); + usedFont->DrawNumber(entries[start + i].number, dest, position + textOffset, charsPerNumber); } } geometry::Vector cursorOffset( (selected % cols) * (ColWidth() + colGap) - cursor->Width(), ((selected - start) / cols) * RowHeight()); - cursor->Draw(dest, position + cursorOffset); + switch (state) { + case STATE_INACTIVE: + break; + case STATE_ACTIVE: + cursor->Draw(dest, position + cursorOffset); + break; + case STATE_SELECTED: + selectedCursor->Draw(dest, position + cursorOffset); + break; + } } }