ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Mon Apr 01 18:06:55 2019 +0000
Revision:
12:ebaefda53dd0
Parent:
11:b66170249a26
Child:
13:bcf6bb69c597
Added the structure of a finite state machine ready to implement a working menu

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 9:fff2009f826e 1 #include "Menu.h"
lewisgw 9:fff2009f826e 2
lewisgw 12:ebaefda53dd0 3 State _fsm[3] = {
lewisgw 12:ebaefda53dd0 4 {0,{0,1,0,1}},
lewisgw 12:ebaefda53dd0 5 {1,{1,1,0,2}},
lewisgw 12:ebaefda53dd0 6 {2,{2,1,2,1}}
lewisgw 12:ebaefda53dd0 7 };
lewisgw 11:b66170249a26 8
lewisgw 9:fff2009f826e 9 Menu::Menu() {}
lewisgw 9:fff2009f826e 10
lewisgw 9:fff2009f826e 11 Menu::~Menu() {}
lewisgw 9:fff2009f826e 12
lewisgw 9:fff2009f826e 13 void Menu::init() {
lewisgw 12:ebaefda53dd0 14 _state = 1;
lewisgw 12:ebaefda53dd0 15 _controller.init();
lewisgw 12:ebaefda53dd0 16 }
lewisgw 12:ebaefda53dd0 17
lewisgw 12:ebaefda53dd0 18 void Menu::run(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 19 set_input(gamepad.check_event(Gamepad::START_PRESSED),
lewisgw 12:ebaefda53dd0 20 gamepad.check_event(Gamepad::BACK_PRESSED));
lewisgw 12:ebaefda53dd0 21 _output = _fsm[_state].output;
lewisgw 12:ebaefda53dd0 22 output(lcd, gamepad);
lewisgw 12:ebaefda53dd0 23 _state = _fsm[_state].next_state[_menu_input];
lewisgw 12:ebaefda53dd0 24 }
lewisgw 12:ebaefda53dd0 25
lewisgw 12:ebaefda53dd0 26 void Menu::output(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 27 if (_output == 0) {
lewisgw 12:ebaefda53dd0 28 run_game(lcd, gamepad);
lewisgw 12:ebaefda53dd0 29 } else if (_output == 1) {
lewisgw 12:ebaefda53dd0 30 display_menu(lcd, gamepad);
lewisgw 12:ebaefda53dd0 31 } else {
lewisgw 12:ebaefda53dd0 32 display_controls(lcd, gamepad);
lewisgw 12:ebaefda53dd0 33 }
lewisgw 9:fff2009f826e 34 }
lewisgw 9:fff2009f826e 35
lewisgw 12:ebaefda53dd0 36 void Menu::set_input(bool start, bool back) {
lewisgw 12:ebaefda53dd0 37 if (!start && !back) {
lewisgw 12:ebaefda53dd0 38 _menu_input = 0;
lewisgw 12:ebaefda53dd0 39 } else if (!start && back) {
lewisgw 12:ebaefda53dd0 40 _menu_input = 1;
lewisgw 12:ebaefda53dd0 41 } else if (start && !back) {
lewisgw 12:ebaefda53dd0 42 _menu_input = 2;
lewisgw 12:ebaefda53dd0 43 } else {
lewisgw 12:ebaefda53dd0 44 _menu_input = 3;
lewisgw 12:ebaefda53dd0 45 }
lewisgw 12:ebaefda53dd0 46 }
lewisgw 12:ebaefda53dd0 47
lewisgw 12:ebaefda53dd0 48 void Menu::run_game(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 49 _controller.run_game_engine(lcd, gamepad);
lewisgw 11:b66170249a26 50 }
lewisgw 11:b66170249a26 51
lewisgw 12:ebaefda53dd0 52 void Menu::display_controls(N5110 &lcd, Gamepad &gamepad) {}
lewisgw 12:ebaefda53dd0 53
lewisgw 12:ebaefda53dd0 54 void Menu::display_menu(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 55 _controller.init();
lewisgw 9:fff2009f826e 56 }