コード例 #1
0
void L_ExplosionEffect::howto_emit_particle(void)
{
	static L_REAL radian;
	static int num_particles;
	static int j;

	num_particles = min_particles + rand() % (max_particles - min_particles + 1);

	for( j=0; j<num_particles; j++ )
	{
		radian = L_RAND_REAL_2()*L_2PI;

		static L_REAL current_speed_dis;

		if(speed_dis == 0)
			current_speed_dis = 0;

		else
			current_speed_dis = ( L_RAND_REAL_1()*2.0f - 1.0f ) * speed_dis;

		CL_Vec2f v_t;
		linear_set2(v_t,  explosion_level+current_speed_dis, radian );

		create_particle(x_pos,y_pos,&v_t);
	}
}
コード例 #2
0
void L_ParticleEffect::create_particle(L_REAL in_x, L_REAL in_y, CL_Vec2f* vec_t)
{
	int chosen = choose_particle();

	L_Particle* par_new;
	L_NEW_PAR( par_new, *fl_particle[chosen] );

	CL_Vec2f vec_t2 = CL_Vec2f(0,0);
	if(addit_vector_enabled == true)
	{
		if(vec_t != NULL)
			vec_t2 = addit_vector + *vec_t;

		else
			vec_t2 = addit_vector;
	}

	else
	{
		if(vec_t != NULL)
			vec_t2 = *vec_t;
	}

	par_new->set_velocity(vec_t2);


	if(follow_shooting)
	{
		par_new->set_rotation(linear_get_radian(*vec_t));
	}

	else if(par_randrot_on)
	{
		par_new->set_rotation2(L_RAND_REAL_2()*L_2PI);
	}

	if(size_distortion != 0)
	{
		par_new->set_size( par_new->get_ref_size()+rand_size() );
	}

	if(life_distortion != 0)
	{
		int distort = rand() % life_distortion + 1;

		if(rand() % 2 == 0)
			distort = -distort;

		par_new->set_life(par_new->get_remaininig_life()+distort);
	}

	par_new->x_pos = in_x;
	par_new->y_pos = in_y;

	par_new->initialize();

	//add to list
	particle_list.push_back(par_new);
}
コード例 #3
0
ファイル: L_Particle.cpp プロジェクト: ARMCoderCHS/ClanLib
void L_Particle::rotating_process(void)
{
	if(remaining_life <= rotating_starting_time)
	{
		//rotating_type = 1
		if(rotating_type == 1)
		{
			current_radian = current_radian + radian*time_elapesed;

			if(current_radian >= L_2PI)
				current_radian -= L_2PI;

			else if(current_radian <= -L_2PI)
				current_radian += L_2PI;
		}

		//rotating_type = 2
		else if(rotating_type == 2)
		{
			current_radian = radian_rm + (L_REAL)(rotating_starting_time - remaining_life)/(L_REAL)rotating_starting_time * radian;
		}

		//rotating_type = 3
		else if(rotating_type == 3)
		{
			current_radian = L_RAND_REAL_2() * L_2PI;
		}

		//rotating_type = 4
		else
		{
			L_REAL current_radian_t = vec.get_angle();

			if( current_radian_t != L_REAL_MIN )
				current_radian = radian_rm + current_radian_t;
		}
	}
}