From df24fe072a71aacb4561af117359a9bd5672ec19 Mon Sep 17 00:00:00 2001 From: Haoming Yin Date: Thu, 28 Sep 2017 00:13:45 +1300 Subject: [PATCH] Added animation for wind turning. - enlarged the wind image size to centre the compass - added animation to smooth the turning --- .../controllers/RaceViewController.java | 14 +++++++++++++- src/main/resources/images/wind-180.png | Bin 26171 -> 27571 bytes 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index f32e23ad..ea778aa9 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeUnit; +import javafx.animation.RotateTransition; import javafx.animation.Timeline; import javafx.application.Platform; import javafx.beans.property.ReadOnlyBooleanProperty; @@ -43,6 +44,7 @@ import javafx.scene.shape.Polyline; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.stage.StageStyle; +import javafx.util.Duration; import seng302.model.ClientYacht; import seng302.model.RaceState; import seng302.model.mark.CompoundMark; @@ -140,6 +142,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel private Timer blinkingTimer = new Timer(); private ImageView iconToDisplay; + private Double lastWindDirection; + public void initialize() { contentStackPane.setVisible(false); Image loadingImage = new Image("PP.png"); @@ -188,6 +192,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel chatHistory.decreaseOpacity(); } }); + + lastWindDirection = 0d; } public void showFinishDialog(ArrayList finishedBoats) { @@ -435,7 +441,13 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel */ private void updateWindDirection(double direction) { windDirectionLabel.setText(String.format("%.1f°", direction)); - windImageView.setRotate(direction); + RotateTransition rt = new RotateTransition(Duration.millis(300), windImageView); + rt.setByAngle(direction - lastWindDirection); + rt.setCycleCount(3); + rt.setAutoReverse(true); + rt.play(); + lastWindDirection = direction; +// windImageView.setRotate(direction); } /** diff --git a/src/main/resources/images/wind-180.png b/src/main/resources/images/wind-180.png index 0eb77ef38427e9f3611f5c6fb2ee3153ef358128..67891df812322ea50f3dd8566542bda3ad9dd853 100644 GIT binary patch delta 12534 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ξ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