ELEC2645 (2018/19) / Mbed 2 deprecated el17ebs

Dependencies:   mbed FATFileSystem

Revision:
3:a8960004d261
Parent:
2:81cfa8310f55
Child:
4:035448357749
--- a/Menu/Menu.cpp	Wed Mar 20 18:23:22 2019 +0000
+++ b/Menu/Menu.cpp	Fri Mar 29 18:45:40 2019 +0000
@@ -16,6 +16,12 @@
 
 //public methods
 
+void Menu::init()
+{
+    _cursor_pos = START; //cursor begins on start
+
+}
+//prints welcome screen
 void Menu::print_welcome(N5110 &lcd)
 {
     lcd.clear();
@@ -24,28 +30,46 @@
     lcd.printString("by",0,2);
     lcd.printString("Ellis Blackford Stroud",0,3);
     lcd.refresh();
+    wait(1);
+    lcd.clear();
+    lcd.printString("Use joystick",0,1);
+    lcd.printString("and START/BACK",0,2);
+    lcd.printString("to navigate menu !",0,3);
+    lcd.refresh();
+    wait(1);
 }
-
+//prints main menu screen
 void Menu::print_menu(N5110 &lcd)
 {
     lcd.clear();
-    lcd.printString("Use joystick",0,2);
-    lcd.printString("to select !",0,3);
-    wait(2);
-    lcd.clear();
     lcd.printString("Start Game",10,0);
     lcd.printString("Highscores",10,2);
     lcd.printString("Settings",10,4);
     lcd.refresh();
 }
-
+//prints start screen and waits to start game
+bool Menu::check_start(N5110 &lcd, Gamepad &pad)
+{
+    lcd.clear();
+    lcd.printString("Press A ?",8,2);
+    lcd.printString("to start?",8,3);
+    lcd.refresh();
+    while(pad.check_event(Gamepad::A_PRESSED) == false) {
+        wait(0.2);
+    }
+    lcd.clear();
+    lcd.refresh();
+    printf("GAME STARTED");
+    return true;
+}
+//prints highscores screen
 void Menu::print_highscores(N5110 &lcd)
 {
     lcd.clear();
     lcd.printString("Highscores",0,2);
     lcd.refresh();
 }
-
+//prints settings screen
 void Menu::print_settings(N5110 &lcd)
 {
     lcd.clear();
@@ -53,77 +77,122 @@
     lcd.refresh();
 }
 
-void Menu::print_start(N5110 &lcd)
+//changes menu screen using cursor position and returns true if begin start 
+bool Menu::menu_change(N5110 &lcd, Gamepad &pad) 
 {
-    lcd.clear();
-    lcd.printString("Start?",0,2);
-    lcd.refresh();
+    int m = _cursor_pos;
+    
+    switch(m) { //uses cursor position to select next screen
+        case 0:
+            //returns true if start game
+            { 
+            bool start = check_start(lcd, pad);
+            return start;
+            }
+        case 1:
+            print_highscores(lcd);
+            return false;
+        case 2:
+            print_settings(lcd);
+            return false;
+         default:  // default case
+            return false;                
+    }
+}
+
+void Menu::menu_return(N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::BACK_PRESSED) == false) {   
+        
+    }
+    print_menu(lcd);
 }
 
 //Uses joystick direction to select menu option
-MenuChoices Menu::menu_choice(MenuChoices menu, Gamepad &pad, N5110 &lcd)
+void Menu::menu_select(Gamepad &pad, N5110 &lcd)
 {
     
-    int d = pad.get_direction();
-    MenuChoices m = menu;
+    while(pad.check_event(Gamepad::START_PRESSED) == false) { //loops until start pressed 
+    
+        int d = pad.get_direction();
+        MenuChoices cursor_pos = _cursor_pos; 
+    
+        switch(cursor_pos) {
+            //cursor on start
+            case 0:
+                draw_cursor(lcd);
+                switch(d) {
+                    case 0: //joystick centered
+                        _cursor_pos = START;
+                        break;
+                    case 1: //joystick up
+                        _cursor_pos = SETTINGS;
+                        break;
+                    case 5: //joystick down
+                        _cursor_pos = HIGHSCORES;
+                        break;
+                }
+                break;
+            //cursor on highscores
+            case 1:
+                draw_cursor(lcd);
+                switch(d) {
+                    case 0: //joystick centered
+                        _cursor_pos = HIGHSCORES;
+                        break;
+                    case 1: //joystick up
+                        _cursor_pos = START;
+                        break;
+                    case 5: //joystick down
+                        _cursor_pos = SETTINGS;
+                        break;
+                }
+                break;
+            //cursor on settings
+            case 2:
+                draw_cursor(lcd);
+                switch(d) {
+                    case 0: //joystick centered
+                        _cursor_pos = SETTINGS;
+                        break;
+                    case 1: //joystick up
+                        _cursor_pos = HIGHSCORES;
+                        break;
+                    case 5: //joystick down
+                        _cursor_pos = START;
+                        break;
+                }
+                break;
+        } 
+        
+        wait(0.2);
+    }
 
-    switch(m) {
-        //cursor on start
-        case 0:
+}
+
+
+//private methods
+
+//draws cursor in necessary position
+void Menu::draw_cursor(N5110 &lcd)
+{
+    int cursor_pos = _cursor_pos;
+    switch(cursor_pos) {
+        case 0: //cursor on start
             lcd.drawRect(0,16,6,8,FILL_WHITE);
             lcd.drawRect(0,32,6,8,FILL_WHITE);
-            lcd.drawRect(0,0,6,8,FILL_TRANSPARENT);  
-
-            switch(d) {
-                    case 0: //joystick centered
-                        m = START;
-                        break;
-                    case 1: //joystick up
-                        m = SETTINGS;
-                        break;
-                    case 5: //joystick down
-                        m = HIGHSCORES;
-                        break;
-                }
+            lcd.drawRect(0,0,6,8,FILL_TRANSPARENT); 
             break;
-        //cursor on highscores
-        case 1:
+        case 1: //cursor on highscores
             lcd.drawRect(0,0,6,8,FILL_WHITE);
             lcd.drawRect(0,32,6,8,FILL_WHITE);
             lcd.drawRect(0,16,6,8,FILL_TRANSPARENT);
-
-            switch(d) {
-                    case 0: //joystick centered
-                        m = HIGHSCORES;
-                        break;
-                    case 1: //joystick up
-                        m = START;
-                        break;
-                    case 5: //joystick down
-                        m = SETTINGS;
-                        break;
-                }
             break;
-        //cursor on settings
-        case 2:
+        case 2: //cursor on settings
             lcd.drawRect(0,0,6,8,FILL_WHITE);
             lcd.drawRect(0,16,6,8,FILL_WHITE);
             lcd.drawRect(0,32,6,8,FILL_TRANSPARENT);
-        
-            switch(d) {
-                    case 0: //joystick centered
-                        m = SETTINGS;
-                        break;
-                    case 1: //joystick up
-                        m = HIGHSCORES;
-                        break;
-                    case 5: //joystick down
-                        m = START;
-                        break;
-                }
             break;
-    } 
-    return m;
-}
-
-//private methods
+    }
+    lcd.refresh();
+}
\ No newline at end of file