diff --git a/src/roast.html b/src/roast.html
index 00d4066..fa52bff 100644
--- a/src/roast.html
+++ b/src/roast.html
@@ -6,7 +6,10 @@
- 0:00
+
+ 0:00
+ (0%)
+
diff --git a/src/roast.ts b/src/roast.ts
index 1ef3284..cea7401 100644
--- a/src/roast.ts
+++ b/src/roast.ts
@@ -6,6 +6,7 @@ let log: Array<{ time: string, event: string, temp?: number }> = [];
let targets: number[] = [];
let currentTargetIndex = 0;
let interval: NodeJS.Timeout | null = null;
+let firstCrackTime: number | null = null;
declare global {
interface Window {
@@ -45,9 +46,21 @@ function stopTimer(): void {
}
function updateTimerDisplay(): void {
+ const roastTimeEl = document.getElementById("roastTime")!;
+ const devPercentEl = document.getElementById("devPercent")!;
+
const minutes = Math.floor(timer / 60);
const seconds = timer % 60;
- document.getElementById("timer")!.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;
+ roastTimeEl.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;
+
+ if (firstCrackTime !== null && timer > firstCrackTime) {
+ const devTime = timer - firstCrackTime;
+ const devRatio = Math.floor((devTime / timer) * 100);
+ devPercentEl.textContent = ` (${devRatio}%)`;
+ devPercentEl.style.display = 'inline';
+ } else {
+ devPercentEl.style.display = 'none';
+ }
}
function logEvent(eventName: string): void {
@@ -73,6 +86,10 @@ function logEvent(eventName: string): void {
tempButtons.innerHTML = "";
return;
}
+ if (eventName === "First Crack") {
+ firstCrackTime = timer;
+ }
+
log.push({ time: formatTime(timer), event: eventName });
updateLog();
}
@@ -84,6 +101,8 @@ function resetSystem(): void {
document.getElementById("create-plan")!.classList.remove("hidden");
const tempButtons = document.getElementById("temp-buttons")!;
tempButtons.innerHTML = "";
+ const devPercentEl = document.getElementById("devPercent")!;
+ devPercentEl.style.display = "none";
}
function formatTime(seconds: number): string {