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