v / examples / fireworks / modules / objects / particle.v
35 lines · 28 sloc · 770 bytes · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1module objects
2
3import gg
4
5pub struct Particle {
6pub mut:
7 color gg.Color
8 pos Vector
9 vel Vector
10 accel Vector
11 lifespan f32 = 255
12}
13
14pub fn (particle Particle) draw(mut ctx gg.Context) {
15 ctx.draw_circle_filled(particle.pos.x, get_params().height - particle.pos.y,
16 get_params().particle_radius, particle.color)
17}
18
19pub fn (mut particle Particle) tick(mut rocket Rocket, mut ctx gg.Context) {
20 particle.lifespan -= get_params().age_rate
21 particle.color.a = u8(particle.lifespan)
22
23 if particle.lifespan <= 0 {
24 rocket.dead = true
25 return
26 }
27
28 particle.accel += get_params().gravity
29 particle.vel += particle.accel
30 particle.vel = particle.vel.mult(get_params().drag)
31 particle.pos += particle.vel
32 particle.draw(mut ctx)
33
34 particle.accel = Vector{}
35}
36