X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FConfigMenu.cpp;h=fa51f7732c5d5932e15e11b339b30beb6e1bd590;hb=ec824200aec12d6870b70304bcd2e2aeadba767b;hp=1e27973e94e954f78957227c5263765e52dc16de;hpb=a47b25a3a6631c8136fec6585a92b8756c68d243;p=l2e.git diff --git a/src/menu/ConfigMenu.cpp b/src/menu/ConfigMenu.cpp index 1e27973..fa51f77 100644 --- a/src/menu/ConfigMenu.cpp +++ b/src/menu/ConfigMenu.cpp @@ -1,34 +1,35 @@ -/* - * ConfigMenu.cpp - * - * Created on: Nov 29, 2012 - * Author: holy - */ - #include "ConfigMenu.h" #include "PartyMenu.h" #include "Resources.h" +#include "../app/Application.h" +#include "../app/Input.h" #include "../common/GameConfig.h" #include "../common/GameState.h" #include "../graphics/Font.h" #include "../graphics/Frame.h" +#include "../math/Vector.h" using app::Input; -using geometry::Vector; +using common::GameState; +using math::Vector; using graphics::Font; using graphics::Frame; namespace menu { ConfigMenu::ConfigMenu(PartyMenu *parent) -: parent(parent) { - +: parent(parent) +, configMenu(*parent->Res().configMenuProperties) { + configMenu.Add(parent->Res().configMessageSpeedLabel, 0); + configMenu.Add(parent->Res().configBattleCursorLabel, 1); + configMenu.Add(parent->Res().configStatusCursorLabel, 2); + configMenu.Add(parent->Res().configMusicLabel, 3); } void ConfigMenu::OnEnterState(SDL_Surface *) { - + configMenu.StartAnimation(Ctrl()); } void ConfigMenu::OnExitState(SDL_Surface *) { @@ -62,9 +63,43 @@ void ConfigMenu::HandleEvents(const Input &input) { if (input.JustPressed(Input::ACTION_B)) { Ctrl().PopState(); } + if (input.JustPressed(Input::PAD_DOWN)) { + configMenu.NextRow(); + } + 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) { +void ConfigMenu::UpdateWorld(Uint32 deltaT) { } @@ -81,7 +116,7 @@ void ConfigMenu::Render(SDL_Surface *screen) { RenderMenu(screen, offset + menuOffset); } -void ConfigMenu::RenderHeadline(SDL_Surface *screen, const geometry::Vector &offset) const { +void ConfigMenu::RenderHeadline(SDL_Surface *screen, const math::Vector &offset) const { const Font &font(*parent->Res().normalFont); const Frame &frame(*parent->Res().statusFrame); const Vector textOffset( @@ -91,11 +126,90 @@ void ConfigMenu::RenderHeadline(SDL_Surface *screen, const geometry::Vector font.DrawString(parent->Res().mainMenuConfigText, screen, offset + textOffset, 6); } -void ConfigMenu::RenderMenu(SDL_Surface *screen, const geometry::Vector &offset) const { - const Font &font(*parent->Res().normalFont); - const Frame &frame(*parent->Res().statusFrame); +void ConfigMenu::RenderMenu(SDL_Surface *screen, const math::Vector &offset) const { + 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 menuOffset( + 3 * font.CharWidth(), 2 * font.CharHeight()); frame.Draw(screen, offset, 30 * font.CharWidth(), 14 * font.CharHeight()); + configMenu.Draw(screen, offset + menuOffset); + + Vector lineOffset( + menuOffset.X() + configMenu.Width() + 2 * font.CharWidth(), + menuOffset.Y()); + Vector 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); + } } }