#include "PROYECTIL.h"

PROYECTIL::PROYECTIL()
{
    //ctor
    x = 0;
    y = 0;

    boundX = 0.0;
    boundY = 0.0;

    estaVivo = true;
}

PROYECTIL::~PROYECTIL()
{
    //dtor
}

PROYECTIL::PROYECTIL(const PROYECTIL& other)
{
    //copy ctor
}

PROYECTIL& PROYECTIL::operator=(const PROYECTIL& rhs)
{
    if (this == &rhs) return *this; // handle self assignment
    //assignment operator
    return *this;
}

PROYECTIL::PROYECTIL(int _x, int _y, float _boundX, float _boundY)
{
    x = _x;
    y = _y;
    boundX = _boundX;
    boundY = _boundY;

    estaVivo = true;
}

// Métodos
int PROYECTIL::GetX()
{
    return x;
}

int PROYECTIL::GetY()
{
    return y;
}

float PROYECTIL::GetboundX()
{
    return boundX;
}

float PROYECTIL::GetboundY()
{
    return boundY;
}

int PROYECTIL::setX(int X)
{
    x += X;
    return x;
}

int PROYECTIL::setY(int Y)
{
    y += Y;
    return y;
}

void PROYECTIL::pintarArriba(ALLEGRO_BITMAP *imagen, float _boundX, float _boundY)
{
    y -= 6;
    al_convert_mask_to_alpha(imagen, al_map_rgb(0, 0, 0));
    al_draw_bitmap(imagen,  _boundX, _boundY, 0);
}

void PROYECTIL::pintarAbajo(ALLEGRO_BITMAP *imagen, float _boundX, float _boundY)
{
    y += 6;
    //imagen = al_load_bitmap("Rayo_Ik1_Vertical.png");
    //if(!imagen) cout << "Imposible cargar imagen";
    al_draw_bitmap(imagen,  _boundX, y, 0);
}

void PROYECTIL::pintarDerecha(ALLEGRO_BITMAP *imagen, float _boundX, float _boundY)
{
    x += 6;
    //imagen = al_load_bitmap("Rayo_Ik1_Horizontal.png");
    al_convert_mask_to_alpha(imagen, al_map_rgb(255, 255, 255));
//    if(!imagen) cout << "Imposible cargar imagen";
    al_draw_bitmap(imagen,  x, _boundY, 0);
}

void PROYECTIL::pintarIzquierda(ALLEGRO_BITMAP *imagen, float _boundX, float _boundY)
{
    x -= 6;
    //imagen = al_load_bitmap("Rayo_Ik1_Horizontal.png");
    //if(!imagen) cout << "Imposible cargar imagen";
    al_draw_bitmap(imagen,  _boundX, _boundY, 0);
}

bool PROYECTIL::colision(std::list<PROYECTIL* >::iterator iteradorPROYECTILES, std::list<ENEMIGO2* >::iterator iteradorEnemigos)
{
   if( ((*iteradorPROYECTILES)->GetX() > (*iteradorEnemigos)->GetX() + (*iteradorEnemigos)->GetboundX()
       || (*iteradorPROYECTILES)->GetY() > (*iteradorEnemigos)->GetY() + (*iteradorEnemigos)->GetboundY()
       || (*iteradorEnemigos)->GetX() > (*iteradorPROYECTILES)->GetX() + (*iteradorPROYECTILES)->GetboundX()
       || (*iteradorEnemigos)->GetY() > (*iteradorPROYECTILES)->GetY() + (*iteradorPROYECTILES)->GetboundY()) )
       return false;

   else
   {
       (*iteradorPROYECTILES)->SetestaVivo(0);
       (*iteradorEnemigos)->SetestaVivo(0);
       return true;
   }
}

bool PROYECTIL::fuera(std::list<PROYECTIL* >::iterator iteradorPROYECTILES, int anchura, int altura)
{
    if((*iteradorPROYECTILES)->GetX() <= 0 || (*iteradorPROYECTILES)->GetX() + (*iteradorPROYECTILES)->GetboundX() >= anchura
       || (*iteradorPROYECTILES)->GetY() + (*iteradorPROYECTILES)->GetboundY() >= altura || (*iteradorPROYECTILES)->GetY() <= 0)
    {
        (*iteradorPROYECTILES)->SetestaVivo(0);
        return true;
    }
    else
    {
        ((*iteradorPROYECTILES)->SetestaVivo(1));
        return false;
    }
}

bool PROYECTIL::SetestaVivo(int vida)
{
    if(vida == 1)
    {
        estaVivo = true;
    }
    else estaVivo = false;

    return estaVivo;
}

bool PROYECTIL::GetVida()
{
    return estaVivo;
}







