45 lines
1.1 KiB
Odin
45 lines
1.1 KiB
Odin
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}
|
|
}
|