package main import "core:fmt" import "core:math" import "core:math/rand" import rl "vendor:raylib" move :: proc(t: ^Transform, x, y: f32) { next_position := Transform { position = {t.position.x + x, t.position.y + y}, } if e, occupied := world.entities[next_position.position]; !occupied { delete_key(&world.entities, t.position) defer world.entities[t.position] = e t.position = next_position.position } } shoot :: proc(t: Transform, pos: rl.Vector2) { pos_centered := center_to_grid(pos) t_centered := center_to_grid(t.position) spray: rl.Vector2 = { pos.x + rand.float32_range(0, CELL_SIZE), pos.y + rand.float32_range(0, CELL_SIZE), } line_particle := LineParticle { pos1 = t.position * CELL_SIZE + 10, pos2 = spray, tint = rl.WHITE, lifetime = 0.2, } if player.weapon.cooldown == true {return} player.weapon.cooldown = true start_timer(60 / player.weapon.rpm, proc() {player.weapon.cooldown = false}) spawn_particle(line_particle) } center_to_grid :: proc(pos: rl.Vector2) -> rl.Vector2 { pos_x, pos_y: f32 pos_x = pos.x + CELL_SIZE / 2 pos_y = pos.y + CELL_SIZE / 2 return rl.Vector2{pos_x, pos_y} }