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 } }