Very simple particle system.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package game
|
||||
|
||||
import rl "vendor:raylib"
|
||||
|
||||
Particle :: struct {
|
||||
pos: rl.Vector2,
|
||||
vel: rl.Vector2,
|
||||
color: rl.Color,
|
||||
life: f32,
|
||||
max_life: f32,
|
||||
size: f32
|
||||
}
|
||||
|
||||
update_particles :: proc(particles: ^[dynamic]Particle, dt: f32) {
|
||||
#reverse for &p, i in particles {
|
||||
p.life -= dt
|
||||
if p.life <= 0 {
|
||||
unordered_remove(particles, i)
|
||||
continue
|
||||
}
|
||||
|
||||
// update live particles
|
||||
p.pos += p.vel * dt
|
||||
|
||||
// times the velocitt so we can slow it down over time
|
||||
p.vel *= 0.92
|
||||
}
|
||||
}
|
||||
|
||||
render_particles :: proc(particles: [dynamic]Particle) {
|
||||
rl.BeginBlendMode(.ADDITIVE)
|
||||
|
||||
for p in particles {
|
||||
alpha := u8(255 * (p.life / p.max_life))
|
||||
col := rl.Color{p.color.r, p.color.g, p.color.b, alpha}
|
||||
rl.DrawRectangleV(p.pos, {p.size, p.size}, col)
|
||||
}
|
||||
|
||||
rl.EndBlendMode()
|
||||
}
|
||||
Reference in New Issue
Block a user