Engine library

Engine.cpp

Committer:
el15vef
Date:
2017-05-04
Revision:
7:ad52bca231c4
Parent:
6:d12826adf947

File content as of revision 7:ad52bca231c4:

#include "Engine.h"



void Engine::init()
{
    level_index = 0;//initalises level_index to 0
};


current_coordinate_struct Engine::handle_input(int new_x, int new_y, Gamepad &pad, N5110 &lcd,Character &character, Levels &levels, Science &science)
{

    current_coordinate_struct returned_current_coordinates;//creates an instance of the current coordinate struct

    returned_current_coordinates.current_x = new_x;//sets the current_x equal to new_x so when new_x is recalculated a comparison can be done between the currently displayed coordinate aswell.

    returned_current_coordinates.current_y = new_y;//sets the current_y equal to new_y so when new_y is recalculated a comparison can be done between the currently displayed coordinate aswell.


    //printf("Engine Handle Inputs complete");

    return returned_current_coordinates;//returns the struct
};



new_coordinate_struct Engine::update(int radius, int current_x, int current_y, Science &science, FXOS8700CQ &device, N5110 &lcd, Levels &levels, Gamepad &pad)
{
    Data values = device.get_values();//gets the values from the device

    new_coordinate_struct returned_new_coordinates; // creates an instance of the new_coordinate_struct

    int x_velocity = science.calculate_x_velocity( device); //calculates the velocity in x

    int y_velocity = science.calculate_y_velocity( device); // calculates the velocity in y
    //printf("\n update function %i = x vel, %i = y vel \n", x_velocity, y_velocity);

    int new_x = science.x_boundary_limiter( science.calculate_next_x(current_x, x_velocity) , radius); // calculates the new position in x then is limited if exceeding the screen boundaries

    int new_y = science.y_boundary_limiter( science.calculate_next_y(current_y, y_velocity) , radius); // calculates the new position in y then is limited if exceeding the screen boundaries
    //printf("\n update function %i = new_x, %i = new_y after boundary correction \n", new_x, new_y);

    int next_y = science.y_collisions_correction (new_x, new_y, current_x, current_y, y_velocity, radius, levels);//next_x is created to prevent the collision corrections from being calculated from the wrong position

    int next_x = science.x_collisions_correction (new_x, new_y, current_x, current_y, x_velocity, radius, levels);//next_y is created to prevent the collision corrections from being calculated from the wrong position
    //printf("\n update function %i = next x, %i = next y \n", next_x, next_y);

    science.check_leds_flag_set_tone(pad, lcd);//checks if the LED flag is set

    science.check_leds_off(pad);//checks if the flag for the leds_off is set

    returned_new_coordinates.new_x = next_x; // sets the new_x object in the struct to equal next_x

    returned_new_coordinates.new_y = next_y; // sets the new_y object in the struct to equal next_y
    //printf("\n update function %i = returned x, %i = returned y \n", returned_new_coordinates.new_x, returned_new_coordinates.new_y);

    check_for_level_update( returned_new_coordinates.new_x, returned_new_coordinates.new_y, levels);

    //printf("Engine Update complete");
    return returned_new_coordinates;   // returns the struct instance containing the new coordinates

};



void Engine::draw(int new_x, int new_y, int radius, Character &character, Levels &levels,  N5110 &lcd)
{
    levels.draw_maze(lcd);//draws the maze

    levels.draw_exit(lcd);//draws the exit

    character.draw_ball_2D(new_x, new_y, radius, lcd);//draws the character last
    //printf("Engine Draw complete");
};



void Engine::check_for_level_update( int new_x, int new_y, Levels &levels)
{
    if(levels.check_exit_coordinates(new_x, new_y) ==1) {
        //printf("\n detected at exit\n");
        
        this->level_index ++; //intended for use with a fsm of levels containing the array of the maze, which would be printed to the lcd.
        
        //printf("\n level index = %i\n", level_index);
    };

};