gameplay prototype
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user