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
Diff: MainMenu.cpp
- Revision:
- 6:edb48de563a9
- Parent:
- 5:100d960fc6d5
- Child:
- 7:678873947b29
--- a/MainMenu.cpp Fri May 01 09:10:23 2015 +0000
+++ b/MainMenu.cpp Fri May 01 09:44:38 2015 +0000
@@ -1,8 +1,40 @@
#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(time_t dt)
@@ -12,5 +44,49 @@
void MainMenu::render()
{
- lcd->printString("Main Menu", 10, 1);
+ 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);
+ break;
+
+ default:
+ error("MainMenu: Invalid internal state");
+
+ }
}
\ No newline at end of file