-
Notifications
You must be signed in to change notification settings - Fork 0
/
rotate.lua
118 lines (99 loc) · 2.06 KB
/
rotate.lua
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
-- rotate
local degrees = 0
function init()
-- setup
screen.aa(0)
screen.font_face(0)
screen.font_size(8)
redraw()
end
function redraw()
local center_x = 62
local center_y = 32
-- clear
screen.clear()
screen.level(15)
screen.translate(0, 0)
-- ui
screen.move(1, 8)
screen.text(degrees .. "*")
-- save the screen state so we can reset the rotation
screen.save()
-- move the origin to the center of the screen
screen.translate(center_x, center_y)
-- rotation
screen.rotate(degs_to_rads(degrees))
draw_compass(50)
-- translate the origin back
screen.translate(-center_x, -center_y)
-- update
screen.update()
-- restore the screen rotation
screen.restore()
end
function key(k, z)
if k == 2 and z == 0 then
redraw()
end
end
function degs_to_rads(degrees)
return degrees * (math.pi / 180)
end
function cycle(value, min, max)
if value > max then
return min
elseif value < min then
return max
else
return value
end
end
function draw_compass(line)
screen.level(15)
screen.circle(0, 0, math.floor((line - 13) / 2))
screen.fill()
screen.level(0)
screen.circle(0, 0, math.floor((line - 15) / 2))
screen.fill()
-- horizontal line
screen.level(15)
screen.move(-line / 2, 0)
screen.line_rel(line, 0)
screen.stroke()
-- vertical line
screen.move(0, -line / 2)
screen.line_rel(0, line)
screen.stroke()
-- arrow head
screen.move(-2, (-line / 2) + 2)
screen.line_rel(3, 0)
screen.stroke()
screen.move(-3, (-line / 2) + 3)
screen.line_rel(5, 0)
screen.stroke()
screen.move(-4, (-line / 2) + 4)
screen.line_rel(7, 0)
screen.stroke()
-- text
screen.move(-3, (-line / 2) - 1)
screen.text("N")
screen.fill()
screen.move((line / 2) + 1, 2)
screen.text("E")
screen.fill()
screen.move(-3, (line / 2) + 6)
screen.text("S")
screen.fill()
screen.move((-line / 2) - 6, 2)
screen.text("W")
screen.fill()
end
function enc(e, d)
degrees = cycle(degrees + d, 0, 360)
print(degrees)
redraw()
end
-- dev
function rerun()
norns.script.load(norns.state.script)
end