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); } }
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); }
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; } } }