Rally X
ELEN3009 Project by Justin Wernick and David Schneider
source/logic/PlayerCar.cpp
Go to the documentation of this file.
00001 #include "PlayerCar.h"
00002 
00003 PlayerCar::PlayerCar(double x, double y, Maze::Direction facing)
00004     :Car(x,y,BitmapStore::PLAYER, facing),
00005     _input(_facing),
00006     _petrol(1)
00007 {
00008 }
00009 
00010 void PlayerCar::update(const Maze& maze, list<Smokescreen>& currentSmoke)
00011 {
00012     _petrol -= PETROL_USE_RATE;
00013     if (_petrol<0)
00014     {
00015         _speed = _baseSpeed/2;
00016         _petrol = 0;
00017     }
00018 
00019     _facing = _input.getFacing();
00020     move(maze);
00021 
00022     if (_input.getSmokescreen())
00023     {
00024         makeSmoke(currentSmoke);
00025     }
00026 }
00027 
00028 void PlayerCar::makeSmoke(list<Smokescreen>& currentSmoke)
00029 {
00030     if (_petrol < PETROL_USE_SMOKESCREEN) return;
00031 
00032     double targetX = 0;
00033     double targetY = 0;
00034 
00035     switch(_facing)
00036     {
00037         case Maze::UP:
00038             targetX = round(_x);
00039             targetY = round(_y+1);
00040             break;
00041         case Maze::DOWN:
00042             targetX = round(_x);
00043             targetY = round(_y-1);
00044             break;
00045         case Maze::LEFT:
00046             targetX = round(_x+1);
00047             targetY = round(_y);
00048             break;
00049         case Maze::RIGHT:
00050             targetX = round(_x-1);
00051             targetY = round(_y);
00052             break;
00053     }
00054 
00055     bool overlap = false;
00056 
00057     for (list<Smokescreen>::const_iterator iter = currentSmoke.begin(); iter!=currentSmoke.end(); ++iter)
00058     {
00059         if ((abs(iter->x() - targetX)<1)&&(abs(iter->y() - targetY)<1))
00060         {
00061             overlap = true;
00062             break;
00063         }
00064     }
00065 
00066     if (!overlap)
00067     {
00068         currentSmoke.push_back(Smokescreen(targetX, targetY));
00069         _petrol -= PETROL_USE_SMOKESCREEN;
00070     }
00071 }
00072 
00073 void PlayerCar::crash()
00074 {
00075     _destroyed = true;
00076 }
00077 
00078 void PlayerCar::gotCheckpoint()
00079 {
00080     _petrol+=PETROL_FROM_CHECKPOINT;
00081     _speed = _baseSpeed;
00082 }
00083 
00084 double PlayerCar::petrol() const
00085 {
00086     return _petrol;
00087 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator