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