151 lines
3.9 KiB
Plaintext
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!")
|