Files
hakorune/examples/wasm/02_clock_timer.nyash
2025-08-13 00:27:07 +00:00

151 lines
3.9 KiB
Plaintext

// ⏰ Clock & Timer Demo - TimerBox + WebCanvasBox
// Digital and analog clock with timer functionality
print("⏰ === Clock & Timer Demo Starting ===")
// Initialize components
local canvas, timer
canvas = new WebCanvasBox("demo-canvas", 600, 400)
timer = new TimerBox()
// Clear canvas with dark background
canvas.clear()
canvas.setFillStyle("#1a1a1a")
canvas.fillRect(0, 0, 600, 400)
// Function to draw digital clock
local drawDigitalClock
drawDigitalClock = function() {
local now, hours, minutes, seconds, timeString
now = timer.now()
// Convert to readable time (simplified for demo)
seconds = (now / 1000) % 60
minutes = ((now / 1000) / 60) % 60
hours = (((now / 1000) / 60) / 60) % 24
// Format time string
timeString = hours + ":" + minutes + ":" + seconds
// Draw digital time
canvas.setFillStyle("#00ff00")
canvas.fillText(timeString, 200, 100, "48px 'Courier New'", "#00ff00")
}
// Function to draw analog clock
local drawAnalogClock
drawAnalogClock = function() {
local centerX, centerY, radius
centerX = 300
centerY = 250
radius = 80
// Draw clock face
canvas.setFillStyle("#333333")
canvas.fillCircle(centerX, centerY, radius)
// Draw clock border
canvas.setStrokeStyle("#00ff00")
canvas.setLineWidth(3)
canvas.strokeCircle(centerX, centerY, radius)
// Draw hour markers
local i, angle, x1, y1, x2, y2
i = 0
loop(i < 12) {
angle = (i * 30) * 3.14159 / 180 // Convert to radians
x1 = centerX + (radius - 15) * Math.cos(angle - 3.14159/2)
y1 = centerY + (radius - 15) * Math.sin(angle - 3.14159/2)
x2 = centerX + (radius - 5) * Math.cos(angle - 3.14159/2)
y2 = centerY + (radius - 5) * Math.sin(angle - 3.14159/2)
canvas.setStrokeStyle("#ffffff")
canvas.setLineWidth(2)
canvas.drawLine(x1, y1, x2, y2, "#ffffff", 2)
i = i + 1
}
// Draw center dot
canvas.setFillStyle("#ff0000")
canvas.fillCircle(centerX, centerY, 5)
}
// Timer functionality
local timerStart, timerElapsed, isTimerRunning
timerStart = 0
timerElapsed = 0
isTimerRunning = false
local drawTimer
drawTimer = function() {
local timerText
if (isTimerRunning) {
timerElapsed = timer.now() - timerStart
}
// Format elapsed time
local seconds, minutes
seconds = (timerElapsed / 1000) % 60
minutes = ((timerElapsed / 1000) / 60) % 60
timerText = "Timer: " + minutes + ":" + seconds
// Draw timer display
canvas.setFillStyle("#ffff00")
canvas.fillText(timerText, 150, 350, "24px Arial", "#ffff00")
// Draw timer control hint
canvas.setFillStyle("#ffffff")
canvas.fillText("Press S to start/stop timer", 150, 380, "16px Arial", "#ffffff")
}
// Main drawing function
local draw
draw = function() {
// Clear canvas
canvas.setFillStyle("#1a1a1a")
canvas.fillRect(0, 0, 600, 400)
// Draw title
canvas.setFillStyle("#ffffff")
canvas.fillText("Nyash Clock & Timer", 180, 50, "28px Arial", "#ffffff")
// Draw components
drawDigitalClock()
drawAnalogClock()
drawTimer()
}
// Initial draw
draw()
// Start timer for demo
timerStart = timer.now()
isTimerRunning = true
print("⏰ Clock & Timer Demo Ready!")
print("• Digital clock shows current time")
print("• Analog clock with hour markers")
print("• Built-in timer functionality")
print("• Press S to start/stop timer (in browser)")
print("🌐 Everything is Box - even time itself!")
// Draw some additional visual elements for the demo
canvas.setStrokeStyle("#00ff00")
canvas.setLineWidth(1)
// Draw decorative frame
canvas.strokeRect(10, 10, 580, 380)
// Add some visual flair
local i
i = 0
loop(i < 5) {
canvas.setFillStyle("#444444")
canvas.fillCircle(50 + i * 100, 30, 3)
i = i + 1
}
print("✅ Clock & Timer Demo Complete!")