#include "Line.hpp"
Line::~Line()
{
    delete [] colors;
    for (int i=0;i<num_points;++i)
        delete [] points[i];
    delete [] points;
}
Line::Line(int npoints,float _x,float _y,float v_r,float v_a,int r,int g,int b,int tlife)
{
    total_life = tlife;
    current_life = tlife;
    num_points = npoints;
    vx = v_r*cos(v_a);
    vy = v_r*sin(v_a);
    x=_x;
    y=_y;
    points = new float*[num_points];
    for (int i=0;i<num_points;++i)
    {
        points[i] = new float[2];
        points[i][0] = _x;
        points[i][1] = _y;
    }
    colors = new ALLEGRO_COLOR[num_points+1];
    for (int i=0;i<num_points;++i)
    {
        colors[i] = al_map_rgb(r*sqrt(((float)num_points-i)/(num_points+1)),g*sqrt(((float)num_points-i)/(num_points+1)),b*sqrt(((float)num_points-i)/(num_points+1)));
        //*sqrt(((float)i)/(num_points+1))
    }
    colors[num_points] = al_map_rgb(r,g,b);
}
void Line::Draw()
{
    if (current_life>num_points-1)
    {
        for (int i=num_points-1;i>0;--i)
        {
            al_draw_line(points[i][0],points[i][1],points[i-1][0],points[i-1][1],colors[i-1],2);
        }
        al_draw_line(points[0][0],points[0][1],x,y,colors[num_points],2);
    }
    else
    {
        for (int i=num_points-1;i>num_points-1-current_life;--i)
        {
            al_draw_line(points[i][0],points[i][1],points[i-1][0],points[i-1][1],colors[i-1],2);
        }
    }

}
bool Line::Logic(float xd,float yd,float gravity)
{
    points[0][0] = x;
    points[0][1] = y;
    for (int i=num_points-1;i>0;--i)
    {
        points[i][0] = points[i-1][0];
        points[i][1] = points[i-1][1];
    }
    x+=vx;
    y+=vy;
    vx-=vx*xd;
    vy-=gravity+vy*yd;
    current_life--;
    if (current_life<0)
        return false;
    return true;
}
