diff --git a/game.odin b/game.odin index 7e41036..e9e83cd 100644 --- a/game.odin +++ b/game.odin @@ -400,7 +400,6 @@ reset_game :: proc() { game.board[y][x].value = 0 game.board[y][x].new_value = 0 game.board[y][x].merged = false - delete(game.board[y][x].emitter.particles) game.board[y][x].emitter = ParticleEmitter{} } } diff --git a/particle.odin b/particle.odin index 8c25322..bd870a3 100644 --- a/particle.odin +++ b/particle.odin @@ -5,6 +5,9 @@ import "core:time" import "zephr" +@private +MAX_PARTICLES :: 500 + Particle :: struct { pos: zephr.Vec2, vel: zephr.Vec2, @@ -15,7 +18,7 @@ Particle :: struct { ParticleEmitter :: struct { pos: zephr.Vec2, - particles: [dynamic]Particle, + particles: [MAX_PARTICLES]Particle, duration: time.Duration, spawn_rate: u32, } @@ -27,7 +30,7 @@ last_emitted_particle_idx: int = 0 particle_time: time.Duration = 0 @private -update_particles :: proc(delta_t: time.Duration, particles: ^[dynamic]Particle, start_pos: zephr.Vec2) { +update_particles :: proc(delta_t: time.Duration, particles: ^[MAX_PARTICLES]Particle, start_pos: zephr.Vec2) { delta_t_f := cast(f32)time.duration_seconds(delta_t) for p in particles { @@ -46,9 +49,9 @@ update_particles :: proc(delta_t: time.Duration, particles: ^[dynamic]Particle, } @private -find_first_dead_particle :: proc(particles: [dynamic]Particle) -> int { +find_first_dead_particle :: proc(particles: [MAX_PARTICLES]Particle) -> int { // search from last emitted particle, should return almost immediately - for i in last_emitted_particle_idx..