/*
* Bullet.cpp
*
* Created on: 12-Oct-2009
* Author: matthew
*/
#include "Bullet.h"
#include "Character.h"
#include "Enemy.h"
#include "mylib.h"
using namespace std;
vector<BITMAP *>Bullet::bsprite;
Bullet::Bullet(int x, int y, int speed, int _level):Object()
{
setX(x);
setY(y);
setSpeedX(speed);
level = _level;
setW(8);
setH(7);
setSpriteN(0);
dead = false;
setGravity(0);
//TODO:pass with and height
}
Bullet::~Bullet()
{
}
bool Bullet::getDead()
{
return dead;
}
void Bullet::move(vector<Object> &object,vector<Enemy> &enemy, Character *character)
{
setSpeedY(getSpeedY()+getGravity());
setY(getY() + (int)getSpeedY());
setX(getX()+(int)getSpeedX());
if(getX() < 0)
{
//If it goes beyond the left border, destroy it
dead=true;
}
else if(getX() >800-getW())
{
//If it goes beyond the right border, destroy it
dead=true;
}
//If collide with a enemy
for(unsigned int i=0; i<enemy.size(); i++)
{
if((collide_x(getX(),getW(),enemy[i].getX(),enemy[i].getW()))&&(collide_y(getY(),getH(),enemy[i].getY(),enemy[i].getH())))
{
enemy[i].lessLife();
//Push back the enemy
if(getSpeedX()>0)enemy[i].setX(enemy[i].getX()+5);
else enemy[i].setX(enemy[i].getX()-5);
//Kill the enemy if out of life
if(enemy[i].getLife()<=0)enemy.erase(enemy.begin()+i);
{
//Destroy the bullet
dead=true;
break; //cannot kill more than one
}
}
}
//If collide with the character
if((collide_x(getX(),getW(),character->getX(),character->getW()))&&(collide_y(getY(),getH(),character->getY(),character->getH())))
{
character->lessLife();
//Push back the character
if(getSpeedX()>0)character->setX(character->getX()+5);
else character->setX(character->getX()-5);
//Destroy the bullet
dead=true;
}
else
{
for(unsigned int i=0; i<object.size(); i++)
{
//If the bullet collided with an object, move it to the character border
if((collide_x(getX(),getW(),object[i].getX(),object[i].getW()))&&(collide_y(getY(),getH(),object[i].getY(),object[i].getH())))
{
if(getSpeedX()>0)
{
setX(object[i].getX()-getW());
}
else
{
setX(object[i].getX()+object[i].getW());
}
//Destroy it next turn
dead=true;
}
}
}
}
BITMAP *Bullet::getSprite()
{
return Bullet::bsprite[getSpriteN()];
}