Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed N5110 ShiftReg PinDetect
MainMenu.cpp
- Committer:
- Siriagus
- Date:
- 2015-05-01
- Revision:
- 7:678873947b29
- Parent:
- 6:edb48de563a9
- Child:
- 10:f2488a0ecab7
File content as of revision 7:678873947b29:
#include "MainMenu.h"
enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS};
// Static variables for internal fsm
const int MainMenu::MENU_FSM[6][3] = {
{LOAD_GAME, SELECT_PLAY, SELECT_HIGHSCORES}, // State: SELECT_PLAY
{HIGHSCORES, SELECT_HIGHSCORES, SELECT_CONTROLS}, // State: SELECT_HIGHSCORES
{CONTROLS, SELECT_CONTROLS, SELECT_PLAY}, // State: SELECT_CONTROLS
{LOAD_GAME, LOAD_GAME, LOAD_GAME}, // State: LOAD_GAME
{SELECT_HIGHSCORES, SELECT_HIGHSCORES, HIGHSCORES}, // State: HIGHSCORES
{SELECT_CONTROLS, SELECT_CONTROLS, CONTROLS} // State: CONTROLS
};
int MainMenu::currentState;
// Callback functions (needs to be static)
void MainMenu::btnAPress()
{
currentState = MENU_FSM[currentState][0];
}
void MainMenu::btnBPress()
{
currentState = MENU_FSM[currentState][1];
}
void MainMenu::btnCPress()
{
currentState = MENU_FSM[currentState][2];
}
void MainMenu::init()
{
MainMenu::currentState = SELECT_PLAY;
input->addBtnPressInterrupt(input->btnA, &btnAPress);
input->addBtnPressInterrupt(input->btnB, &btnBPress);
input->addBtnPressInterrupt(input->btnC, &btnCPress);
}
void MainMenu::update(float dt)
{
}
void MainMenu::render()
{
switch (currentState)
{
case SELECT_PLAY:
lcd->printString(">Play", 10, 1);
lcd->printString("High Scores", 10, 2);
lcd->printString("Controls", 10, 3);
break;
case SELECT_HIGHSCORES:
lcd->printString("Play", 10, 1);
lcd->printString(">High Scores", 10, 2);
lcd->printString("Controls", 10, 3);
break;
case SELECT_CONTROLS:
lcd->printString("Play", 10, 1);
lcd->printString("High Scores", 10, 2);
lcd->printString(">Controls", 10, 3);
break;
case HIGHSCORES:
// Placeholder TODO: Actually high scores
lcd->printString("High Scores", 10, 0);
lcd->printString("AND 1000000", 10, 1);
lcd->printString("AND 500000", 10, 2);
lcd->printString("AND 100", 10, 3);
lcd->printString(">Back", 10, 4);
break;
case CONTROLS:
lcd->printString("Controls", 10, 0);
lcd->printString("A: Jump", 10, 1);
lcd->printString("B: Shoot", 10, 2);
lcd->printString("C: Pause", 10, 3);
lcd->printString(">Back", 10, 4);
break;
case LOAD_GAME:
lcd->printString("Loading...", 10, 2);
requestStateChange(GAME);
break;
default:
error("MainMenu: Invalid internal state");
}
}