Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
87
Task/Draw-a-clock/Odin/draw-a-clock.odin
Normal file
87
Task/Draw-a-clock/Odin/draw-a-clock.odin
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
package clock
|
||||
|
||||
import rl "vendor:raylib"
|
||||
import "core:time"
|
||||
import "core:time/datetime"
|
||||
import "core:time/timezone"
|
||||
import "core:os"
|
||||
import "core:math"
|
||||
|
||||
TimePeriod :: enum {
|
||||
AM,
|
||||
PM
|
||||
}
|
||||
|
||||
DistanceAngle :: proc(distance: f32, angle: f32) -> (vector: rl.Vector2) {
|
||||
vector.x = math.sin_f32(angle)
|
||||
vector.y = -math.cos_f32(angle)
|
||||
vector *= distance
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
tz, ok := timezone.region_load("local")
|
||||
|
||||
rl.SetConfigFlags({.MSAA_4X_HINT})
|
||||
rl.InitWindow(640, 480, "Rosetta Code - draw a clock")
|
||||
|
||||
screen_center := rl.Vector2 {f32(rl.GetScreenWidth()) / 2, f32(rl.GetScreenHeight()) / 2}
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
rl.BeginDrawing()
|
||||
|
||||
rl.ClearBackground(rl.RAYWHITE)
|
||||
|
||||
conversion_succeeded: bool = true
|
||||
date_time: datetime.DateTime
|
||||
date_time, ok = time.time_to_datetime(time.now())
|
||||
if !ok do conversion_succeeded = false
|
||||
|
||||
date_time, ok = timezone.datetime_to_tz(date_time, tz)
|
||||
if !ok do conversion_succeeded = false
|
||||
|
||||
regular_time: time.Time
|
||||
regular_time, ok = time.datetime_to_time(date_time)
|
||||
if !ok do conversion_succeeded = false
|
||||
|
||||
if !conversion_succeeded do os.exit(1)
|
||||
|
||||
period: TimePeriod
|
||||
hour, min, sec := time.clock_from_time(regular_time)
|
||||
if hour > 12 {
|
||||
hour -= 12
|
||||
period = .PM
|
||||
}
|
||||
|
||||
radius := f32(rl.GetScreenHeight()) / 2.5
|
||||
|
||||
rl.DrawCircleV(screen_center, radius, rl.LIGHTGRAY)
|
||||
|
||||
rl.DrawLineEx(screen_center, screen_center + DistanceAngle(radius * .75, (f32(hour) / 12) * math.TAU), 4, rl.BLACK)
|
||||
rl.DrawLineEx(screen_center, screen_center + DistanceAngle(radius * .7, (f32(min) / 60) * math.TAU), 4, rl.DARKGREEN)
|
||||
rl.DrawLineEx(screen_center, screen_center + DistanceAngle(radius * .5, (f32(sec) / 60) * math.TAU), 4, rl.RED)
|
||||
|
||||
for i := 0; i < 60; i += 1 {
|
||||
angle := (f32(i) / 60) * math.TAU
|
||||
|
||||
inside_distance: f32 = .8
|
||||
thickness: f32 = 1.5
|
||||
|
||||
if i % 5 == 0 {
|
||||
inside_distance = .775
|
||||
thickness = 3
|
||||
}
|
||||
|
||||
rl.DrawLineEx(screen_center + DistanceAngle(radius * inside_distance, angle), screen_center + DistanceAngle(radius * .95, angle), thickness, rl.DARKGRAY)
|
||||
}
|
||||
|
||||
//fmt.printfln("%2d:%2d:%2d %s", hour, min, sec, period)
|
||||
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
||||
rl.CloseWindow()
|
||||
|
||||
timezone.region_destroy(tz)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue