From 8e0804db19c5c58917889b6ba6a432955fb8e40a Mon Sep 17 00:00:00 2001 From: nick Date: Sat, 19 Apr 2008 23:28:18 +0000 Subject: [PATCH] Tidy up the menu screen git-svn-id: http://svn.nickg.me.uk/work/lander/trunk@353 a97b1542-0b21-0410-a459-e47997c36f34 --- data/Makefile.am | 4 +- data/images/exit_option.png | Bin 0 -> 1022 bytes data/images/options_option.png | Bin 0 -> 1107 bytes data/images/score_option.png | Bin 0 -> 1445 bytes data/images/start_option.png | Bin 0 -> 1075 bytes src/Image.cpp | 5 +- src/Image.hpp | 2 +- src/Main.cpp | 17 +-- src/Menu.cpp | 186 +++++++++++++++++---------------- src/Menu.hpp | 36 +++++-- src/ScreenManager.cpp | 5 + src/ScreenManager.hpp | 1 + 12 files changed, 143 insertions(+), 113 deletions(-) create mode 100644 data/images/exit_option.png create mode 100644 data/images/options_option.png create mode 100644 data/images/score_option.png create mode 100644 data/images/start_option.png diff --git a/data/Makefile.am b/data/Makefile.am index 4750887..e902ef3 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,4 +1,6 @@ -EXTRA_DIST = images/ship.png images/star.png +EXTRA_DIST = images/ship.png images/star.png images/start_option.png \ + images/score_option.png images/options_option.png \ + images/exit_option.png nobase_dist_pkgdata_DATA = $(EXTRA_DIST) diff --git a/data/images/exit_option.png b/data/images/exit_option.png new file mode 100644 index 0000000000000000000000000000000000000000..a321ead371addfedbac8c1747cb94f113a572455 GIT binary patch literal 1022 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RT1QQer3~l4ZUH||CkV!;ARCwC$ z+D&L3RTKyCUlTu;5zDN_f+9jxTKqz#3X)i9-6*(eFsPN*g)0lXaoet}MWv8tQFWu> z$|AP3NYqGe&^9!nF0|r$RBSr!gk+ zdk^(!M@A92W+k(FwaPA2{NYfNN(;To|ib*#yX$Cr?@pY z`nAN?9_mp=MxK8L_ZQI2NIbY!0kF`eFQyUm5;p}ImvCdl`~qH=c&CLm?#8>}tI6Y% z#LawzBUI<)WE5}LF9=)g|)&NCR#jg3*d=kLM^sf`8BAHbU>e81s^-1B&lyI7+hoyypW z>9F?;f4>RiYgPm<6^w4faY^A^RXMld6O5EloW~A{A9Fl|_=k|@^LszfO8n6`VV~N7 zQGBstF6q!mYmfoD>-@|Jf8*(}mlt6ZPDyRc@hlY3AI6h?<@{`|OE|tBkAX|8Mr>*y z_F$;Vn=asxq%>vcWxj&<3JSw3#o=Cw1Gz72C+-MU|H%&Z-GO1uNgS;q6D;*Q1JoA) znXx`=^Nr86WZ2Z>;aIn^gkln}O3ZiBIs5QNZe)K;0o&&RP-hW%PX(Ug7E|UF9$kgv z<-X-x}G4N4u9HFS!c|1VC2vwtH7@wU|D zsyB!2>XgUuT@XI#NYt2qBKMy_&xX0!{~ zj)SWdhacpgj|8~`HR^FqW`On34lcVn>}@-^nmw1>!F`$mW@}nkK5fo4%w5FxmYknu zg9%v^>92;F(;ePf)N!vd+avpSEda*V-$oq^Xa0G7g@@YuHBc4=Q?g&vd>P*Jt=_kT s+p*{6iu@4~5fKp)5fKp)5fM%BAIU@%BlkcbtpET307*qoM6N<$f>8C{!~g&Q literal 0 HcmV?d00001 diff --git a/data/images/options_option.png b/data/images/options_option.png new file mode 100644 index 0000000000000000000000000000000000000000..fba478b079b7a49ff41fa770a8e52332851f69f8 GIT binary patch literal 1107 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 literal 0 HcmV?d00001 diff --git a/src/Image.cpp b/src/Image.cpp index 17cb3fe..dd13290 100644 --- a/src/Image.cpp +++ b/src/Image.cpp @@ -76,7 +76,8 @@ Image::~Image() glDeleteTextures(1, &texture); } -void Image::Draw(int x, int y, double rotate, double scale, double alpha) const +void Image::Draw(int x, int y, double rotate, double scale, + double alpha, double white) const { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); @@ -85,7 +86,7 @@ void Image::Draw(int x, int y, double rotate, double scale, double alpha) const glTranslated((double)(x + width/2), (double)(y + height/2), 0.0); glScaled(scale, scale, 0); glRotated(rotate, 0.0, 0.0, 1.0); - glColor4d(1.0, 1.0, 1.0, alpha); + glColor4d(white, white, white, alpha); glBegin(GL_QUADS); glTexCoord2d(0.0, 0.0); glVertex2i(-(width/2), -(height/2)); glTexCoord2d(0.0, 1.0); glVertex2i(-(width/2), height/2); diff --git a/src/Image.hpp b/src/Image.hpp index 65ff880..25e23e4 100644 --- a/src/Image.hpp +++ b/src/Image.hpp @@ -26,7 +26,7 @@ public: ~Image(); void Draw(int x, int y, double rotate=0.0, double scale=1.0, - double alpha=1.0) const; + double alpha=1.0, double white=1.0) const; int GetWidth() const { return width; } int GetHeight() const { return height; } diff --git a/src/Main.cpp b/src/Main.cpp index a6808f3..71a6427 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -71,14 +71,14 @@ int main(int argc, char **argv) opengl.Init(width, height, depth, fullscreen); // Create screens - MainMenu mm; - Game g; - HighScores hs; + MainMenu *mm = new MainMenu(); + Game *g = new Game(); + HighScores *hs = new HighScores(); ScreenManager &sm = ScreenManager::GetInstance(); - sm.AddScreen("MAIN MENU", &mm); - sm.AddScreen("GAME", &g); - sm.AddScreen("HIGH SCORES", &hs); + sm.AddScreen("MAIN MENU", mm); + sm.AddScreen("GAME", g); + sm.AddScreen("HIGH SCORES", hs); // Load fonts FreeType &ft = FreeType::GetInstance(); @@ -92,6 +92,11 @@ int main(int argc, char **argv) // Run the game sm.SelectScreen("MAIN MENU"); opengl.Run(); + + sm.RemoveAllScreens(); + delete mm; + delete g; + delete hs; // Close data file delete g_pData; diff --git a/src/Menu.cpp b/src/Menu.cpp index 14d14ea..333c4c7 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -17,71 +17,48 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "Menu.hpp" +#include "Input.hpp" +#include "OpenGL.hpp" #include "Lander.hpp" +#include "HighScores.hpp" const double MenuStar::ROTATE_SPEED(0.005); const double MenuStar::ENLARGE_RATE(0.001); const double MenuStar::INIT_SCALE(0.01); const double MenuStar::SPEED(4.0); -extern DataFile *g_pData; +const int MainMenu::OPTIONS_OFFSET(128); +const int MainMenu::HINT_DISPLAY_TIME(140); +const double MainMenu::MENU_FADE_SPEED(0.1); +const unsigned MainMenu::MAX_STARS(80); + +const double MenuOption::SEL_ENLARGE(1.2); +const double MenuOption::UNSEL_DIM(0.5); Image *MenuStar::starImage = NULL; -void MainMenu::Load() +MainMenu::MainMenu() + : startOpt("images/start_option.png", OPTIONS_OFFSET, 0), + scoreOpt("images/score_option.png", OPTIONS_OFFSET, 1), + optionsOpt("images/options_option.png", OPTIONS_OFFSET, 2), + exitOpt("images/exit_option.png", OPTIONS_OFFSET, 3) { - OpenGL &opengl = OpenGL::GetInstance(); - - // Load textures - if (!hasloaded) { - uStartTexture = opengl.LoadTextureAlpha(g_pData, "StartOption.bmp"); - uHighTexture = opengl.LoadTextureAlpha(g_pData, "HighScoreOption.bmp"); - uOptionsTexture = opengl.LoadTextureAlpha(g_pData, "Options.bmp"); - uExitTexture = opengl.LoadTextureAlpha(g_pData, "ExitOption.bmp"); - hasloaded = true; - } - - // Create start button - start.x = (opengl.GetWidth() - 256) / 2; - start.y = (opengl.GetHeight() - 128) / 2; - start.height = 32; - start.width = 256; - start.uTexture = uStartTexture; - - // Create high score button - highscore.x = (opengl.GetWidth() - 512) / 2; - highscore.y = start.y + 32; - highscore.height = 32; - highscore.width = 512; - highscore.uTexture = uHighTexture; - - // Create options button - options.x = (opengl.GetWidth() - 256) / 2; - options.y = start.y + 64; - options.height = 32; - options.width = 256; - options.uTexture = uOptionsTexture; - - // Create exit button - exit.x = (opengl.GetWidth() - 128) / 2; - exit.y = start.y + 96; - exit.height = 32; - exit.width = 128; - exit.uTexture = uExitTexture; + +} +void MainMenu::Load() +{ // Set fade in state state = msFadeIn; - fade = 0.0f; + fade = 0.0; + bigness = 1.0; - // Set default selections - starsel = 1.5f; - optsel = 1.0f; - highsel = 1.0f; - exitsel = 1.0f; - // Show a new hint hint_timeout = 0; hintidx = 0; + + selOption = optStart; } void MainMenu::Process() @@ -95,49 +72,60 @@ void MainMenu::Process() // Look at keys if (input.GetKeyState(SDLK_DOWN) || input.QueryJoystickAxis(1) > 0) { // Move the selection down - if (starsel > 1.4f) { - starsel = 1.0f; - highsel = 1.5f; - } - else if (highsel > 1.4f) { - highsel = 1.0f; - optsel = 1.5f; - } - else if (optsel > 1.4f) { - optsel = 1.0f; - exitsel = 1.5f; + switch (selOption) { + case optStart: + selOption = optScore; + break; + case optScore: + selOption = optOptions; + break; + case optOptions: + selOption = optExit; + break; + default: + break; } + input.ResetKey(SDLK_DOWN); //opengl.di.ResetProp(DIJ_YAXIS); } else if (input.GetKeyState(SDLK_UP) /*|| opengl.di.QueryJoystick(DIJ_YAXIS) < 0*/) { // Move the selection up - if (highsel > 1.4f) { - highsel = 1.0f; - starsel = 1.5f; - } - else if (optsel > 1.4f) { - optsel = 1.0f; - highsel = 1.5f; - } - else if (exitsel > 1.4f) { - exitsel = 1.0f; - optsel = 1.5f; + switch (selOption) { + case optScore: + selOption = optStart; + break; + case optOptions: + selOption = optScore; + break; + case optExit: + selOption = optOptions; + break; + default: + break; } + input.ResetKey(SDLK_UP); //opengl.di.ResetProp(DIJ_YAXIS); } else if (input.GetKeyState(SDLK_RETURN) /*|| opengl.di.QueryJoystick(DIJ_BUTTON0) || opengl.di.QueryJoystick(DIJ_BUTTON1)*/ ) { // Select this option - if (starsel > 1.4f) + switch (selOption) { + case optStart: state = msFadeToStart; - else if (highsel > 1.4f) + break; + case optScore: state = msFadeToHigh; - else if (optsel > 1.4f) + break; + case optOptions: state = msFadeToOpt; - else if (exitsel > 1.4f) + break; + case optExit: state = msFadeToExit; + break; + } + input.ResetKey(SDLK_RETURN); /*opengl.di.ResetProp(DIJ_BUTTON0); opengl.di.ResetProp(DIJ_BUTTON1);*/ @@ -147,17 +135,17 @@ void MainMenu::Process() // See what menu state we're in if (state == msFadeIn) { // Apply the fade to the menu items - if (fade >= 1.0f) { + if (fade >= 1.0) { // Switch to the next state state = msInMenu; - fade = 1.0f; + fade = 1.0; } else fade += MENU_FADE_SPEED; } else if (state == msFadeToStart) { // Apply fade - if (fade <= 0.0f) { + if (fade <= 0.0) { // Move to the game screen sm.SelectScreen("GAME"); Game *g = static_cast(sm.GetScreenById("GAME")); @@ -165,7 +153,7 @@ void MainMenu::Process() } else { fade -= MENU_FADE_SPEED; - starsel += 0.5f; + bigness += 0.5f; } } else if (state == msFadeToHigh) { @@ -177,7 +165,7 @@ void MainMenu::Process() } else { fade -= MENU_FADE_SPEED; - highsel += 0.5f; + bigness += 0.5f; } } else if (state == msFadeToOpt) { @@ -189,7 +177,7 @@ void MainMenu::Process() } else { fade -= MENU_FADE_SPEED; - optsel += 0.5f; + bigness += 0.5f; } } else if (state == msFadeToExit) { @@ -200,7 +188,7 @@ void MainMenu::Process() } else { fade -= MENU_FADE_SPEED; - exitsel += 0.5f; + bigness += 0.5f; } } @@ -230,10 +218,10 @@ void MainMenu::Display() } // Draw logo and menu items - opengl.DrawBlendScale(&start, fade, starsel); - opengl.DrawBlendScale(&highscore, fade, highsel); - opengl.DrawBlendScale(&options, fade, optsel); - opengl.DrawBlendScale(&exit, fade, exitsel); + startOpt.Display(selOption == optStart, bigness, fade); + scoreOpt.Display(selOption == optScore, bigness, fade); + optionsOpt.Display(selOption == optOptions, bigness, fade); + exitOpt.Display(selOption == optExit, bigness, fade); FreeType &ft = FreeType::GetInstance(); @@ -243,13 +231,13 @@ void MainMenu::Display() // Draw some hint texts const int numhints = 7; const char *hints[][2] = { - { "Use the arrow keys to rotate the ship", "" }, - { "Press the up arrow to fire the thruster", "" }, - { "Smaller landing pads give you more points", "" }, - { "Press P to pause the game", "" }, - { "Press escape to self destruct", "" }, - { "You can only land safely when the", "speed bar is green" }, - { "Collect the spinning rings to", "unlock the landing pads" } + { "Use the arrow keys to rotate the ship", "" }, + { "Press the up arrow to fire the thruster", "" }, + { "Smaller landing pads give you more points", "" }, + { "Press P to pause the game", "" }, + { "Press escape to self destruct", "" }, + { "You can only land safely when the", "speed bar is green" }, + { "Collect the spinning rings to", "unlock the landing pads" } }; if (hint_timeout == 0) { @@ -288,7 +276,7 @@ MenuStar::MenuStar() vel = Velocity::Project(SPEED, angle); } -void MenuStar::Display(float fade) +void MenuStar::Display(double fade) { starImage->Draw(pos.GetX(), pos.GetY(), starRotate, scale); starRotate += ROTATE_SPEED; @@ -309,3 +297,17 @@ bool MenuStar::Move() || pos.GetX() + starImage->GetWidth() < 0 || pos.GetY() + starImage->GetWidth() < 0); } + +MenuOption::MenuOption(const char *imgFile, int off, int order) + : image(imgFile) +{ + y = (OpenGL::GetInstance().GetHeight() - off) / 2 + (order*image.GetHeight()); +} + +void MenuOption::Display(bool selected, double bigness, double fade) const +{ + int x = (OpenGL::GetInstance().GetWidth() - image.GetWidth()) / 2; + double scale = selected ? (bigness > SEL_ENLARGE ? bigness : SEL_ENLARGE) : 1.0; + double white = selected ? 1.0 : UNSEL_DIM; + image.Draw(x, y, 0.0, scale, fade, white); +} diff --git a/src/Menu.hpp b/src/Menu.hpp index 6065709..e9a0b6b 100644 --- a/src/Menu.hpp +++ b/src/Menu.hpp @@ -24,16 +24,13 @@ #include "Mechanics.hpp" #include "Image.hpp" -#define MENU_FADE_SPEED 0.1f -#define HINT_DISPLAY_TIME 140 - class MenuStar { public: MenuStar(); bool Move(); - void Display(float fade=1.0f); + void Display(double fade=1.0); private: static const double ROTATE_SPEED, ENLARGE_RATE, INIT_SCALE, SPEED; @@ -47,27 +44,44 @@ private: static Image *starImage; }; +class MenuOption { +public: + MenuOption(const char *imgFile, int off, int order); + + void Display(bool selected, double bigness, double fade) const; + +private: + Image image; + int y; + + static const double SEL_ENLARGE, UNSEL_DIM; +}; + class MainMenu : public Screen { public: - MainMenu() : hasloaded(false) { } + MainMenu(); virtual ~MainMenu() { } void Load(); void Process(); void Display(); + private: enum MenuState { msFadeIn, msInMenu, msFadeToStart, msFadeToHigh, msFadeToOpt, msFadeToExit }; - - TextureQuad logo, start, highscore, options, exit; - float fade, starsel, highsel, optsel, exitsel; - bool hasloaded; - GLuint uStartTexture, uHighTexture, uOptionsTexture, uExitTexture; + enum SelOption { optStart, optScore, optOptions, optExit }; + + MenuOption startOpt, scoreOpt, optionsOpt, exitOpt; + SelOption selOption; + double fade, bigness; MenuState state; int hint_timeout, hintidx; - static const unsigned MAX_STARS = 80; + static const int OPTIONS_OFFSET, HINT_DISPLAY_TIME; + static const double MENU_FADE_SPEED; + + static const unsigned MAX_STARS; typedef vector StarList; typedef StarList::iterator StarListIt; vector stars; diff --git a/src/ScreenManager.cpp b/src/ScreenManager.cpp index ea916bb..51121d2 100644 --- a/src/ScreenManager.cpp +++ b/src/ScreenManager.cpp @@ -94,3 +94,8 @@ void ScreenManager::Display() active.ptr->Display(); } } + +void ScreenManager::RemoveAllScreens() +{ + screens.clear(); +} diff --git a/src/ScreenManager.hpp b/src/ScreenManager.hpp index 2711846..de48733 100644 --- a/src/ScreenManager.hpp +++ b/src/ScreenManager.hpp @@ -45,6 +45,7 @@ public: void SelectScreen(const string id); void Process(); void Display(); + void RemoveAllScreens(); Screen *GetScreenById(const char *id) const; private: -- 2.39.2