v/examples/fireworks/modules/objects/particle.v

37 lines
782 B
V

module objects
import gg
import gx
pub struct Particle {
pub mut:
color gx.Color
pos Vector
vel Vector
accel Vector
lifespan f32 = 255
}
pub fn (particle Particle) draw(mut ctx gg.Context) {
ctx.draw_circle_filled(particle.pos.x, get_params().height - particle.pos.y, get_params().particle_radius,
particle.color)
}
pub fn (mut particle Particle) tick(mut rocket Rocket, mut ctx gg.Context) {
particle.lifespan -= get_params().age_rate
particle.color.a = byte(particle.lifespan)
if particle.lifespan <= 0 {
rocket.dead = true
return
}
particle.accel += get_params().gravity
particle.vel += particle.accel
particle.vel = particle.vel.mult(get_params().drag)
particle.pos += particle.vel
particle.draw(mut ctx)
particle.accel = Vector{}
}