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.
Dependencies: mbed
Doodler/Doodler.cpp
- Committer:
- el17m2h
- Date:
- 2019-04-17
- Revision:
- 10:e1d2289705ef
- Parent:
- 9:5e53bca2a4c2
- Child:
- 11:2041290b5a74
File content as of revision 10:e1d2289705ef:
#include "Doodler.h"
Doodler::Doodler(){
}
Doodler::~Doodler(){
}
void Doodler::init(int radius){
// initial position of doodler at centre
_radius = radius;
_pos_x = 41;
_pos_y = 24;
_velocity_y = 1.1;
_gravity = 1.1; // moves down
_up = -0.5; // elasticity
}
void Doodler::draw(N5110 &lcd){
lcd.drawCircle(_pos_x, _pos_y, _radius, FILL_BLACK);
}
void Doodler::update(Direction d, float mag, float current_vel_x, double current_vel_y){
//////////////////////////// y - direction of doodler /////////////////////////////////////
_velocity_x = current_vel_x;
_velocity_y = (double)current_vel_y;
if ((double)_velocity_y >= 0.00){ // no jump
_pos_y += _velocity_y;
_velocity_y = (double)_velocity_y*(double)_gravity; // falls accelerating
} else { // jump has started until vel = 0
_velocity_y = -((double)_velocity_y * (double)_up); // jumps decelerating upwards (0<_up<1 so _velocity.y reaches 0)
_pos_y += _velocity_y*5;
if (fabs((double)_velocity_y) < 0.005){ // decelerated completely
_velocity_y = _gravity;
}
}
/////////////////////////// x - direction of doodler /////////////////////////////////////////
_velocity_x = int(mag*5.0f); // 5 frames times the magnitude of the joystick (int holds that value)
if (d == W){ // if direction is left
_pos_x -= _velocity_x;
} else if (d == E){
_pos_x += _velocity_x;
}
// checking doodler does not leave screen:
if (_pos_x > WIDTH-4.00){ // right side
_pos_x = WIDTH-4.00;
}
if (_pos_x < _radius){ // left side
_pos_x = _radius;
}
set_position(_pos_x, _pos_y);
set_velocity(_velocity_x, (double)_velocity_y);
}
float Doodler::get_position_x(){
float p_x = _pos_x;
return p_x;
}
float Doodler::get_position_y(){
float p_y = _pos_y;
return p_y;
}
float Doodler::get_velocity_x(){
float v_x = _velocity_x;
return v_x;
}
double Doodler::get_velocity_y(){
double v_y = (double)_velocity_y;
return (double)v_y;
}
void Doodler::set_velocity(float v_x, double v_y){
_velocity_x = v_x;
_velocity_y = (double)v_y;
}
void Doodler::set_position(float p_x, float p_y){
_pos_x = p_x;
_pos_y = p_y;
}