From 98ba22e7064db57316dfff1ae127feb3dceeb73e Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Thu, 31 Jul 2014 13:58:22 +0200 Subject: Initial commit --- source/logic/Car.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 source/logic/Car.cpp (limited to 'source/logic/Car.cpp') diff --git a/source/logic/Car.cpp b/source/logic/Car.cpp new file mode 100644 index 0000000..3e531a3 --- /dev/null +++ b/source/logic/Car.cpp @@ -0,0 +1,75 @@ +#include "Car.h" + +Car::Car(double x, double y, BitmapStore::Image image, Maze::Direction facing) + :GameObject(x,y,image,facing), + _speed(_baseSpeed) +{ +} + +double Car::speed() const +{ + return _speed; +} + +void Car::move(const Maze& maze) +{ + double targetX = 0; + double targetY = 0; + + int checkX = 0; + int checkY = 0; + + switch(_facing) + { + case Maze::UP: + targetX = MazeMath::round(_x); + targetY = _y - _speed; + checkX = floor(targetX); + checkY = floor(targetY); + break; + case Maze::DOWN: + targetX = MazeMath::round(_x); + targetY = _y + _speed; + checkX = floor(targetX); + checkY = ceil(targetY); + break; + case Maze::LEFT: + targetX = _x - _speed; + targetY = MazeMath::round(_y); + checkX = floor(targetX); + checkY = floor(targetY); + break; + case Maze::RIGHT: + targetX = _x + _speed; + targetY = MazeMath::round(_y); + checkX = ceil(targetX); + checkY = floor(targetY); + break; + } + + if (!maze.getSolid(checkX, checkY)) + { + //can move that way + _x = targetX; + _y = targetY; + } + else + { + //can not move to targetX and targetY, but move to the edge of current block + switch(_facing) + { + case Maze::UP: + _y = floor(_y); + break; + case Maze::DOWN: + _y = ceil(_y); + break; + case Maze::LEFT: + _x = floor(_x); + break; + case Maze::RIGHT: + _x = ceil(_x); + break; + } + } +} -- cgit v1.2.3