]> git.localhorst.tv Git - l2e.git/commitdiff
completed config menu
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 29 Nov 2012 14:25:35 +0000 (15:25 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 29 Nov 2012 14:26:34 +0000 (15:26 +0100)
I didn't clone the music bug, as I don't think anyone would want that ;)

src/main.cpp
src/menu/ConfigMenu.cpp
src/menu/Resources.cpp
src/menu/Resources.h

index 68446d3f499518d5bc129f3475f1585ecda160ee..580c5db14904e2450cb17f8695e41ad74489f533 100644 (file)
@@ -302,6 +302,7 @@ int main(int argc, char **argv) {
                graphics::Font menuInactiveFont(&menuInactiveFontSprite, 0, -2);
 
                menuResources.normalFont = &menuFont;
+               menuResources.inactiveFont = &menuInactiveFont;
 
                graphics::Sprite menuCursor(IMG_Load("test-data/menu-cursor.png"), 32, 16);
                menuResources.menuCursor = &menuCursor;
index 62eed325d0ff33b40ebe2b1d29bf3e714fc64d43..b5a2b7d4e9d73e038303ad473ed507cc3bcc483c 100644 (file)
@@ -15,6 +15,7 @@
 #include "../graphics/Frame.h"
 
 using app::Input;
+using common::GameState;
 using geometry::Vector;
 using graphics::Font;
 using graphics::Frame;
@@ -72,6 +73,34 @@ void ConfigMenu::HandleEvents(const Input &input) {
        if (input.JustPressed(Input::PAD_UP)) {
                configMenu.PreviousRow();
        }
+
+       GameState &state(*parent->Game().state);
+       int *property(0);
+       int mod(0);
+       switch (configMenu.Selected()) {
+               case 0:
+                       property = &state.messageSpeed;
+                       mod = 3;
+                       break;
+               case 1:
+                       property = &state.battleCursor;
+                       mod = 2;
+                       break;
+               case 2:
+                       property = &state.statusCursor;
+                       mod = 2;
+                       break;
+               case 3:
+                       property = &state.music;
+                       mod = 2;
+                       break;
+       }
+       if (input.JustPressed(Input::ACTION_A) || input.JustPressed(Input::PAD_RIGHT)) {
+               *property = (*property + 1) % mod;
+       }
+       if (input.JustPressed(Input::PAD_LEFT)) {
+               *property = (*property + mod - 1) % mod;
+       }
 }
 
 void ConfigMenu::UpdateWorld(float deltaT) {
@@ -102,13 +131,89 @@ void ConfigMenu::RenderHeadline(SDL_Surface *screen, const geometry::Vector<int>
 }
 
 void ConfigMenu::RenderMenu(SDL_Surface *screen, const geometry::Vector<int> &offset) const {
-       const Font &font(*parent->Res().normalFont);
-       const Frame &frame(*parent->Res().statusFrame);
+       const Resources &res(parent->Res());
+       const Font &font(*res.normalFont);
+       const Font &inactiveFont(*res.inactiveFont);
+       const Frame &frame(*res.statusFrame);
+       const GameState &state(*parent->Game().state);
        const Vector<int> menuOffset(
                        3 * font.CharWidth(), 2 * font.CharHeight());
 
        frame.Draw(screen, offset, 30 * font.CharWidth(), 14 * font.CharHeight());
        configMenu.Draw(screen, offset + menuOffset);
+
+       Vector<int> lineOffset(
+                       menuOffset.X() + configMenu.Width() + 2 * font.CharWidth(),
+                       menuOffset.Y());
+       Vector<int> colOffset(lineOffset);
+
+       if (state.messageSpeed == GameState::MESSAGE_SPEED_FAST) {
+               font.DrawString(res.configMessageSpeedFast, screen, offset + colOffset);
+               colOffset.X() += font.StringWidth(res.configMessageSpeedFast) + font.CharWidth();
+       } else {
+               inactiveFont.DrawString(res.configMessageSpeedFast, screen, offset + colOffset);
+               colOffset.X() += inactiveFont.StringWidth(res.configMessageSpeedFast) + inactiveFont.CharWidth();
+       }
+       if (state.messageSpeed == GameState::MESSAGE_SPEED_NORMAL) {
+               font.DrawString(res.configMessageSpeedNormal, screen, offset + colOffset);
+               colOffset.X() += font.StringWidth(res.configMessageSpeedNormal) + font.CharWidth();
+       } else {
+               inactiveFont.DrawString(res.configMessageSpeedNormal, screen, offset + colOffset);
+               colOffset.X() += inactiveFont.StringWidth(res.configMessageSpeedNormal) + inactiveFont.CharWidth();
+       }
+       if (state.messageSpeed == GameState::MESSAGE_SPEED_SLOW) {
+               font.DrawString(res.configMessageSpeedSlow, screen, offset + colOffset);
+       } else {
+               inactiveFont.DrawString(res.configMessageSpeedSlow, screen, offset + colOffset);
+       }
+
+       lineOffset.Y() += configMenu.RowHeight();
+       colOffset = lineOffset;
+
+       if (state.battleCursor == GameState::CURSOR_CLEAR) {
+               font.DrawString(res.configCursorClear, screen, offset + colOffset);
+               colOffset.X() += font.StringWidth(res.configCursorClear) + 2 * font.CharWidth();
+       } else {
+               inactiveFont.DrawString(res.configCursorClear, screen, offset + colOffset);
+               colOffset.X() += inactiveFont.StringWidth(res.configCursorClear) + 2 * inactiveFont.CharWidth();
+       }
+       if (state.battleCursor == GameState::CURSOR_MEMORY) {
+               font.DrawString(res.configCursorMemory, screen, offset + colOffset);
+       } else {
+               inactiveFont.DrawString(res.configCursorMemory, screen, offset + colOffset);
+       }
+
+       lineOffset.Y() += configMenu.RowHeight();
+       colOffset = lineOffset;
+
+       if (state.statusCursor == GameState::CURSOR_CLEAR) {
+               font.DrawString(res.configCursorClear, screen, offset + colOffset);
+               colOffset.X() += font.StringWidth(res.configCursorClear) + 2 * font.CharWidth();
+       } else {
+               inactiveFont.DrawString(res.configCursorClear, screen, offset + colOffset);
+               colOffset.X() += inactiveFont.StringWidth(res.configCursorClear) + 2 * inactiveFont.CharWidth();
+       }
+       if (state.statusCursor == GameState::CURSOR_MEMORY) {
+               font.DrawString(res.configCursorMemory, screen, offset + colOffset);
+       } else {
+               inactiveFont.DrawString(res.configCursorMemory, screen, offset + colOffset);
+       }
+
+       lineOffset.Y() += configMenu.RowHeight();
+       colOffset = lineOffset;
+
+       if (state.music == GameState::MUSIC_STEREO) {
+               font.DrawString(res.configMusicStereo, screen, offset + colOffset);
+               colOffset.X() += font.StringWidth(res.configMusicStereo) + font.CharWidth();
+       } else {
+               inactiveFont.DrawString(res.configMusicStereo, screen, offset + colOffset);
+               colOffset.X() += inactiveFont.StringWidth(res.configMusicStereo) + inactiveFont.CharWidth();
+       }
+       if (state.music == GameState::MUSIC_MONO) {
+               font.DrawString(res.configMusicMono, screen, offset + colOffset);
+       } else {
+               inactiveFont.DrawString(res.configMusicMono, screen, offset + colOffset);
+       }
 }
 
 }
index 14158f3b9ae2ce14dca093f3b41ea15d5a5637cf..83daa10a5736a8e3a53d63e3e716ceb2c6473abe 100644 (file)
@@ -12,6 +12,7 @@ namespace menu {
 Resources::Resources()
 : menubg(0)
 , normalFont(0)
+, inactiveFont(0)
 , statusFont(0)
 
 , menuCursor(0)
index 8778cb5a27420afd56acd2d2b132d11e68612045..026e3da100b9414406c3145ef62f6e30fe974385 100644 (file)
@@ -17,6 +17,7 @@ struct Resources {
        graphics::Texture *menubg;
 
        graphics::Font *normalFont;
+       graphics::Font *inactiveFont;
        graphics::Font *statusFont;
 
        graphics::Sprite *menuCursor;