Added method in mark group to draw lay lines, also added next mark to Yacht class.

#story[956]
This commit is contained in:
Michael Rausch
2017-05-23 18:54:42 +12:00
parent e1b8e19966
commit ca8ea03870
4 changed files with 67 additions and 1 deletions
@@ -184,11 +184,18 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
updateBoatSelectionComboBox(); updateBoatSelectionComboBox();
for (Yacht yacht : StreamParser.getBoatsPos().values()) { 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) { if (yacht.getLastMarkRounded() != null) {
System.out.println(yacht.getLastMarkRounded().getName()); System.out.println(yacht.getLastMarkRounded().getName());
} else { } else {
System.out.println("sup"); System.out.println("sup");
} }
if (yacht.getNextMark() != null){
System.out.println("yacht = " + yacht.getNextMark().getName());
}
} }
}) })
+10
View File
@@ -5,6 +5,7 @@ import seng302.models.mark.Mark;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import seng302.models.stream.XMLParser.RaceXMLObject.Corner;
/** /**
* Yacht class for the racing boat. * Yacht class for the racing boat.
@@ -34,6 +35,7 @@ public class Yacht {
// Mark rounding // Mark rounding
private Long markRoundingTime; private Long markRoundingTime;
private Mark lastMarkRounded; private Mark lastMarkRounded;
private Mark nextMark;
/** /**
* Used in EventTest and RaceTest. * Used in EventTest and RaceTest.
@@ -181,4 +183,12 @@ public class Yacht {
public String toString() { public String toString() {
return boatName; return boatName;
} }
public void setNextMark(Mark nextMark) {
this.nextMark = nextMark;
}
public Mark getNextMark(){
return nextMark;
}
} }
@@ -45,6 +45,36 @@ public class MarkGroup extends Group {
super.getChildren().add(markCircle); 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) { public MarkGroup(GateMark mark, Point2D points1, Point2D points2) {
marks.add(mark.getSingleMark1()); marks.add(mark.getSingleMark1());
marks.add(mark.getSingleMark2()); marks.add(mark.getSingleMark2());
@@ -84,6 +114,8 @@ public class MarkGroup extends Group {
} }
super.getChildren().add(line); 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) public void moveMarkTo (double x, double y, long raceId)
@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.TreeMap; import java.util.TreeMap;
@@ -23,6 +24,7 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import seng302.models.Yacht; import seng302.models.Yacht;
import seng302.models.mark.Mark; import seng302.models.mark.Mark;
import seng302.models.stream.XMLParser.RaceXMLObject.Corner;
import seng302.models.stream.packets.BoatPositionPacket; import seng302.models.stream.packets.BoatPositionPacket;
import seng302.models.stream.packets.StreamPacket; import seng302.models.stream.packets.StreamPacket;
@@ -446,6 +448,21 @@ public class StreamParser extends Thread{
for (Mark mark : xmlObject.getRaceXML().getCompoundMarks()) { for (Mark mark : xmlObject.getRaceXML().getCompoundMarks()) {
if (mark.getCompoundMarkID() == markId) { if (mark.getCompoundMarkID() == markId) {
boats.get((int)subjectId).setLastMarkRounded(mark); boats.get((int)subjectId).setLastMarkRounded(mark);
List<Corner> 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);
}
}
}
}
} }
} }
} }