Files
grimm-odin/general/particles.odin
T
2026-09-26 20:48:09 -07:00

61 lines
1.2 KiB
Odin

package main
import "core:rexcode/isa/x86/tablegen/generated"
import rl "vendor:raylib"
Particle :: union {
SpriteParticle,
LineParticle,
}
SpriteParticle :: struct {
pos: rl.Vector2,
texture: rl.Texture2D,
tint: rl.Color,
lifetime: f32,
}
LineParticle :: struct {
pos1: rl.Vector2,
pos2: rl.Vector2,
tint: rl.Color,
lifetime: f32,
}
particles: [dynamic]Particle
spawn_particle :: proc(particle: Particle) {
append(&particles, particle)
}
run_particle_system :: proc() {
for &p, i in particles {
draw_particle(&p, i)
}
}
draw_particle :: proc(particle: ^Particle, index: int) {
switch &p in particle {
case SpriteParticle:
draw_sprite_particle(&p, index)
case LineParticle:
draw_line_particle(&p, index)
}
}
draw_sprite_particle :: proc(particle: ^SpriteParticle, index: int) {
rl.DrawTexture(particle.texture, i32(particle.pos.x), i32(particle.pos.y), particle.tint)
particle.lifetime -= rl.GetFrameTime()
if particle.lifetime <= 0 {
particles[index] = nil
}
}
draw_line_particle :: proc(particle: ^LineParticle, index: int) {
rl.DrawLineV(particle.pos1, particle.pos2, particle.tint)
particle.lifetime -= rl.GetFrameTime()
if particle.lifetime <= 0 {
particles[index] = nil
}
}