ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Thu Apr 04 18:19:26 2019 +0000
Revision:
14:9861fe85c803
Parent:
13:bcf6bb69c597
Child:
18:304700b5d8f8
Same functionality as last commit, large functions have been broken up into smaller ones and every .cpp file commented.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 9:fff2009f826e 1 #include "Menu.h"
lewisgw 9:fff2009f826e 2
lewisgw 14:9861fe85c803 3 // Define the finite state machine for three different states: running game, display
lewisgw 14:9861fe85c803 4 // menu and display controls, {ouput,{a,b,c,d}} where a,b,c,d are inputs.
lewisgw 14:9861fe85c803 5 // The ouputs have been assigned to 0,1,2.
lewisgw 14:9861fe85c803 6 // There are four different relevent input combinations that have been assigned to
lewisgw 14:9861fe85c803 7 // 0,1,2,3.
lewisgw 12:ebaefda53dd0 8 State _fsm[3] = {
lewisgw 13:bcf6bb69c597 9 {0,{0,1,0,0}},
lewisgw 12:ebaefda53dd0 10 {1,{1,1,0,2}},
lewisgw 13:bcf6bb69c597 11 {2,{2,1,2,0}}
lewisgw 12:ebaefda53dd0 12 };
lewisgw 11:b66170249a26 13
lewisgw 14:9861fe85c803 14 // Constructor and distructor
lewisgw 9:fff2009f826e 15 Menu::Menu() {}
lewisgw 9:fff2009f826e 16
lewisgw 9:fff2009f826e 17 Menu::~Menu() {}
lewisgw 9:fff2009f826e 18
lewisgw 9:fff2009f826e 19 void Menu::init() {
lewisgw 14:9861fe85c803 20 // Initialise at the highest level, starting state is the menu.
lewisgw 12:ebaefda53dd0 21 _state = 1;
lewisgw 12:ebaefda53dd0 22 _controller.init();
lewisgw 12:ebaefda53dd0 23 }
lewisgw 12:ebaefda53dd0 24
lewisgw 12:ebaefda53dd0 25 void Menu::run(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 26 set_input(gamepad.check_event(Gamepad::START_PRESSED),
lewisgw 13:bcf6bb69c597 27 gamepad.check_event(Gamepad::BACK_PRESSED),
lewisgw 13:bcf6bb69c597 28 gamepad.check_event(Gamepad::X_PRESSED));
lewisgw 14:9861fe85c803 29 // Select the current output, execute that output via the output function
lewisgw 14:9861fe85c803 30 // and update to the next state depending on the input.
lewisgw 12:ebaefda53dd0 31 _output = _fsm[_state].output;
lewisgw 12:ebaefda53dd0 32 output(lcd, gamepad);
lewisgw 12:ebaefda53dd0 33 _state = _fsm[_state].next_state[_menu_input];
lewisgw 12:ebaefda53dd0 34 }
lewisgw 12:ebaefda53dd0 35
lewisgw 12:ebaefda53dd0 36 void Menu::output(N5110 &lcd, Gamepad &gamepad) {
lewisgw 14:9861fe85c803 37 // 0, 1 and 2 have been assigned to the output of each state respectivley.
lewisgw 12:ebaefda53dd0 38 if (_output == 0) {
lewisgw 12:ebaefda53dd0 39 run_game(lcd, gamepad);
lewisgw 12:ebaefda53dd0 40 } else if (_output == 1) {
lewisgw 12:ebaefda53dd0 41 display_menu(lcd, gamepad);
lewisgw 12:ebaefda53dd0 42 } else {
lewisgw 12:ebaefda53dd0 43 display_controls(lcd, gamepad);
lewisgw 12:ebaefda53dd0 44 }
lewisgw 9:fff2009f826e 45 }
lewisgw 9:fff2009f826e 46
lewisgw 13:bcf6bb69c597 47 void Menu::set_input(bool start, bool back, bool x) {
lewisgw 14:9861fe85c803 48 // 0, 1, 2, 3 have been assigned to each relevent input combination:
lewisgw 14:9861fe85c803 49 // if nothing is pressed, input = 0.
lewisgw 14:9861fe85c803 50 // if only back is pressed, input = 1.
lewisgw 14:9861fe85c803 51 // if only start is pressed, input = 2.
lewisgw 14:9861fe85c803 52 // if only X is pressed, input = 3.
lewisgw 13:bcf6bb69c597 53 if (!start && !back && !x) {
lewisgw 12:ebaefda53dd0 54 _menu_input = 0;
lewisgw 12:ebaefda53dd0 55 } else if (!start && back) {
lewisgw 12:ebaefda53dd0 56 _menu_input = 1;
lewisgw 12:ebaefda53dd0 57 } else if (start && !back) {
lewisgw 12:ebaefda53dd0 58 _menu_input = 2;
lewisgw 13:bcf6bb69c597 59 } else if (x) {
lewisgw 12:ebaefda53dd0 60 _menu_input = 3;
lewisgw 12:ebaefda53dd0 61 }
lewisgw 12:ebaefda53dd0 62 }
lewisgw 12:ebaefda53dd0 63
lewisgw 12:ebaefda53dd0 64 void Menu::run_game(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 65 _controller.run_game_engine(lcd, gamepad);
lewisgw 11:b66170249a26 66 }
lewisgw 11:b66170249a26 67
lewisgw 13:bcf6bb69c597 68 void Menu::display_controls(N5110 &lcd, Gamepad &gamepad) {
lewisgw 13:bcf6bb69c597 69 lcd.printString("JOYSTICK:",0,0);
lewisgw 13:bcf6bb69c597 70 lcd.printString("-Move left",0,1);
lewisgw 13:bcf6bb69c597 71 lcd.printString("-Move right",0,2);
lewisgw 13:bcf6bb69c597 72 lcd.printString("-Duck",0,3);
lewisgw 13:bcf6bb69c597 73 lcd.printString("A:",0,4);
lewisgw 13:bcf6bb69c597 74 lcd.printString("-Jump (back)",0,5);
lewisgw 13:bcf6bb69c597 75 }
lewisgw 12:ebaefda53dd0 76
lewisgw 12:ebaefda53dd0 77 void Menu::display_menu(N5110 &lcd, Gamepad &gamepad) {
lewisgw 14:9861fe85c803 78 // Displays the menu and resets the controller to ensure a new game is
lewisgw 14:9861fe85c803 79 // ready to start when the state is switched to run game.
lewisgw 13:bcf6bb69c597 80 _controller.init();
lewisgw 13:bcf6bb69c597 81 lcd.printString("Menu",30,0);
lewisgw 13:bcf6bb69c597 82 lcd.printString("START- Play!",0,1);
lewisgw 13:bcf6bb69c597 83 lcd.printString("X- Controls",0,2);
lewisgw 9:fff2009f826e 84 }