Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Ball/Ball.cpp
- Committer:
- JamesCummins
- Date:
- 2019-05-09
- Revision:
- 38:a85bc227b907
- Parent:
- 29:42651f87522b
- Child:
- 40:a1cdb6ab08af
File content as of revision 38:a85bc227b907:
#include "Ball.h"
Ball::Ball()
{}
Ball::~Ball()
{}
void Ball::init(int radius){
_radius = radius;
_x = 42; //start ball in the centre of the screen
_y = 24;
_velocity.x = 0; //initially have the velocity as 0 until the
_velocity.y = 0; //accelerometer senses otherwise
_ball_speed = 5; //medium sensitivity to tilt input
}
void Ball::draw(N5110 &lcd){
int radius = get_radius();
lcd.drawCircle(_x, _y, radius, FILL_BLACK); //draw black circle at coord (x, y) with preset radius
}
void Ball::read_input(FXOS8700CQ &accelerometer){
Data values = accelerometer.get_values();
_velocity.x = -(5+_ball_speed)*values.ay; //axes of the accelerometer are different to orientation of the screen
_velocity.y = -(5+_ball_speed)*values.ax; //negative to account for reversed direction
/*printf("ax = %f | ay = %f | ", values.ax, values.ay);
printf("vel.x = %f | vel.y = %f\n", _velocity.x, _velocity.y);*/
}
void Ball::update(){
int RADIUS = get_radius();
_x += _velocity.x; //update position based on how much tilt inputted
_y += _velocity.y;
if (_x < RADIUS){ _x = RADIUS;} //check wall collisions
if (_x > 84 - RADIUS){ _x = 83 - RADIUS;} //if ball position is going to
if (_y < RADIUS){ _y = RADIUS;} //exceed boundaries of the screen
if (_y > 48 - RADIUS){ _y = 47 - RADIUS;} //then fix it to the edge of the screen
printf("ball speed = %d\n", _ball_speed);
}
Vector2D Ball::get_position(){
Vector2D pos = {_x, _y}; //combine x and y into Vector2D
return pos;
}
Vector2D Ball::get_velocity(){
Vector2D vel = {_velocity.x, _velocity.y}; //combine velocity.x and .y into a Vector2D
return vel;
}
int Ball::get_radius(){
int radius = _radius; //find from private member variable
return radius;
}
int Ball::get_ball_speed(){
int ball_speed = _ball_speed; //find from private member variable
return ball_speed;
}
void Ball::set_ball_speed(int ball_speed){
_ball_speed = ball_speed; //update private member variable with user input
}
void Ball::set_velocity(Vector2D vel){
_velocity.x = vel.x; //must pass each part of the struct individually,
_velocity.y = vel.y; //can't pass both at once
}
void Ball::set_position(Vector2D pos){
_x = pos.x; //as with set_velocity
_y = pos.y;
}
void Ball::set_radius(int radius){
_radius = radius; //don't use in code, other than initially where radius is defined using #define in main.cpp
}