| 1 | module objects |
| 2 | |
| 3 | import gg |
| 4 | |
| 5 | pub struct Particle { |
| 6 | pub mut: |
| 7 | color gg.Color |
| 8 | pos Vector |
| 9 | vel Vector |
| 10 | accel Vector |
| 11 | lifespan f32 = 255 |
| 12 | } |
| 13 | |
| 14 | pub 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 | |
| 19 | pub 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 | |