shifted annotation layers. Merged with dev.

This commit is contained in:
Calum
2017-05-25 16:29:27 +12:00
parent b73e4c89db
commit 65223ceaaf
7 changed files with 43 additions and 53 deletions
-3
View File
@@ -29,9 +29,6 @@ public class App extends Application {
StreamReceiver.noMoreBytes(); StreamReceiver.noMoreBytes();
System.exit(0); System.exit(0);
}); });
} }
public static void main(String[] args) { public static void main(String[] args) {
@@ -12,7 +12,9 @@ import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon; import javafx.scene.shape.Polygon;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import seng302.fxObjects.BoatAnnotations;
import seng302.fxObjects.BoatGroup; import seng302.fxObjects.BoatGroup;
import seng302.fxObjects.Wake;
import seng302.models.Colors; import seng302.models.Colors;
import seng302.models.Yacht; import seng302.models.Yacht;
import seng302.models.mark.GateMark; import seng302.models.mark.GateMark;
@@ -120,13 +122,12 @@ public class CanvasController {
FPSdisplay.setStrokeWidth(2); FPSdisplay.setStrokeWidth(2);
group.getChildren().add(FPSdisplay); group.getChildren().add(FPSdisplay);
group.getChildren().add(raceBorder); group.getChildren().add(raceBorder);
// TODO: 1/05/17 wmu16 - Change this call to now draw the marks as from the xml
initializeBoats();
initializeMarks(); initializeMarks();
initializeBoats();
timer = new AnimationTimer() { timer = new AnimationTimer() {
private long lastTime = 0; private long lastTime = 0;
private int FPSCount = 30;
@Override @Override
public void handle(long now) { public void handle(long now) {
@@ -145,7 +146,11 @@ public class CanvasController {
elapsedNanos = now - oldFrameTime; elapsedNanos = now - oldFrameTime;
long elapsedNanosPerFrame = elapsedNanos / frameTimes.length; long elapsedNanosPerFrame = elapsedNanos / frameTimes.length;
frameRate = 1_000_000_000.0 / elapsedNanosPerFrame; frameRate = 1_000_000_000.0 / elapsedNanosPerFrame;
drawFps(frameRate.intValue()); if (FPSCount-- == 0) {
FPSCount = 30;
drawFps(frameRate.intValue());
}
raceViewController.updateSparkLine();
} }
updateGroups(); updateGroups();
if (StreamParser.isRaceFinished()) { if (StreamParser.isRaceFinished()) {
@@ -243,7 +248,9 @@ public class CanvasController {
BoatPositionPacket positionPacket = movementQueue.take(); BoatPositionPacket positionPacket = movementQueue.take();
Point2D p2d = findScaledXY(positionPacket.getLat(), positionPacket.getLon()); Point2D p2d = findScaledXY(positionPacket.getLat(), positionPacket.getLon());
double heading = 360.0 / 0xffff * positionPacket.getHeading(); double heading = 360.0 / 0xffff * positionPacket.getHeading();
boatGroup.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), positionPacket.getTimeValid(), frameRate, boatGroup.getRaceId()); boatGroup.setDestination(
p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(),
positionPacket.getTimeValid(), frameRate);
} catch (InterruptedException e){ } catch (InterruptedException e){
e.printStackTrace(); e.printStackTrace();
} }
@@ -269,7 +276,9 @@ public class CanvasController {
*/ */
private void initializeBoats() { private void initializeBoats() {
Map<Integer, Yacht> boats = StreamParser.getBoats(); Map<Integer, Yacht> boats = StreamParser.getBoats();
Group boatAnnotations = new Group(); Group wakes = new Group();
Group trails = new Group();
Group annotations = new Group();
ArrayList<Participant> participants = StreamParser.getXmlObject().getRaceXML().getParticipants(); ArrayList<Participant> participants = StreamParser.getXmlObject().getRaceXML().getParticipants();
ArrayList<Integer> participantIDs = new ArrayList<>(); ArrayList<Integer> participantIDs = new ArrayList<>();
@@ -282,10 +291,14 @@ public class CanvasController {
boat.setColour(Colors.getColor()); boat.setColour(Colors.getColor());
BoatGroup boatGroup = new BoatGroup(boat, boat.getColour()); BoatGroup boatGroup = new BoatGroup(boat, boat.getColour());
boatGroups.add(boatGroup); boatGroups.add(boatGroup);
boatAnnotations.getChildren().add(boatGroup.getLowPriorityAnnotations()); trails.getChildren().add(boatGroup.getTrail());
wakes.getChildren().add(boatGroup.getWake());
annotations.getChildren().add(boatGroup.getAnnotations());
} }
} }
group.getChildren().add(boatAnnotations); group.getChildren().addAll(trails);
group.getChildren().addAll(wakes);
group.getChildren().addAll(annotations);
group.getChildren().addAll(boatGroups); group.getChildren().addAll(boatGroups);
} }
@@ -7,7 +7,6 @@ import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.geometry.Point2D; import javafx.geometry.Point2D;
import javafx.geometry.Side;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.chart.LineChart; import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis; import javafx.scene.chart.NumberAxis;
@@ -34,10 +33,10 @@ import seng302.controllers.annotations.ImportantAnnotationController;
import seng302.controllers.annotations.ImportantAnnotationDelegate; import seng302.controllers.annotations.ImportantAnnotationDelegate;
import seng302.controllers.annotations.ImportantAnnotationsState; import seng302.controllers.annotations.ImportantAnnotationsState;
import seng302.fxObjects.BoatGroup; import seng302.fxObjects.BoatGroup;
import seng302.fxObjects.MarkGroup;
import seng302.models.*; import seng302.models.*;
import seng302.models.mark.GateMark; import seng302.models.mark.GateMark;
import seng302.models.mark.Mark; import seng302.models.mark.Mark;
import seng302.models.mark.MarkGroup;
import seng302.models.mark.SingleMark; import seng302.models.mark.SingleMark;
import seng302.models.stream.StreamParser; import seng302.models.stream.StreamParser;
import seng302.models.stream.XMLParser; import seng302.models.stream.XMLParser;
@@ -14,7 +14,7 @@ import java.text.SimpleDateFormat;
/** /**
* Collection of annotations for boats. * Collection of annotations for boats.
*/ */
class BoatAnnotations extends Group{ public class BoatAnnotations extends Group{
//Text offset constants //Text offset constants
private static final double X_OFFSET_TEXT = 18d; private static final double X_OFFSET_TEXT = 18d;
+16 -32
View File
@@ -51,7 +51,7 @@ public class BoatGroup extends Group {
private Double distanceTravelled = 0.0; private Double distanceTravelled = 0.0;
private Point2D lastPoint; private Point2D lastPoint;
private boolean destinationSet; private boolean destinationSet;
private BoatAnnotations boatAnnotations;; private BoatAnnotations boatAnnotations;
private Boolean isSelected = true; //All boats are initialised as selected private Boolean isSelected = true; //All boats are initialised as selected
@@ -106,6 +106,10 @@ public class BoatGroup extends Group {
boatPoly.setCache(true); boatPoly.setCache(true);
boatPoly.setCacheHint(CacheHint.SPEED); boatPoly.setCacheHint(CacheHint.SPEED);
boatAnnotations = new BoatAnnotations(boat, color); boatAnnotations = new BoatAnnotations(boat, color);
leftLayLine = new Line();
rightLayline = new Line();
wake = new Wake(0, -BOAT_HEIGHT); wake = new Wake(0, -BOAT_HEIGHT);
super.getChildren().addAll(boatPoly, boatAnnotations); super.getChildren().addAll(boatPoly, boatAnnotations);
} }
@@ -196,25 +200,6 @@ public class BoatGroup extends Group {
wake.updatePosition(); wake.updatePosition();
} }
/**
* Calculates the rotational velocity required to reach the rotationalGoal from the
* currentRotation.
*/
private Double calculateRotationalVelocity(Double rotationalGoal) {
Double rotationalVelocity;
if (Math.abs(rotationalGoal - lastRotation) > 180) {
if (rotationalGoal - lastRotation >= 0.0) {
rotationalVelocity = ((rotationalGoal - lastRotation) - 360) / 200;
} else {
rotationalVelocity = (360 + (rotationalGoal - lastRotation)) / 200;
}
} else {
rotationalVelocity = (rotationalGoal - lastRotation) / 200;
}
return rotationalVelocity;
}
/** /**
* 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
* *
@@ -224,7 +209,7 @@ public class BoatGroup extends Group {
* @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, public void setDestination(double newXValue, double newYValue, double rotation,
double groundSpeed, long timeValid, double frameRate, long id) { double groundSpeed, long timeValid, double frameRate) {
if (lastTimeValid == 0) { if (lastTimeValid == 0) {
lastTimeValid = timeValid - 200; lastTimeValid = timeValid - 200;
moveTo(newXValue, newYValue, rotation); moveTo(newXValue, newYValue, rotation);
@@ -338,19 +323,17 @@ public class BoatGroup extends Group {
return boat.getSourceID(); return boat.getSourceID();
} }
/** public Wake getWake () {
* Due to javaFX limitations annotations associated with a boat that you want to appear below return wake;
* all boats in the Z-axis need to be pulled out of the BoatGroup and added to the parent group
* of the BoatGroups. This function returns these annotations as a group.
*
* @return A group containing low priority annotations.
*/
public Group getLowPriorityAnnotations() {
Group group = new Group();
group.getChildren().addAll(wake, lineGroup);
return group;
} }
public Group getTrail() {
return lineGroup;
}
public BoatAnnotations getAnnotations() {
return boatAnnotations;
}
public Double getBoatLayoutX() { public Double getBoatLayoutX() {
return boatPoly.getLayoutX(); return boatPoly.getLayoutX();
@@ -369,4 +352,5 @@ public class BoatGroup extends Group {
public String toString() { public String toString() {
return boat.toString(); return boat.toString();
} }
} }
+3 -3
View File
@@ -12,7 +12,7 @@ import javafx.scene.transform.Scale;
/** /**
* A group containing objects used to represent wakes onscreen. Contains functionality for their animation. * A group containing objects used to represent wakes onscreen. Contains functionality for their animation.
*/ */
class Wake extends Group { public class Wake extends Group {
//The number of wakes //The number of wakes
private int numWakes = 8; private int numWakes = 8;
@@ -79,11 +79,11 @@ class Wake extends Group {
} }
} }
double rad = (12 / numWakes) + velocity; double rad = (14 / numWakes) + velocity;
for (Arc arc : arcs) { for (Arc arc : arcs) {
arc.setRadiusX(rad); arc.setRadiusX(rad);
arc.setRadiusY(rad); arc.setRadiusY(rad);
rad += (12 / numWakes) + (velocity / 2); rad += (14 / numWakes) + (velocity / 2.5);
} }
} }
-3
View File
@@ -6,8 +6,6 @@ import seng302.controllers.RaceViewController;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import seng302.models.stream.StreamParser;
import seng302.models.stream.XMLParser.RaceXMLObject.Corner;
/** /**
* Yacht class for the racing boat. * Yacht class for the racing boat.
@@ -38,7 +36,6 @@ public class Yacht {
private Long markRoundTime; private Long markRoundTime;
// Mark rounding // Mark rounding
private Long markRoundingTime;
private Mark lastMarkRounded; private Mark lastMarkRounded;
private Mark nextMark; private Mark nextMark;