diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 5c589004..1f7ae19f 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -184,11 +184,18 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel updateBoatSelectionComboBox(); for (Yacht yacht : StreamParser.getBoatsPos().values()) { + System.out.println("\n\nyacht.getBoatName() = " + yacht.getBoatName()); + System.out.println("yacht.getLastMarkRounded() = " + yacht.getLastMarkRounded()); + System.out.println("yacht.getNextMark() = " + yacht.getNextMark()); + if (yacht.getLastMarkRounded() != null) { System.out.println(yacht.getLastMarkRounded().getName()); } else { System.out.println("sup"); } + if (yacht.getNextMark() != null){ + System.out.println("yacht = " + yacht.getNextMark().getName()); + } } }) diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/models/Yacht.java index a5899540..88287ba8 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/models/Yacht.java @@ -5,6 +5,7 @@ import seng302.models.mark.Mark; import java.text.DateFormat; import java.text.SimpleDateFormat; +import seng302.models.stream.XMLParser.RaceXMLObject.Corner; /** * Yacht class for the racing boat. @@ -34,6 +35,7 @@ public class Yacht { // Mark rounding private Long markRoundingTime; private Mark lastMarkRounded; + private Mark nextMark; /** * Used in EventTest and RaceTest. @@ -181,4 +183,12 @@ public class Yacht { public String toString() { return boatName; } + + public void setNextMark(Mark nextMark) { + this.nextMark = nextMark; + } + + public Mark getNextMark(){ + return nextMark; + } } diff --git a/src/main/java/seng302/models/mark/MarkGroup.java b/src/main/java/seng302/models/mark/MarkGroup.java index c87ae174..f7327107 100644 --- a/src/main/java/seng302/models/mark/MarkGroup.java +++ b/src/main/java/seng302/models/mark/MarkGroup.java @@ -45,6 +45,36 @@ public class MarkGroup extends Group { super.getChildren().add(markCircle); } + private Point2D getPointRotation(Point2D ref, Double distance, Double angle){ + Double newX = ref.getX() + (ref.getX() + distance -ref.getX())*Math.cos(angle) - (ref.getY() + distance -ref.getY())*Math.sin(angle); + Double newY = ref.getY() + (ref.getX() + distance -ref.getX())*Math.sin(angle) + (ref.getY() + distance -ref.getY())*Math.cos(angle); + + return new Point2D(newX, newY); + } + + /** + * Adds a lay-line to the MarkGroup + * @param startPoint The mark where the lay line starts + * @param layLineAngle The angle the laylines point + * @param baseAngle The reference angle + */ + private void addLayLine(Point2D startPoint, Double layLineAngle, Double baseAngle){ + + Point2D ep1 = getPointRotation(startPoint, 50.0, baseAngle + -layLineAngle); + Point2D ep2 = getPointRotation(startPoint, 50.0, baseAngle + layLineAngle); + + Line line1 = new Line(startPoint.getX(), startPoint.getY(), ep1.getX(), ep1.getY()); + Line line2 = new Line(startPoint.getX(), startPoint.getY(), ep2.getX(), ep2.getY()); + + line1.setStrokeWidth(0.5); + line1.setStroke(Color.GREEN); + + line2.setStrokeWidth(0.5); + line2.setStroke(Color.GREEN); + + super.getChildren().addAll(line1, line2); + } + public MarkGroup(GateMark mark, Point2D points1, Point2D points2) { marks.add(mark.getSingleMark1()); marks.add(mark.getSingleMark2()); @@ -84,6 +114,8 @@ public class MarkGroup extends Group { } super.getChildren().add(line); + addLayLine(points1, 12.0, 90.0); + addLayLine(points2, 12.0, 90.0); } public void moveMarkTo (double x, double y, long raceId) diff --git a/src/main/java/seng302/models/stream/StreamParser.java b/src/main/java/seng302/models/stream/StreamParser.java index f31a0519..00bfed25 100644 --- a/src/main/java/seng302/models/stream/StreamParser.java +++ b/src/main/java/seng302/models/stream/StreamParser.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.TreeMap; @@ -23,6 +24,7 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.models.Yacht; import seng302.models.mark.Mark; +import seng302.models.stream.XMLParser.RaceXMLObject.Corner; import seng302.models.stream.packets.BoatPositionPacket; import seng302.models.stream.packets.StreamPacket; @@ -446,7 +448,22 @@ public class StreamParser extends Thread{ for (Mark mark : xmlObject.getRaceXML().getCompoundMarks()) { if (mark.getCompoundMarkID() == markId) { boats.get((int)subjectId).setLastMarkRounded(mark); - } + + List markSequence = xmlObject.getRaceXML().getCompoundMarkSequence(); + + for (int i = 0; i < markSequence.size() - 1; i++){ + Corner corner = markSequence.get(i); + + if (corner.getCompoundMarkID().equals(mark.getCompoundMarkID()) && (i + 1) < markSequence.size()){ + Corner nextCorner = markSequence.get(i+1); + for (Mark m : xmlObject.getRaceXML().getCompoundMarks()){ + if (m.getCompoundMarkID() == nextCorner.getCompoundMarkID()){ + boats.get((int)subjectId).setNextMark(m); + } + } + } + } + } } }