summaryrefslogtreecommitdiff
path: root/noncore/games/sfcave-sdl/menu.cpp
Side-by-side diff
Diffstat (limited to 'noncore/games/sfcave-sdl/menu.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/sfcave-sdl/menu.cpp43
1 files changed, 33 insertions, 10 deletions
diff --git a/noncore/games/sfcave-sdl/menu.cpp b/noncore/games/sfcave-sdl/menu.cpp
index 0a7366f..a4a4216 100644
--- a/noncore/games/sfcave-sdl/menu.cpp
+++ b/noncore/games/sfcave-sdl/menu.cpp
@@ -1,23 +1,23 @@
#include <SDL_image.h>
#include "SDL_rotozoom.h"
#include "constants.h"
#include "sfcave.h"
#include "game.h"
#include "menu.h"
#include "font.h"
#include "starfield.h"
-MenuOption :: MenuOption( QString text, int id )
+MenuOption :: MenuOption( string text, int id )
{
menuText = text;
menuId = id;
nextMenu = 0;
highlighted = false;
}
MenuOption :: ~MenuOption()
{
}
@@ -106,44 +106,69 @@ Menu :: Menu( SFCave *p )
Menu *gameType = new Menu( options );
item = gameType->addMenuOption( "SFCave", MENU_GAME_SFCAVE );
item->setNextMenu( options );
item = gameType->addMenuOption( "Gates", MENU_GAME_GATES );
item->setNextMenu( options );
item = gameType->addMenuOption( "Fly", MENU_GAME_FLY );
item->setNextMenu( options );
item = gameType->addMenuOption( "Back", MENU_BACK );
item->setNextMenu( options );
typeMenu->setNextMenu( gameType );
// Game Difficulty menu
+ MenuOption *customMenu = 0;
Menu *gameDifficulty = new Menu( options );
item = gameDifficulty->addMenuOption( "Easy", MENU_DIFFICULTY_EASY );
item->setNextMenu( options, false );
item = gameDifficulty->addMenuOption( "Normal", MENU_DIFFICULTY_NORMAL );
item->setNextMenu( options, false );
item = gameDifficulty->addMenuOption( "Hard", MENU_DIFFICULTY_HARD );
item->setNextMenu( options, false );
+ customMenu = gameDifficulty->addMenuOption( "Custom", MENU_DIFFICULTY_CUSTOM );
item = gameDifficulty->addMenuOption( "Back", MENU_BACK );
item->setNextMenu( options, false );
difficultyMenu->setNextMenu( gameDifficulty );
// Sounds Menu
Menu *sounds = new Menu( options );
sounds->addMenuOption( "Sound On", MENU_SOUND_ON );
sounds->addMenuOption( "Sound Off", MENU_SOUND_OFF );
sounds->addMenuOption( "Music On", MENU_MUSIC_ON );
sounds->addMenuOption( "Music Off", MENU_MUSIC_OFF );
item = sounds->addMenuOption( "Back", MENU_BACK );
item->setNextMenu( options, false );
soundsMenu->setNextMenu( sounds );
+
+ // Custom Menu
+ Menu *custom = new Menu( gameDifficulty );
+ Menu *updown = new Menu( custom );
+ item = custom->addMenuOption( "Thrust", MENU_CUSTOM_THRUST );
+ item->setNextMenu( updown );
+ item = custom->addMenuOption( "Gravity", MENU_CUSTOM_GRAVITY );
+ item->setNextMenu( updown );
+ item = custom->addMenuOption( "Max Speed Up", MENU_CUSTOM_MAXSPEEDUP );
+ item->setNextMenu( updown );
+ item = custom->addMenuOption( "Max Speed Down", MENU_CUSTOM_MAXSPEEDDOWN );
+ item->setNextMenu( updown );
+ item = custom->addMenuOption( "Back", MENU_BACK );
+ item->setNextMenu( gameDifficulty, false );
+ customMenu->setNextMenu( custom );
+
+ // Up down menu
+ item = updown->addMenuOption( "Increase", MENU_CUSTOM_INCREASE );
+ item = updown->addMenuOption( "Decrease", MENU_CUSTOM_DECREASE );
+ item = updown->addMenuOption( "Save", MENU_CUSTOM_SAVE );
+ item->setNextMenu( custom, false );
+ item = updown->addMenuOption( "Cancel", MENU_CUSTOM_CANCEL );
+ item->setNextMenu( custom, false );
// Set static variables for menu selection up
mainMenu = this;
currentMenuOption = 0;
resetToTopMenu();
angle = 0;
stars = new StarField;
}
@@ -206,25 +231,24 @@ void Menu :: draw( SDL_Surface *screen )
list<MenuOption *>::iterator it;
for ( it = currentMenu->listItems.begin(); it != currentMenu->listItems.end() ; ++it )
{
y += (*it)->draw( screen, y ) + 2;
}
}
int Menu :: handleKeys( SDL_KeyboardEvent &key )
{
if ( key.type != SDL_KEYDOWN )
return -1;
- statusText = "";
switch( key.keysym.sym )
{
case SDLK_DOWN:
{
// Move to next menu item
currentMenu->currentMenuOption->highlight( false );
list<MenuOption *>::iterator it;
for ( it = currentMenu->listItems.begin(); it != currentMenu->listItems.end() ; ++it )
{
if ( (*it) == currentMenu->currentMenuOption )
{
@@ -267,62 +291,61 @@ int Menu :: handleKeys( SDL_KeyboardEvent &key )
if ( reachedBeginning )
currentMenu->currentMenuOption = currentMenu->listItems.back();
else
currentMenu->currentMenuOption = *it;
currentMenu->currentMenuOption->highlight( true );
break;
}
case SDLK_LEFT:
if ( currentMenu->parentMenu != 0 )
{
+ statusText = "";
currentMenu = currentMenu->parentMenu;
- printf( "HERE\n" );
return -1;
}
break;
case SDLK_RETURN:
case SDLK_SPACE:
{
+ statusText = "";
// select menu item
int id = currentMenu->currentMenuOption->getMenuId();
-// // if the current item has a child menu then move to that menu
+
+ // if the current item has a child menu then move to that menu
Menu *next = currentMenu->currentMenuOption->getNextMenu();
if ( next != 0 )
{
bool down = currentMenu->currentMenuOption->isDownMenuTree();
currentMenu = next;
if ( down )
initCurrentMenu();
-// return -1;
- }
-// else
- {
- return id;
}
+ return id;
+
break;
}
default:
break;
}
return -1;
}
-MenuOption *Menu :: addMenuOption( QString text, int id )
+MenuOption *Menu :: addMenuOption( string text, int id )
{
MenuOption *item = new MenuOption( text, id );
listItems.push_back( item );
return item;
}
void Menu :: resetToTopMenu()
{
currentMenu = mainMenu;
initCurrentMenu();