Adam Baker 201166301

Dependencies:   mbed Gamepad N5110

main.cpp

Committer:
adambakerwa
Date:
2019-04-21
Revision:
26:3319ddd5111d
Parent:
25:230e4163cb6b
Child:
29:b2f63d8c1268

File content as of revision 26:3319ddd5111d:

#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#include "Runner.h"
#include "Levels.h"
#include "Animation.h"
#include "BlockheadEngine.h"

N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
BlockheadEngine blockhead;
Ticker ticker;


volatile int timer_flag = 0;

void timer_isr();
void main_menu(N5110 &lcd, Gamepad &pad);
void print_main_menu(N5110 &lcd);
int user_input(Gamepad &pad);
void select_menu_item(N5110 &lcd, Gamepad &pad, int input);
void menu_playgame(N5110 &lcd, Gamepad &pad);
void menu_setcontrast(N5110 &lcd, Gamepad &pad);

int main()
{

    int fps = 6; //6

    pad.init();
    lcd.init();
    lcd.setContrast(0.55);

    ticker.attach(&timer_isr,1.0f/fps);

    //int gameover = 0;

    main_menu(lcd, pad);


}

void timer_isr()
{

    timer_flag = 1;   // set flag in ISR
}

void main_menu(N5110 &lcd, Gamepad &pad)
{
    print_main_menu(lcd);
    int input = user_input(pad);
    select_menu_item(lcd, pad, input);
}

void print_main_menu(N5110 &lcd)
{
    lcd.clear();

    lcd.printString("cuntballs",0,0);
    lcd.printString("A for game",0,1);
    lcd.printString("B for cunt",0,2);
    lcd.refresh();

}


int user_input(Gamepad &pad)
{
    int input = 0;

    do {
        if (pad.check_event(Gamepad::A_PRESSED)) {
            input = 1;
        } else if (pad.check_event(Gamepad::B_PRESSED)) {
            input = 2;
        }
    } while (input == 0);

    return input;
}

void select_menu_item(N5110 &lcd, Gamepad &pad, int input)
{
    switch (input) {
        case 1:
            menu_playgame(lcd, pad);
            break;
        case 2:
            menu_setcontrast(lcd, pad);
            break;
        default:
            exit(1);
            break;
    }
}

void menu_playgame(N5110 &lcd, Gamepad &pad)
{
    int gameover = 0;
    
    blockhead.init();

    do {

        if (timer_flag == true) {

            timer_flag = 0;  // if it has, clear the flag

            lcd.clear();

            gameover = blockhead.playgame(lcd, pad);

            lcd.refresh();

        } else {

            sleep();

        }
    } while (gameover == 0);

    main_menu(lcd, pad);


}

void menu_setcontrast(N5110 &lcd, Gamepad &pad)
{

    int goback = 0;

    do {

        if (timer_flag == true) {

            timer_flag = 0;

            lcd.clear();

            lcd.printString("cuntballs",0,0);

            lcd.refresh();

            if (pad.check_event(Gamepad::A_PRESSED)) {
                goback = 1;
            }

        } else {

            sleep();

        }
    } while (goback == 0);

    main_menu(lcd, pad);
}



//rtos
/**
            char buffer[14];
            sprintf(buffer,"%i", gameover);
            lcd.printString(buffer,0,0);
            */
//NEED TO RESET POS CORDS EACH NEW LEVEL TO PREVENT UNNECERSARRY GAME OVER (have fun x)