]> git.localhorst.tv Git - l2e.git/commitdiff
added menu to status screen
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 3 Nov 2012 11:27:06 +0000 (12:27 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 3 Nov 2012 11:27:06 +0000 (12:27 +0100)
src/main.cpp
src/menu/Resources.cpp
src/menu/Resources.h
src/menu/StatusMenu.cpp
src/menu/StatusMenu.h

index 69b4e870b40aadbec2c059130ff1b39f74fb9b9a..4c350de35f3e48432c40ef98cdb54c4826612745 100644 (file)
@@ -340,6 +340,20 @@ int main(int argc, char **argv) {
                menuResources.experienceLabel = "NOW EXP";
                menuResources.nextLevelLabel = "NEXT LEVEL";
 
+               graphics::MenuProperties statusMenuProperties;
+               statusMenuProperties.cols = 2;
+               statusMenuProperties.rows = 1;
+               statusMenuProperties.charsPerEntry = 6;
+               statusMenuProperties.rowGap = 0;
+               statusMenuProperties.colGap = 16;
+               statusMenuProperties.cursor = &menuCursor;
+               statusMenuProperties.font = &menuFont;
+               statusMenuProperties.wrapX = true;
+               menuResources.statusMenuProperties = &statusMenuProperties;
+
+               menuResources.nextLabel = "NEXT";
+               menuResources.returnLabel = "RETURN";
+
                InitScreen screen(width, height);
 
                app::State *state(0);
index 646c049c8dbbf6c3713f1c256d1ca8b51bcc2b1f..256fb1f38219680acb08a4398f9d821079d8ec88 100644 (file)
@@ -47,7 +47,12 @@ Resources::Resources()
 
 , ipLabel(0)
 , experienceLabel(0)
-, nextLevelLabel(0) {
+, nextLevelLabel(0)
+
+, statusMenuProperties(0)
+
+, nextLabel(0)
+, returnLabel(0) {
 
 }
 
index 64198f85c158fe61387ff075c4f87ac22a7a5906..a0c60e15c95b86dca21f66bef3397e4acfc85e3c 100644 (file)
@@ -54,6 +54,11 @@ struct Resources {
        const char *experienceLabel;
        const char *nextLevelLabel;
 
+       graphics::MenuProperties *statusMenuProperties;
+
+       const char *nextLabel;
+       const char *returnLabel;
+
        Resources();
 
 };
index b0377033b50f1920258332595586325382a368c3..3a9b38f3489f58fc0b282c8e9108e948afb8d536 100644 (file)
@@ -18,6 +18,7 @@
 #include "../common/Item.h"
 #include "../common/Stats.h"
 #include "../graphics/Font.h"
+#include "../graphics/Frame.h"
 
 using app::Input;
 using common::Hero;
@@ -25,13 +26,16 @@ using common::Item;
 using common::Stats;
 using geometry::Vector;
 using graphics::Font;
+using graphics::Frame;
 
 namespace menu {
 
 StatusMenu::StatusMenu(PartyMenu *parent, int cursor)
 : parent(parent)
-, cursor(cursor) {
-
+, cursor(cursor)
+, menu(*parent->Res().statusMenuProperties) {
+       menu.Add(parent->Res().nextLabel, 0);
+       menu.Add(parent->Res().returnLabel, 1);
 }
 
 
@@ -58,16 +62,30 @@ void StatusMenu::OnResize(int width, int height) {
 
 
 void StatusMenu::HandleEvents(const Input &input) {
-       if (input.JustPressed(Input::ACTION_B)) {
-               Ctrl().PopState();
-       }
-
        if (input.JustPressed(Input::SHOULDER_RIGHT)) {
                NextHero();
        }
        if (input.JustPressed(Input::SHOULDER_LEFT)) {
                PreviousHero();
        }
+
+       if (input.JustPressed(Input::PAD_LEFT)) {
+               menu.PreviousItem();
+       }
+       if (input.JustPressed(Input::PAD_RIGHT)) {
+               menu.NextItem();
+       }
+
+       if (input.JustPressed(Input::ACTION_A)) {
+               if (menu.Selected() == 0) {
+                       NextHero();
+               } else if (menu.Selected() == 1) {
+                       Ctrl().PopState();
+               }
+       }
+       if (input.JustPressed(Input::ACTION_B)) {
+               Ctrl().PopState();
+       }
 }
 
 void StatusMenu::UpdateWorld(float deltaT) {
@@ -90,10 +108,13 @@ void StatusMenu::Render(SDL_Surface *screen) {
                        17 * parent->Res().statusFont->CharHeight() - parent->Res().statusFont->CharHeight() / 8);
        Vector<int> nextLevelOffset(
                        11 * parent->Res().statusFont->CharWidth(),
-                       19 * parent->Res().statusFont->CharHeight() - parent->Res().statusFont->CharHeight() / 8);
+                       20 * parent->Res().statusFont->CharHeight() - parent->Res().statusFont->CharHeight() / 8);
        Vector<int> ikariOffset(
                        17 * parent->Res().statusFont->CharWidth(),
                        17 * parent->Res().statusFont->CharHeight() - parent->Res().statusFont->CharHeight() / 8);
+       Vector<int> menuOffset(
+                       parent->Res().statusFont->CharWidth(),
+                       23 * parent->Res().statusFont->CharHeight() - parent->Res().statusFont->CharHeight() / 8);
 
        parent->RenderBackground(screen);
        parent->Res().shoulderNav->Draw(screen, offset + shoulderNavOffset);
@@ -103,6 +124,7 @@ void StatusMenu::Render(SDL_Surface *screen) {
        RenderExperience(screen, experienceOffset);
        RenderNextLevel(screen, nextLevelOffset);
        RenderIkari(screen, ikariOffset);
+       RenderMenu(screen, menuOffset);
 }
 
 int StatusMenu::Width() const {
@@ -214,6 +236,20 @@ void StatusMenu::RenderIkari(SDL_Surface *screen, const geometry::Vector<int> &o
        font.DrawChar('%', screen, percentOffset);
 }
 
+void StatusMenu::RenderMenu(SDL_Surface *screen, const geometry::Vector<int> &offset) const {
+       const Font &font(*parent->Res().normalFont);
+       const Frame &frame(*parent->Res().statusFrame);
+
+       Vector<int> labelOffset(2 * font.CharWidth(), font.CharHeight());
+       frame.Draw(screen, offset, 10 * font.CharWidth(), 3 * font.CharHeight());
+       font.DrawString(parent->Res().mainMenuStatusText, screen, offset + labelOffset);
+
+       Vector<int> menuFrameOffset(10 * font.CharWidth(), 0);
+       Vector<int> menuOffset(13 * font.CharWidth(), font.CharHeight());
+       frame.Draw(screen, offset + menuFrameOffset, 20 * font.CharWidth(), 3 * font.CharHeight());
+       menu.Draw(screen, offset + menuOffset);
+}
+
 
 void StatusMenu::NextHero() {
        cursor = (cursor + 1) % parent->Game().state->partySize;
index 40fac6b6a0e0b61bfe37aabd559ca7b309d06020..5f6f986eb465b69ba87434de87b3fd138aaac40c 100644 (file)
@@ -12,6 +12,7 @@
 #include "../app/State.h"
 #include "../common/fwd.h"
 #include "../geometry/Vector.h"
+#include "../graphics/Menu.h"
 
 namespace menu {
 
@@ -53,10 +54,12 @@ private:
        /// @param offset the top right corner!
        void RenderNextLevel(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
        void RenderIkari(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
+       void RenderMenu(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
 
 private:
        PartyMenu *parent;
        int cursor;
+       graphics::Menu<int> menu;
 
 };