ELEC2645 (2018/19) / Mbed 2 deprecated el17ebs

Dependencies:   mbed FATFileSystem

Menu/Menu.cpp

Committer:
ellisbhastroud
Date:
2019-03-29
Revision:
3:a8960004d261
Parent:
2:81cfa8310f55
Child:
4:035448357749

File content as of revision 3:a8960004d261:

#include "Menu.h"

// constructor

Menu::Menu()
{

}

//deconstructor

Menu::~Menu()
{

}

//public methods

void Menu::init()
{
    _cursor_pos = START; //cursor begins on start

}
//prints welcome screen
void Menu::print_welcome(N5110 &lcd)
{
    lcd.clear();
    lcd.printString("Welcome to",0,0);
    lcd.printString("GAME",0,1);
    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("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();
    lcd.printString("Settings",0,2);
    lcd.refresh();
}

//changes menu screen using cursor position and returns true if begin start 
bool Menu::menu_change(N5110 &lcd, Gamepad &pad) 
{
    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
void Menu::menu_select(Gamepad &pad, N5110 &lcd)
{
    
    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);
    }

}


//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); 
            break;
        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);
            break;
        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);
            break;
    }
    lcd.refresh();
}