From 946b9d0a72345cb5cb331eac05e5c8eeeac6d638 Mon Sep 17 00:00:00 2001 From: David Wu Date: Mon, 20 Mar 2017 16:20:05 +1300 Subject: [PATCH 1/2] Implement countdown clock -Added method countdownTimer() that countdowns from the current time to an selected time -Method is called in run (in Race) before the simulatedRace -Private integer PRERACE_TIME is used to set time before the race begins #story [16] --- src/main/java/seng302/Model/Race.java | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) 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); } From c33ce60e71646b9d1012e8ef76dfa6bd959c965d Mon Sep 17 00:00:00 2001 From: David Wu Date: Mon, 20 Mar 2017 16:26:18 +1300 Subject: [PATCH 2/2] Changed labels for timer -preRace countdown now has text saying "Time until race starts:" -Timer during race now says "Race clock:" #story [16] --- src/main/java/seng302/Model/Race.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 2f9ca9b3..96fb96cc 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -92,7 +92,7 @@ public abstract class Race implements Runnable { remainingSeconds = currentTimeInSeconds % 60; hours = minutes / 60; minutes = minutes % 60; - updateTime(String.format("%02d:%02d:%02d", hours, minutes, remainingSeconds)); + updateTime(String.format("Time until race starts: %02d:%02d:%02d", hours, minutes, remainingSeconds)); try { timeLoopEnded = System.currentTimeMillis(); Thread.sleep(SLEEP_TIME - (timeLoopEnded - currentTime)); @@ -114,7 +114,7 @@ public abstract class Race implements Runnable { remainingSeconds = currentTimeInSeconds % 60; hours = minutes / 60; minutes = minutes % 60; - return String.format("%02d:%02d:%02d", hours, minutes, remainingSeconds); + return String.format("Race clock: %02d:%02d:%02d", hours, minutes, remainingSeconds); } private void updateTime(String time){ @@ -167,7 +167,7 @@ public abstract class Race implements Runnable { */ protected void checkPosition(BoatInRace boat, long timeElapsed) { if (boat.getDistanceTravelledInLeg() > boat.getCurrentLeg().getDistance()){ - //updateController(); removed as we do not update the table every time anymore. +// updateController(); //boat has passed onto new leg if (boat.getCurrentLeg().getName().equals("Finish")) { //boat has finished @@ -176,6 +176,7 @@ public abstract class Race implements Runnable { } else { boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg() - boat.getCurrentLeg().getDistance()); Leg nextLeg = legs.get(boat.getCurrentLeg().getLegNumber() + 1); + boat.setCurrentLeg(nextLeg); boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg()); }