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: N5110 PinDetect PowerControl mbed
MainMenu.cpp@7:678873947b29, 2015-05-01 (annotated)
- Committer:
- Siriagus
- Date:
- Fri May 01 18:10:59 2015 +0000
- Revision:
- 7:678873947b29
- Parent:
- 6:edb48de563a9
- Child:
- 10:f2488a0ecab7
Fixed bug in State.h: Not setting fsm variable. State classes can now request the state to be changed.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Siriagus | 5:100d960fc6d5 | 1 | #include "MainMenu.h" |
Siriagus | 5:100d960fc6d5 | 2 | |
Siriagus | 6:edb48de563a9 | 3 | enum MenuState {SELECT_PLAY, SELECT_HIGHSCORES, SELECT_CONTROLS, LOAD_GAME, HIGHSCORES, CONTROLS}; |
Siriagus | 6:edb48de563a9 | 4 | // Static variables for internal fsm |
Siriagus | 6:edb48de563a9 | 5 | const int MainMenu::MENU_FSM[6][3] = { |
Siriagus | 6:edb48de563a9 | 6 | {LOAD_GAME, SELECT_PLAY, SELECT_HIGHSCORES}, // State: SELECT_PLAY |
Siriagus | 6:edb48de563a9 | 7 | {HIGHSCORES, SELECT_HIGHSCORES, SELECT_CONTROLS}, // State: SELECT_HIGHSCORES |
Siriagus | 6:edb48de563a9 | 8 | {CONTROLS, SELECT_CONTROLS, SELECT_PLAY}, // State: SELECT_CONTROLS |
Siriagus | 6:edb48de563a9 | 9 | {LOAD_GAME, LOAD_GAME, LOAD_GAME}, // State: LOAD_GAME |
Siriagus | 6:edb48de563a9 | 10 | {SELECT_HIGHSCORES, SELECT_HIGHSCORES, HIGHSCORES}, // State: HIGHSCORES |
Siriagus | 6:edb48de563a9 | 11 | {SELECT_CONTROLS, SELECT_CONTROLS, CONTROLS} // State: CONTROLS |
Siriagus | 6:edb48de563a9 | 12 | }; |
Siriagus | 6:edb48de563a9 | 13 | |
Siriagus | 6:edb48de563a9 | 14 | int MainMenu::currentState; |
Siriagus | 6:edb48de563a9 | 15 | |
Siriagus | 6:edb48de563a9 | 16 | // Callback functions (needs to be static) |
Siriagus | 6:edb48de563a9 | 17 | void MainMenu::btnAPress() |
Siriagus | 6:edb48de563a9 | 18 | { |
Siriagus | 6:edb48de563a9 | 19 | currentState = MENU_FSM[currentState][0]; |
Siriagus | 6:edb48de563a9 | 20 | } |
Siriagus | 6:edb48de563a9 | 21 | |
Siriagus | 6:edb48de563a9 | 22 | void MainMenu::btnBPress() |
Siriagus | 6:edb48de563a9 | 23 | { |
Siriagus | 6:edb48de563a9 | 24 | currentState = MENU_FSM[currentState][1]; |
Siriagus | 6:edb48de563a9 | 25 | } |
Siriagus | 6:edb48de563a9 | 26 | |
Siriagus | 6:edb48de563a9 | 27 | void MainMenu::btnCPress() |
Siriagus | 6:edb48de563a9 | 28 | { |
Siriagus | 6:edb48de563a9 | 29 | currentState = MENU_FSM[currentState][2]; |
Siriagus | 6:edb48de563a9 | 30 | } |
Siriagus | 6:edb48de563a9 | 31 | |
Siriagus | 5:100d960fc6d5 | 32 | void MainMenu::init() |
Siriagus | 5:100d960fc6d5 | 33 | { |
Siriagus | 6:edb48de563a9 | 34 | MainMenu::currentState = SELECT_PLAY; |
Siriagus | 6:edb48de563a9 | 35 | input->addBtnPressInterrupt(input->btnA, &btnAPress); |
Siriagus | 6:edb48de563a9 | 36 | input->addBtnPressInterrupt(input->btnB, &btnBPress); |
Siriagus | 6:edb48de563a9 | 37 | input->addBtnPressInterrupt(input->btnC, &btnCPress); |
Siriagus | 5:100d960fc6d5 | 38 | } |
Siriagus | 5:100d960fc6d5 | 39 | |
Siriagus | 7:678873947b29 | 40 | void MainMenu::update(float dt) |
Siriagus | 5:100d960fc6d5 | 41 | { |
Siriagus | 5:100d960fc6d5 | 42 | |
Siriagus | 5:100d960fc6d5 | 43 | } |
Siriagus | 5:100d960fc6d5 | 44 | |
Siriagus | 5:100d960fc6d5 | 45 | void MainMenu::render() |
Siriagus | 5:100d960fc6d5 | 46 | { |
Siriagus | 6:edb48de563a9 | 47 | switch (currentState) |
Siriagus | 6:edb48de563a9 | 48 | { |
Siriagus | 6:edb48de563a9 | 49 | case SELECT_PLAY: |
Siriagus | 6:edb48de563a9 | 50 | lcd->printString(">Play", 10, 1); |
Siriagus | 6:edb48de563a9 | 51 | lcd->printString("High Scores", 10, 2); |
Siriagus | 6:edb48de563a9 | 52 | lcd->printString("Controls", 10, 3); |
Siriagus | 6:edb48de563a9 | 53 | break; |
Siriagus | 6:edb48de563a9 | 54 | |
Siriagus | 6:edb48de563a9 | 55 | case SELECT_HIGHSCORES: |
Siriagus | 6:edb48de563a9 | 56 | lcd->printString("Play", 10, 1); |
Siriagus | 6:edb48de563a9 | 57 | lcd->printString(">High Scores", 10, 2); |
Siriagus | 6:edb48de563a9 | 58 | lcd->printString("Controls", 10, 3); |
Siriagus | 6:edb48de563a9 | 59 | break; |
Siriagus | 6:edb48de563a9 | 60 | |
Siriagus | 6:edb48de563a9 | 61 | case SELECT_CONTROLS: |
Siriagus | 6:edb48de563a9 | 62 | lcd->printString("Play", 10, 1); |
Siriagus | 6:edb48de563a9 | 63 | lcd->printString("High Scores", 10, 2); |
Siriagus | 6:edb48de563a9 | 64 | lcd->printString(">Controls", 10, 3); |
Siriagus | 6:edb48de563a9 | 65 | break; |
Siriagus | 6:edb48de563a9 | 66 | |
Siriagus | 6:edb48de563a9 | 67 | case HIGHSCORES: |
Siriagus | 6:edb48de563a9 | 68 | // Placeholder TODO: Actually high scores |
Siriagus | 6:edb48de563a9 | 69 | lcd->printString("High Scores", 10, 0); |
Siriagus | 6:edb48de563a9 | 70 | lcd->printString("AND 1000000", 10, 1); |
Siriagus | 6:edb48de563a9 | 71 | lcd->printString("AND 500000", 10, 2); |
Siriagus | 6:edb48de563a9 | 72 | lcd->printString("AND 100", 10, 3); |
Siriagus | 6:edb48de563a9 | 73 | lcd->printString(">Back", 10, 4); |
Siriagus | 6:edb48de563a9 | 74 | break; |
Siriagus | 6:edb48de563a9 | 75 | |
Siriagus | 6:edb48de563a9 | 76 | case CONTROLS: |
Siriagus | 6:edb48de563a9 | 77 | lcd->printString("Controls", 10, 0); |
Siriagus | 6:edb48de563a9 | 78 | lcd->printString("A: Jump", 10, 1); |
Siriagus | 6:edb48de563a9 | 79 | lcd->printString("B: Shoot", 10, 2); |
Siriagus | 6:edb48de563a9 | 80 | lcd->printString("C: Pause", 10, 3); |
Siriagus | 6:edb48de563a9 | 81 | lcd->printString(">Back", 10, 4); |
Siriagus | 6:edb48de563a9 | 82 | break; |
Siriagus | 6:edb48de563a9 | 83 | |
Siriagus | 6:edb48de563a9 | 84 | case LOAD_GAME: |
Siriagus | 6:edb48de563a9 | 85 | lcd->printString("Loading...", 10, 2); |
Siriagus | 7:678873947b29 | 86 | requestStateChange(GAME); |
Siriagus | 6:edb48de563a9 | 87 | break; |
Siriagus | 6:edb48de563a9 | 88 | |
Siriagus | 6:edb48de563a9 | 89 | default: |
Siriagus | 6:edb48de563a9 | 90 | error("MainMenu: Invalid internal state"); |
Siriagus | 6:edb48de563a9 | 91 | |
Siriagus | 6:edb48de563a9 | 92 | } |
Siriagus | 5:100d960fc6d5 | 93 | } |