Fixed est time to next mark and time from last mark annotation update after commit e0750f53 in BoatGroup.java

#story[924] #story[927]
This commit is contained in:
Zhi You Tan
2017-05-22 16:17:52 +12:00
parent 408d70c420
commit 6f1b0b06c3
+61 -49
View File
@@ -18,13 +18,14 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
/** /**
* BoatGroup is a javafx group that by default contains a graphical objects for representing a 2 dimensional boat. * BoatGroup is a javafx group that by default contains a graphical objects for representing a 2
* It contains a single polygon for the boat, a group of lines to show it's path, a wake object and two text labels to * dimensional boat. It contains a single polygon for the boat, a group of lines to show it's path,
* annotate the boat teams name and the boats velocity. The boat will update it's position onscreen everytime * a wake object and two text labels to annotate the boat teams name and the boats velocity. The
* UpdatePosition is called unless the window is minimized in which case it attempts to store animations and apply them * boat will update it's position onscreen everytime UpdatePosition is called unless the window is
* when the window is maximised. * minimized in which case it attempts to store animations and apply them when the window is
* maximised.
*/ */
public class BoatGroup extends Group{ public class BoatGroup extends Group {
//Constants for drawing //Constants for drawing
private static final double TEAMNAME_X_OFFSET = 10d; private static final double TEAMNAME_X_OFFSET = 10d;
@@ -62,36 +63,40 @@ public class BoatGroup extends Group{
/** /**
* Creates a BoatGroup with the default triangular boat polygon. * Creates a BoatGroup with the default triangular boat polygon.
* @param boat The boat that the BoatGroup will represent. Must contain an ID which will be used to tell which *
* BoatGroup to update. * @param boat The boat that the BoatGroup will represent. Must contain an ID which will be used
* to tell which BoatGroup to update.
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
*/ */
public BoatGroup (Yacht boat, Color color){ public BoatGroup(Yacht boat, Color color) {
this.boat = boat; this.boat = boat;
initChildren(color); initChildren(color);
this.textColor = color; this.textColor = color;
} }
/** /**
* Creates a BoatGroup with the boat being the default polygon. The head of the boat should be at point (0,0). * Creates a BoatGroup with the boat being the default polygon. The head of the boat should be
* @param boat The boat that the BoatGroup will represent. Must contain an ID which will be used to tell which * at point (0,0).
* BoatGroup to update. *
* @param boat The boat that the BoatGroup will represent. Must contain an ID which will be used
* to tell which BoatGroup to update.
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
* @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat polygon. * @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat
* polygon.
*/ */
public BoatGroup (Yacht boat, Color color, double... points) public BoatGroup(Yacht boat, Color color, double... points) {
{
this.boat = boat; this.boat = boat;
initChildren(color, points); initChildren(color, points);
} }
/** /**
* Return a text object with caching and a color applied * Return a text object with caching and a color applied
*
* @param defaultText The default text to display * @param defaultText The default text to display
* @param fill The text fill color * @param fill The text fill color
* @return The text object * @return The text object
*/ */
private Text getTextObject(String defaultText, Color fill){ private Text getTextObject(String defaultText, Color fill) {
Text text = new Text(defaultText); Text text = new Text(defaultText);
text.setFill(fill); text.setFill(fill);
@@ -103,10 +108,12 @@ public class BoatGroup extends Group{
/** /**
* Creates the javafx objects that will be the in the group by default. * Creates the javafx objects that will be the in the group by default.
*
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
* @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat polygon. * @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat
* polygon.
*/ */
private void initChildren (Color color, double... points) { private void initChildren(Color color, double... points) {
textColor = color; textColor = color;
destinationSet = false; destinationSet = false;
@@ -132,14 +139,14 @@ public class BoatGroup extends Group{
updateLastMarkRoundingTime(); updateLastMarkRoundingTime();
updateTimeTillNextMark(); updateTimeTillNextMark();
if (estTimeToNextMarkObject != null){ if (estTimeToNextMarkObject != null) {
estTimeToNextMarkObject.setX(ESTTIMETONEXTMARK_X_OFFSET); estTimeToNextMarkObject.setX(ESTTIMETONEXTMARK_X_OFFSET);
estTimeToNextMarkObject.setY(ESTTIMETONEXTMARK_Y_OFFSET); estTimeToNextMarkObject.setY(ESTTIMETONEXTMARK_Y_OFFSET);
estTimeToNextMarkObject estTimeToNextMarkObject
.relocate(estTimeToNextMarkObject.getX(), estTimeToNextMarkObject.getY()); .relocate(estTimeToNextMarkObject.getX(), estTimeToNextMarkObject.getY());
} }
if (legTimeObject != null){ if (legTimeObject != null) {
legTimeObject.setX(LEGTIME_X_OFFSET); legTimeObject.setX(LEGTIME_X_OFFSET);
legTimeObject.setY(LEGTIME_Y_OFFSET); legTimeObject.setY(LEGTIME_Y_OFFSET);
legTimeObject.relocate(legTimeObject.getX(), legTimeObject.getY()); legTimeObject.relocate(legTimeObject.getX(), legTimeObject.getY());
@@ -154,9 +161,10 @@ public class BoatGroup extends Group{
/** /**
* Creates the javafx objects that will be the in the group by default. * Creates the javafx objects that will be the in the group by default.
*
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
*/ */
private void initChildren (Color color) { private void initChildren(Color color) {
initChildren(color, initChildren(color,
-BOAT_WIDTH / 2, BOAT_HEIGHT / 2, -BOAT_WIDTH / 2, BOAT_HEIGHT / 2,
0.0, -BOAT_HEIGHT / 2, 0.0, -BOAT_HEIGHT / 2,
@@ -164,7 +172,9 @@ public class BoatGroup extends Group{
} }
/** /**
* Moves the boat and its children annotations from its current coordinates by specified amounts. * Moves the boat and its children annotations from its current coordinates by specified
* amounts.
*
* @param dx The amount to move the X coordinate by * @param dx The amount to move the X coordinate by
* @param dy The amount to move the Y coordinate by * @param dy The amount to move the Y coordinate by
*/ */
@@ -186,6 +196,7 @@ public class BoatGroup extends Group{
/** /**
* Moves the boat and its children annotations to coordinates specified * Moves the boat and its children annotations to coordinates specified
*
* @param x The X coordinate to move the boat to * @param x The X coordinate to move the boat to
* @param y The Y coordinate to move the boat to * @param y The Y coordinate to move the boat to
*/ */
@@ -213,11 +224,11 @@ public class BoatGroup extends Group{
/** /**
* Updates the time until next mark label, will create a label if one doesn't exist * Updates the time until next mark label, will create a label if one doesn't exist
*/ */
private void updateTimeTillNextMark(){ private void updateTimeTillNextMark() {
if (estTimeToNextMarkObject == null){ if (estTimeToNextMarkObject == null) {
estTimeToNextMarkObject = getTextObject("", textColor); estTimeToNextMarkObject = getTextObject("Next mark: -", textColor);
} }
if (boat.getEstimateTimeAtNextMark() != null){ if (boat.getEstimateTimeAtNextMark() != null) {
DateFormat format = new SimpleDateFormat("mm:ss"); DateFormat format = new SimpleDateFormat("mm:ss");
String timeToNextMark = format String timeToNextMark = format
.format(boat.getEstimateTimeAtNextMark() - StreamParser.getCurrentTimeLong()); .format(boat.getEstimateTimeAtNextMark() - StreamParser.getCurrentTimeLong());
@@ -230,18 +241,17 @@ public class BoatGroup extends Group{
/** /**
* Updates the time since last mark rounding, will create a label if one doesn't exist * Updates the time since last mark rounding, will create a label if one doesn't exist
*/ */
private void updateLastMarkRoundingTime(){ private void updateLastMarkRoundingTime() {
if (legTimeObject == null){ if (legTimeObject == null) {
legTimeObject = getTextObject("", textColor); legTimeObject = getTextObject("Last mark: -", textColor);
} }
if (boat.getMarkRoundingTime() != null){ if (boat.getMarkRoundingTime() != null) {
DateFormat format = new SimpleDateFormat("mm:ss"); DateFormat format = new SimpleDateFormat("mm:ss");
String elapsedTime = format String elapsedTime = format
.format(StreamParser.getCurrentTimeLong() - boat.getMarkRoundingTime()); .format(StreamParser.getCurrentTimeLong() - boat.getMarkRoundingTime());
legTimeObject.setText("Last mark: " + elapsedTime); legTimeObject.setText("Last mark: " + elapsedTime);
} } else {
else{
legTimeObject.setText("Last mark: -"); legTimeObject.setText("Last mark: -");
} }
@@ -255,14 +265,14 @@ public class BoatGroup extends Group{
moveGroupBy(xIncrement, yIncrement); moveGroupBy(xIncrement, yIncrement);
framesToMove = framesToMove - 1; framesToMove = framesToMove - 1;
if (framesToMove <= 0){ if (framesToMove <= 0) {
isStopped = true; isStopped = true;
} }
if (distanceTravelled > 70){ if (distanceTravelled > 70) {
distanceTravelled = 0d; distanceTravelled = 0d;
if (lastPoint != null){ if (lastPoint != null) {
Line l = new Line( Line l = new Line(
lastPoint.getX(), lastPoint.getX(),
lastPoint.getY(), lastPoint.getY(),
@@ -276,18 +286,19 @@ public class BoatGroup extends Group{
lineGroup.getChildren().add(l); lineGroup.getChildren().add(l);
} }
if (destinationSet){ if (destinationSet) {
lastPoint = new Point2D(boatPoly.getLayoutX(), boatPoly.getLayoutY()); lastPoint = new Point2D(boatPoly.getLayoutX(), boatPoly.getLayoutY());
} }
} }
wake.updatePosition(1000/60); wake.updatePosition(1000 / 60);
} }
/** /**
* Calculates the rotational velocity required to reach the rotationalGoal from the currentRotation. * Calculates the rotational velocity required to reach the rotationalGoal from the
* currentRotation.
*/ */
protected Double calculateRotationalVelocity (Double rotationalGoal) { protected Double calculateRotationalVelocity(Double rotationalGoal) {
Double rotationalVelocity = 0.0; Double rotationalVelocity = 0.0;
if (Math.abs(rotationalGoal - lastRotation) > 180) { if (Math.abs(rotationalGoal - lastRotation) > 180) {
@@ -310,22 +321,24 @@ public class BoatGroup extends Group{
/** /**
* Sets the destination of the boat and the headng it should have once it reaches * Sets the destination of the boat and the headng it should have once it reaches
*
* @param newXValue The X co-ordinate the boat needs to move to. * @param newXValue The X co-ordinate the boat needs to move to.
* @param newYValue The Y co-ordinate the boat needs to move to. * @param newYValue The Y co-ordinate the boat needs to move to.
* @param rotation Rotation to move graphics to. * @param rotation Rotation to move graphics to.
* @param timeValid the time the position values are valid for * @param timeValid the time the position values are valid for
*/ */
public void setDestination (double newXValue, double newYValue, double rotation, double groundSpeed, long timeValid, double frameRate, long id) { public void setDestination(double newXValue, double newYValue, double rotation,
if (lastTimeValid == 0){ double groundSpeed, long timeValid, double frameRate, long id) {
if (lastTimeValid == 0) {
lastTimeValid = timeValid - 200; lastTimeValid = timeValid - 200;
moveTo(newXValue, newYValue, rotation); moveTo(newXValue, newYValue, rotation);
} }
framesToMove = Math.round((frameRate/(1000.0f/(timeValid-lastTimeValid)))); framesToMove = Math.round((frameRate / (1000.0f / (timeValid - lastTimeValid))));
double dx = newXValue - boatPoly.getLayoutX(); double dx = newXValue - boatPoly.getLayoutX();
double dy = newYValue - boatPoly.getLayoutY(); double dy = newYValue - boatPoly.getLayoutY();
xIncrement = dx/framesToMove; xIncrement = dx / framesToMove;
yIncrement = dy/framesToMove; yIncrement = dy / framesToMove;
destinationSet = true; destinationSet = true;
@@ -361,7 +374,6 @@ public class BoatGroup extends Group{
} }
public void setTeamNameObjectVisible(Boolean visible) { public void setTeamNameObjectVisible(Boolean visible) {
teamNameObject.setVisible(visible); teamNameObject.setVisible(visible);
} }
@@ -400,13 +412,13 @@ public class BoatGroup extends Group{
} }
/** /**
* Due to javaFX limitations annotations associated with a boat that you want to appear below all boats in the * Due to javaFX limitations annotations associated with a boat that you want to appear below
* Z-axis need to be pulled out of the BoatGroup and added to the parent group of the BoatGroups. This function * all boats in the Z-axis need to be pulled out of the BoatGroup and added to the parent group
* returns these annotations as a group. * of the BoatGroups. This function returns these annotations as a group.
* *
* @return A group containing low priority annotations. * @return A group containing low priority annotations.
*/ */
public Group getLowPriorityAnnotations () { public Group getLowPriorityAnnotations() {
Group group = new Group(); Group group = new Group();
group.getChildren().addAll(wake, lineGroup); group.getChildren().addAll(wake, lineGroup);
return group; return group;