Andreas Garmannslund / Mbed 2 deprecated SimplePlatformGame

Dependencies:   N5110 PinDetect PowerControl mbed

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?

UserRevisionLine numberNew 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 }