1 
2 #include "pe_torpedo_expl.h"
3 #include "resources.h"
4 
5 extern Layouts *g_layouts;
6 extern GLuint g_smoke_texture;
7 
PE_Torpedo_Explosion(vec2 const & pos,vec2 const & dir)8 PE_Torpedo_Explosion::PE_Torpedo_Explosion(vec2 const& pos,vec2 const &dir) :
9 	ParticleEffect(pos,1000.0,80.0,2.0,&g_resources.texture_smoke,80.0),
10   m_dir(dir)
11 {
12   // two points denoting start and end torpedo in worldspace coords
13   m_p1 = pos - normalized(m_dir)*0.04;
14   m_p2 = pos + normalized(m_dir)*0.04;
15 }
16 
update_single_particle(Particle & p,float delta_t,float p_time)17 void PE_Torpedo_Explosion::update_single_particle(Particle& p,float delta_t,float p_time)
18 {
19 	// update pos
20   float norm_ptime = (p_time/1.8);
21   float inv_norm_ptime = 1.0- norm_ptime;
22   float color_f = inv_norm_ptime * inv_norm_ptime;
23 
24   if (color_f < 0.02)
25     p.alive = false;
26 
27 	p.cur_color[3] = color_f;
28 
29 	p.cur_pos += p.cur_speed * inv_norm_ptime * delta_t;
30 
31 	p.cur_size = 0.02 + (norm_ptime * norm_ptime)*0.125;
32   if (p.cur_size>0.05)
33     p.cur_size = 0.05;
34 
35 }
36 
emit_single_particle(Particle & p)37 void PE_Torpedo_Explosion::emit_single_particle(Particle& p)
38 {
39   p.cur_pos = lerp(RAND_0_1,m_p1,m_p2) + vec2(RAND_0_1 * 0.002f, RAND_0_1 * 0.002f);
40 	p.cur_speed = normalized(vec2(RAND_1_1,RAND_1_1))*rand_range(0.01,0.1);
41 	p.cur_size = 0.0;
42   float col = rand_range(0.0,0.1);
43 	p.cur_color = vec4(col,col,col,1);
44 }
45