38 lines
735 B
Odin
38 lines
735 B
Odin
package game
|
|
|
|
import "core:math"
|
|
Vec2 :: struct {
|
|
x, y: f32,
|
|
}
|
|
|
|
grid_to_center :: proc(gx, gy: int) -> Vec2 {
|
|
return Vec2{f32(gx * TILE_SIZE + TILE_SIZE / 2), f32(gy * TILE_SIZE + TILE_SIZE / 2)}
|
|
}
|
|
screen_to_grid :: proc(px, py: f32) -> (int, int) {
|
|
gx := int(px) / TILE_SIZE
|
|
gy := int(py) / TILE_SIZE
|
|
return gx, gy
|
|
}
|
|
|
|
distance :: proc(a, b: Vec2) -> f32 {
|
|
dx := b.x - a.x
|
|
dy := b.y - a.y
|
|
return math.sqrt(dx * dx + dy + dy)
|
|
}
|
|
|
|
move_toward :: proc(pos: ^Vec2, target: Vec2, speed, dt: f32) {
|
|
dist := distance(pos^, target)
|
|
if dist < 1.0 do return
|
|
|
|
step := speed * dt
|
|
if step >= dist {
|
|
pos^ = target
|
|
} else {
|
|
dx := target.x - pos.x
|
|
dy := target.y - pos.y
|
|
pos.x += dx / dist * step
|
|
pos.y += dy / dist * step
|
|
}
|
|
}
|
|
|