diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 47343dfb..2a014452 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -24,7 +24,8 @@ public abstract class Race implements Runnable { protected long totalTimeElapsed; - private int SLEEP_TIME = 1000; //time in milliseconds to pause in a paced loop + private int SLEEP_TIME = 25; //time in milliseconds to pause in a paced loop + private int PRERACE_TIME = Integer.MAX_VALUE; //time in milliseconds to pause during pre-race /** * Initailiser for Race @@ -53,6 +54,7 @@ public abstract class Race implements Runnable { public void run() { updateController(); preRace(); + countdownTimer(); simulateRace(); } @@ -72,6 +74,34 @@ public abstract class Race implements Runnable { } + private void countdownTimer() { + long currentTime = System.currentTimeMillis(); + long startTime = currentTime + PRERACE_TIME; + long minutes; + long currentTimeInSeconds; + long remainingSeconds; + long hours; + long timeLeft; + long timeLoopEnded; + + while (currentTime <= startTime) { + timeLeft = startTime - currentTime; + currentTimeInSeconds = timeLeft / 1000; + minutes = currentTimeInSeconds / 60; + remainingSeconds = currentTimeInSeconds % 60; + hours = minutes / 60; + minutes = minutes % 60; + updateTime(String.format("%02d:%02d:%02d", hours, minutes, remainingSeconds)); + try { + timeLoopEnded = System.currentTimeMillis(); + Thread.sleep(SLEEP_TIME - (timeLoopEnded - currentTime)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + currentTime = System.currentTimeMillis(); + } + } + private String calcTimer() { long minutes; long currentTimeInSeconds; @@ -81,7 +111,8 @@ public abstract class Race implements Runnable { currentTimeInSeconds = totalTimeElapsed / 1000; minutes = currentTimeInSeconds / 60; remainingSeconds = currentTimeInSeconds % 60; - hours = minutes/60; + hours = minutes / 60; + minutes = minutes % 60; return String.format("%02d:%02d:%02d", hours, minutes, remainingSeconds); }