SharpShooter
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
Obstacle.h
- Committer:
- jboettcher
- Date:
- 2016-10-31
- Revision:
- 15:e09ab0d14d4b
- Parent:
- 12:2f358065ba3f
File content as of revision 15:e09ab0d14d4b:
extern uLCD_4DGL uLCD;
extern Mutex mutex;
extern DigitalOut myled1;
struct ObstLocation {
int x1, y1, x2, y2;
};
class Obstacle
{
int x1,x2,y1,y2;
bool direction;
public:
Obstacle();
Obstacle(int x1, int y1, int x2, int y2);
void drawObstacle();
void eraseObstacle();
void move(int speed);
void changeDirection();// need change direction when hitting wall
void setDirection(bool direction);
ObstLocation getLocation();
};
Obstacle::Obstacle() {
x1 = 2;
x2 = 50;
y1 = 62;
y2 = 65;
direction = 1;
}
Obstacle::Obstacle(int a, int b, int c, int d) {
x1 = a;
y1 = b;
x2 = c;
y2 = d;
}
void Obstacle::drawObstacle() {
mutex.lock();
uLCD.filled_rectangle(x1,y1,x2,y2,DGREY);
mutex.unlock();
}
void Obstacle::eraseObstacle() {
mutex.lock();
uLCD.filled_rectangle(x1,y1,x2,y2,BACKGROUND);
mutex.unlock();
}
void Obstacle::move(int speed) {
mutex.lock();
Obstacle::eraseObstacle();
if ((x1<=1 && direction==0) || (x2>=127 && direction==1)) {
Obstacle::changeDirection();
}
if (direction==1) {
x1 += speed;
x2 += speed;
}
else {
x1 -= speed;
x2 -= speed;
}
Obstacle::drawObstacle();
mutex.unlock();
}
void Obstacle::changeDirection() {
direction = !direction;
}
void Obstacle::setDirection(bool a) {
direction = a;
}
ObstLocation Obstacle::getLocation() {
ObstLocation coor {x1, y1, x2, y2};
return coor;
}
