-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.odin
40 lines (32 loc) · 908 Bytes
/
helpers.odin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package ruffian
import sa "core:container/small_array"
import "core:math"
import "core:strings"
string_is_ascii :: proc(str: string) -> bool {
_, ok := strings.ascii_set_make(str)
return ok
}
index_of :: proc(arr: ^$A/[dynamic]$T, elem: T) -> int {
for i in 0 ..< len(arr) {
if arr[i] == elem {
return i
}
}
return -1
}
sa_slice :: proc(arr: ^$A/sa.Small_Array($N, $T)) -> []T {
return sa.slice(arr)
}
point_idx :: proc(p: Point) -> int {
return p.y * MAP_WIDTH + p.x
}
snap_unit_octant :: proc(vec: Point) -> Point {
angle := math.atan2(f64(vec.y), f64(vec.x))
octant := int(8 * angle / (2 * math.PI) + 8) % 8
return Dirs[Direction(octant)]
}
snap_unit_quad :: proc(vec: Point) -> Point {
angle := math.atan2(f64(vec.y), f64(vec.x))
quadrant := int(4 * angle / (2 * math.PI) + 4) % 4
return Dirs[Direction(quadrant)]
}