/*********************************************************************//**
*	Stopy po leticich kulkach.
*	Tyto stopy jsou dulezitou soucasti pro vice realisticke prostredi.
*	Takto ma hrac dojem, ze opravdu vystreli nejaky projektil, ktery
*	za sebou zanecha po dobu nekolika milisekund ohnivou stopu.
*
*	author: Michal Jirous
*	date: 8.12.2008
*	file: bullet_tracks.h
**********************************************************************/


#include "bullet_tracks.h"
#include <list>
#include "globaltime.h"
#include "SDL/SDL_opengl.h"

using namespace std;
using namespace bullet_tracks;

list<SingleTrack> g_tracksList;

/** @param start Pocatecni bod stopy (3 hodnoty).
*	@param end   koncovy bod stopy (3 hodnoty).
*	@param duration_ms Doba platnosti v milisekundach. 
*/
void bullet_tracks::addTrack( float *start, float *end, unsigned int duration_ms )
{
	g_tracksList.push_back( SingleTrack() );
	g_tracksList.back().duration = duration_ms;
	g_tracksList.back().time_start = global_time::getGlobalTime();
	memcpy( g_tracksList.back().start, start, sizeof(g_tracksList.back().start) );
	memcpy( g_tracksList.back().end, end, sizeof(g_tracksList.back().end) );

}

void bullet_tracks::draw()
{
	glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT |  GL_LINE_BIT);

	glLineWidth( 6.0f );
	glColor4f( 0.7f,0.7f,0.7f,0.3f );
	glColor4ub( 250,209,116,76);
	glDisable( GL_TEXTURE_2D );
	glEnable( GL_BLEND );
	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

	for( list<SingleTrack>::iterator iter = g_tracksList.begin(); iter != g_tracksList.end(); iter++ )
	{
		glBegin( GL_LINES );
		glVertex3fv( (*iter).start );
		glVertex3fv( (*iter).end );
		glEnd();
	}


	glPopAttrib();
	run();
}


void bullet_tracks::run()
{
	for( list<SingleTrack>::iterator iter = g_tracksList.begin(); iter != g_tracksList.end();  )
	{
		if( (*iter).time_start + (*iter).duration < global_time::getGlobalTime() )
			iter = g_tracksList.erase( iter );
		else
			iter++;
	}



}
