76 lines
2 KiB
Text
76 lines
2 KiB
Text
import "graphics" for Canvas, Color
|
|
import "dome" for Window
|
|
import "math" for Math
|
|
|
|
var Degrees06 = Num.pi / 30
|
|
var Degrees30 = Degrees06 * 5
|
|
var Degrees90 = Degrees30 * 3
|
|
|
|
class Clock {
|
|
construct new(hour, minute, second) {
|
|
Window.title = "Clock"
|
|
_size = 590
|
|
Window.resize(_size, _size)
|
|
Canvas.resize(_size, _size)
|
|
_spacing = 40
|
|
_diameter = _size - 2 * _spacing
|
|
_cx = (_diameter / 2).floor + _spacing
|
|
_cy = _cx
|
|
_hour = hour
|
|
_minute = minute
|
|
_second = second
|
|
}
|
|
|
|
drawFace() {
|
|
var radius = (_diameter / 2).floor
|
|
Canvas.circlefill(_cx, _cy, radius, Color.yellow)
|
|
Canvas.circle(_cx, _cy, radius, Color.black)
|
|
}
|
|
|
|
drawHand(angle, radius, color) {
|
|
var x = _cx + (radius * Math.cos(angle)).truncate
|
|
var y = _cy - (radius * Math.sin(angle)).truncate
|
|
Canvas.line(_cx, _cy, x, y, color, 2)
|
|
}
|
|
|
|
drawClock() {
|
|
Canvas.cls(Color.white)
|
|
drawFace()
|
|
var angle = Degrees90 - Degrees06 * _second
|
|
drawHand(angle, (_diameter/2).floor - 30, Color.red)
|
|
var minsecs = _minute + _second/60
|
|
angle = Degrees90 - Degrees06 * minsecs
|
|
drawHand(angle, (_diameter / 3).floor + 10, Color.black)
|
|
var hourmins = _hour + minsecs / 60
|
|
angle = Degrees90 - Degrees30 * hourmins
|
|
drawHand(angle, (_diameter / 4).floor + 10, Color.black)
|
|
}
|
|
|
|
init() {
|
|
_frame = 0
|
|
drawClock()
|
|
}
|
|
|
|
update() {
|
|
_frame = _frame + 1
|
|
if (_frame == 60) {
|
|
_frame = 0
|
|
_second = _second + 1
|
|
if (_second == 60) {
|
|
_minute = _minute + 1
|
|
_second = 0
|
|
if (_minute == 60) {
|
|
_hour = _hour + 1
|
|
_minute = 0
|
|
if (_hour == 24) _hour = 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
draw(alpha) {
|
|
drawClock()
|
|
}
|
|
}
|
|
|
|
var Game = Clock.new(0, 0, 0) // start at midnight
|