The goal of this example is that particle has start and end colors. And particle interpolate between this colors during life cycle.

DOWNLOAD
Code:
///////////////////////////////////////////////////////////////////
BMAP* flame_particle = "flame.tga"; // set here your particle image
///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
var start_color[3];		// start color of the particle
var end_color[3];			// end color of the particle
var current_color[3];	// current color of the particle
var flame_lifespan = 10;
///////////////////////////////////////////////////////////////////

// helper function: sets the vector to random direction and length
function flame_randomize (var* vec, var range)
{	
   vec[0] = random(1) - 0.5;
   vec[1] = random(1) - 0.5;
   vec[2] = random(3) + 0.5;
   vec_normalize(vec,random(range));
}

// helper function: fades out a particle
function flame_alphafade(PARTICLE *p)
{
	start_color[0] = 200;
	start_color[1] = 180;
	start_color[2] = 100;
	
	end_color[0] = 128;
	end_color[1] = 50;
	end_color[2] = 50;
	
	vec_lerp(current_color[0], end_color[0], start_color[0], p.lifespan / flame_lifespan);

	p.red = current_color[0];
	p.green = current_color[1];
	p.blue = current_color[2];
	
	p.alpha = p.lifespan / flame_lifespan * 100 * 0.3;
	if (p.alpha <= 0) p.lifespan = 0;
}

// particle function: generates a fading explosion into vel direction
function effect_flame(PARTICLE *p)
{
   var temp[3];
   flame_randomize(temp, 5);
   vec_add (p.vel_x, temp);
   p.bmap = flame_particle;
   p.flags |= (BRIGHT | MOVE | TRANSLUCENT);
   p.lifespan = flame_lifespan;
   p.size = 12;
   p.event = flame_alphafade; // change to a shorter, faster function
}


Last edited by mr_x; 08/07/08 14:22.