Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

main/main.cpp

Committer:
Noximilien
Date:
2019-04-08
Revision:
27:f05f4e738ba9
Parent:
26:676874c42883
Child:
28:35af3843de8f

File content as of revision 27:f05f4e738ba9:

/**
    ELEC2645 Embedded Systems Project
    School of Electronic & Electrical Engineering
    University of Leeds
    Name: Dmitrijs Griskovs
    Username: el17dg
    Student ID Number: 201160286
    date: start - 25/02/2019
*/

#include "constants.h"

#include "main.h"
#include "game.h"
#include "menu.h"
#include "models.h"
#include "tutorial.h"



N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);

Gamepad gamepad;


AnalogIn pot(PTB2);
AnalogIn x_dir(PTB11);
AnalogIn y_dir(PTB10);
AnalogIn rand_y(PTB3);

Menu menu;
Game game;
Tutorial tutorial;

struct IntroMove {
    int x;
    int y;
};

IntroMove lineOne;
IntroMove lineOneStars;
IntroMove lineTwo;
IntroMove lineTwoShips;
IntroMove lineThree;

void updateAndDrawIntroPartOne();
void updateAndDrawIntroPartTwo();
void introPartOneText();
void intro();
void pointer(int x, int y);
void pointer_position(int menu_number);
void ship_movement();

ScreenOption current_screen = ScreenOption_Menu;

void intro();

int main(){
    lcd.init();
    gamepad.init();
    printf("Intro starts"); 
    intro();
    srand(rand_y * 1000000);                            //Makeing the generated y position for the enemy to be trully random.
    
    while(1){                                           //Waiting for the option "start game" to be selected and for the button B to be pressed
        lcd.clear();
        
        if (current_screen == ScreenOption_Game) {
            bool game_is_paused = game.updateAndDraw();
            
            if (game_is_paused) {
                current_screen = ScreenOption_Menu;
            }
        } 
        if (current_screen == ScreenOption_Tutorial) {
            bool back_to_menu = tutorial.updateAndWriteTutorial();
            
            if (back_to_menu) {
                current_screen = ScreenOption_Menu;
            }
        } 
        else if (current_screen == ScreenOption_Menu) {
            bool wantsToChangeScreen = menu.updateAndDraw();
            if (wantsToChangeScreen) {
                current_screen = menu.getCurrentScreenSelection();
            }
        }
        
        lcd.refresh();
        wait_ms(1000/fps);
    }
}

void intro(){
    lineOne.x = -63;                                         // The width of the sprite.    
    lineOne.y = 1;                                           // This just will be an intro for the game.//////////////////
    lineOneStars.x = screen_width;
    lineOneStars.y = 1;
    
    lineTwo.y = 15;
    lineTwo.x = screen_width;
    lineTwoShips.x = -46;                                   // Starting position outside the screen limits, with the length of the sprite.
    lineTwoShips.y = 14;                                    // the height of the "The last One" and a few pixels for gaps. 
    
    lineThree.x = 2;
    lineThree.y = screen_height;                       // Starting outside the screen limits on the botto - the screen's height + the sprite's height.
    
    int start_game_text_counter = 0;
    
    updateAndDrawIntroPartOne();
    updateAndDrawIntroPartTwo();
    wait(1);
    
    //Stop just a few pixels above the bottom screen border.
    while (!gamepad.check_event(gamepad.START_PRESSED)){
        lcd.clear();
        introPartOneText();
        if (start_game_text_counter == 2){
            lcd.printString("Press START",10,5);
            start_game_text_counter = 0;   
        }
        start_game_text_counter += 1;
        lcd.refresh();          
    }
}
    

void updateAndDrawIntroPartOne(){
    // the width of the line one + 2.
    for (int i = 0; i < 65; i++){           
        lcd.clear();
        lineOne.x +=1;
        if (lineOneStars.x > 70){ lineOneStars.x  -= 1; }
        // to stop moving at the position of its width.
        if (lineTwo.x > screen_width - 30){ lineTwo.x -=1; }
        if ( lineTwoShips.x < 0){ lineTwoShips.x += 1; }
        
        introPartOneText();
        
        lcd.refresh();
        wait(0.01);
    }
}

void updateAndDrawIntroPartTwo(){
    for (int i = 0; i < 19 + 3; i++){
        lcd.clear();
        lineThree.y -= 1;
        introPartOneText();
        lcd.drawSprite(lineThree.x, lineThree.y, 19, 78, (int*)introLineThree);
        
        lcd.refresh();
        wait(0.1);
    } 
}
/**@brief
    * I have put the upper part of the intro into a separate function because it
    * it is being called several times in this file
    */
void introPartOneText(){
    lcd.drawSprite(lineOne.x, lineOne.y, 11, 63, (int*)introLineOne);
    lcd.drawSprite(lineOneStars.x, lineOneStars.y, 13, 12, (int*)introLineOneStars);
    lcd.drawSprite(lineTwo.x, lineTwo.y, 11, 30, (int*)introLineTwo);
    lcd.drawSprite(lineTwoShips.x, lineTwoShips.y, 10, 46, (int*)introLineTwoShips); 
}