ELEC2645 (2018/19) / Mbed 2 deprecated el17ebs

Dependencies:   mbed FATFileSystem

Ball/Ball.h

Committer:
ellisbhastroud
Date:
2019-04-20
Revision:
9:bc34f2243e43
Parent:
8:d410856c6d04
Child:
10:9f54a6366e94

File content as of revision 9:bc34f2243e43:

#ifndef BALL_H
#define BALL_H

#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"

/** Enum for wall types */
enum WallType {
    
    LEFT,  /**< left wall */
    RIGHT,       /**< right wall */
    TOP,      /**< top wall */
    BOTTOM,       /**< bottom wall */
};

/** Pixel Coordinate Struct*/
struct Coord {
    int x; /**< coordinate of x pixel */
    int y; /**< coordinate of y pixel */
};

/** Map Layout struct */
struct WallMap {
    WallType wall;  /**< wall type */
    Coord start; /**< coordinate of line start */
    Coord end; /**< coordinate of line end */
};

/** Levels Information struct */
struct Levels {
    Coord ball; /**< start position of ball */
    Coord hole; /**< position of hole */
    WallMap walls[10]; /**< array of wall plots */
    int wall_count;

};

/** Ball Class
* @brief Class for controlling the golf ball
* @author Ellis Blackford Stroud
* @date May, 2018
*/

class Ball 
{

public:

    /** Constructor */
    Ball();

    /** Destructor */
    ~Ball();
    
    void init(Coord start_pos);
    
    void drawBall(N5110 &lcd);
    
    void printShotCount(N5110 &lcd);
    
    void drawPower(N5110 &lcd, float mag);
    
    void drawAim(N5110 &lcd, Vector2D joy_coord ,float angle);
           
    void move_ball(int frame_rate);
    
    Vector2D get_ball_pos();
    
    void shoot_ball(Gamepad &pad, Vector2D joy_coord);
    
    int get_shot_count();
    
    int get_total_shot_count();
        
    void set_total_shot_count(int total_shot_count);
        
    bool check_hole(Coord hole);
    
    void check_wall_bounce(WallMap map[], int size);
    
    void left_bounce(Coord start, Coord end);
    
    void right_bounce(Coord start, Coord end);
    
    void top_bounce(Coord start, Coord end);
    
    void bottom_bounce(Coord start, Coord end);

private:
    
    float _x_pos; 
    float _y_pos;
    float _x_vel;
    float _y_vel;
    int _shot_count;
    int _total_shot_count;
    Direction _direction;
};  

#endif