diff --git a/src/main/java/seng302/models/BoatGroup.java b/src/main/java/seng302/models/BoatGroup.java
index a262e61d..0cdb6d82 100644
--- a/src/main/java/seng302/models/BoatGroup.java
+++ b/src/main/java/seng302/models/BoatGroup.java
@@ -148,6 +148,7 @@ public class BoatGroup extends RaceObject{
public void setDestination (double newXValue, double newYValue, double rotation, int... raceIds) {
destinationSet = true;
boat.setVelocity(StreamParser.boatSpeeds.get((long)boat.getId()));
+ velocityObject.setText(String.valueOf(boat.getVelocity()));
if (hasRaceId(raceIds)) {
this.pixelVelocityX = (newXValue - boatPoly.getLayoutX()) / expectedUpdateInterval;
this.pixelVelocityY = (newYValue - boatPoly.getLayoutY()) / expectedUpdateInterval;
diff --git a/src/main/java/seng302/models/mark/Mark.java b/src/main/java/seng302/models/mark/Mark.java
index 2c086b80..a32ba20f 100644
--- a/src/main/java/seng302/models/mark/Mark.java
+++ b/src/main/java/seng302/models/mark/Mark.java
@@ -17,10 +17,10 @@ public abstract class Mark {
* @param name the name of the mark
* @param markType the type of mark. either GATE_MARK or SINGLE_MARK.
*/
- public Mark (String name, MarkType markType) {
+ public Mark (String name, MarkType markType, int id) {
this.name = name;
this.markType = markType;
- id = 0;
+ this.id = id;
}
public Mark(String name, MarkType markType, double latitude, double longitude) {
diff --git a/src/main/java/seng302/models/mark/MarkGroup.java b/src/main/java/seng302/models/mark/MarkGroup.java
index ab189034..6c36cb43 100644
--- a/src/main/java/seng302/models/mark/MarkGroup.java
+++ b/src/main/java/seng302/models/mark/MarkGroup.java
@@ -39,6 +39,9 @@ public class MarkGroup extends RaceObject {
System.out.println("HERE ARE THE CHILDREN LOL");
if (mark.getMarkType() == MarkType.SINGLE_MARK) {
super.getChildren().add(new Circle(0, 0, MARK_RADIUS, color));
+ nodeDestinations = new Point2D[]{
+ new Point2D(super.getChildren().get(0).getLayoutX()
+ , super.getChildren().get(0).getLayoutY())};
} else {
marks.add(((GateMark) mark).getSingleMark1());
marks.add(((GateMark) mark).getSingleMark2());
@@ -96,6 +99,7 @@ public class MarkGroup extends RaceObject {
setDestinationGroup(x, y);
childrenIndex++;
}
+ updateChildren();
}
@@ -105,9 +109,13 @@ public class MarkGroup extends RaceObject {
this.nodeDestinations[childIndex] = new Point2D(relativeX, relativeY);
this.nodePixelVelocitiesX[childIndex] = (relativeX - super.getChildren().get(childIndex).getLayoutX()) / expectedUpdateInterval;
this.nodePixelVelocitiesY[childIndex] = (relativeY - super.getChildren().get(childIndex).getLayoutY()) / expectedUpdateInterval;
+
}
private void setDestinationGroup (double x, double y) {
+ double relativeX = x - super.getLayoutX();
+ double relativeY = y - super.getLayoutY();
+ this.nodeDestinations[0] = new Point2D(relativeX, relativeY);
pixelVelocityX = (x - super.getLayoutX()) / expectedUpdateInterval;
pixelVelocityY = (y - super.getLayoutY()) / expectedUpdateInterval;
}
@@ -119,11 +127,11 @@ public class MarkGroup extends RaceObject {
}
public void updatePosition (long timeInterval) {
- double x = pixelVelocityX * timeInterval;
- double y = pixelVelocityY * timeInterval;
- double rotation = rotationalVelocity * timeInterval;
- moveGroupBy(x, y, rotation);
- updateChildren(timeInterval);
+// double x = pixelVelocityX * timeInterval;
+// double y = pixelVelocityY * timeInterval;
+// double rotation = rotationalVelocity * timeInterval;
+// moveGroupBy(x, y, rotation);
+// updateChildren(timeInterval);
}
public void moveGroupBy (double x, double y, double rotation) {
@@ -132,42 +140,59 @@ public class MarkGroup extends RaceObject {
rotateTo(rotation);
}
- private void updateChildren (double timeInterval) {
+ private void updateChildren () {
+
if (mainMark.getMarkType() != MarkType.SINGLE_MARK) {
+ Line line = (Line) super.getChildren().get(2);
+ for (int childIndex = 0; childIndex < 2; childIndex++){
+ Circle mark = (Circle) super.getChildren().get(childIndex);
+ Point2D dest = nodeDestinations[childIndex];
+ mark.setCenterY(dest.getY());
+ mark.setCenterX(dest.getX());
+ }
+ line.setStartX(nodeDestinations[0].getX());
+ line.setStartY(nodeDestinations[0].getY());
+ line.setEndX(nodeDestinations[1].getX());
+ line.setEndY(nodeDestinations[1].getY());
+// Circle mark = (Circle) super.getChildren().get(0);
+// if (nodePixelVelocitiesX[0] > 0 && mark.getLayoutX() >= nodeDestinations[0].getX()) {
+// nodePixelVelocitiesX[0] = 0;
+// } else if (nodePixelVelocitiesX[0] < 0 && mark.getLayoutX() <= nodeDestinations[0].getX()) {
+// nodePixelVelocitiesX[0] = 0;
+// } else {
+// mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[0] * timeInterval);
+// mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[0] * timeInterval);
+// }
+// if (nodePixelVelocitiesY[0] >= 0 && mark.getLayoutY() > nodeDestinations[0].getY()) {
+// nodePixelVelocitiesY[0] = 0;
+// } else if (nodePixelVelocitiesY[0] < 0 && mark.getLayoutY() <= nodeDestinations[0].getY()) {
+// nodePixelVelocitiesY[0] = 0;
+// } else {
+// mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[0] * timeInterval);
+// mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[0] * timeInterval);
+// }
+// mark = (Circle) super.getChildren().get(1);
+// if (nodePixelVelocitiesX[1] > 0 && mark.getLayoutX() >= nodeDestinations[1].getX()) {
+// nodePixelVelocitiesX[1] = 0;
+// } else if (nodePixelVelocitiesX[1] < 0 && mark.getLayoutX() <= nodeDestinations[1].getX()) {
+// nodePixelVelocitiesX[1] = 0;
+// } else {
+// mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[1] * timeInterval);
+// mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[1] * timeInterval);
+// }
+// if (nodePixelVelocitiesY[1] >= 0 && mark.getLayoutY() > nodeDestinations[1].getY()) {
+// nodePixelVelocitiesY[1] = 0;
+// } else if (nodePixelVelocitiesY[1] < 0 && mark.getLayoutY() <= nodeDestinations[1].getY()) {
+// nodePixelVelocitiesY[1] = 0;
+// } else {
+// mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[1] * timeInterval);
+// mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[1] * timeInterval);
+// }
+ } else {
Circle mark = (Circle) super.getChildren().get(0);
- if (nodePixelVelocitiesX[0] > 0 && mark.getLayoutX() >= nodeDestinations[0].getX()) {
- nodePixelVelocitiesX[0] = 0;
- } else if (nodePixelVelocitiesX[0] < 0 && mark.getLayoutX() <= nodeDestinations[0].getX()) {
- nodePixelVelocitiesX[0] = 0;
- } else {
- mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[0] * timeInterval);
- mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[0] * timeInterval);
- }
- if (nodePixelVelocitiesY[0] >= 0 && mark.getLayoutY() > nodeDestinations[0].getY()) {
- nodePixelVelocitiesY[0] = 0;
- } else if (nodePixelVelocitiesY[0] < 0 && mark.getLayoutY() <= nodeDestinations[0].getY()) {
- nodePixelVelocitiesY[0] = 0;
- } else {
- mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[0] * timeInterval);
- mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[0] * timeInterval);
- }
- mark = (Circle) super.getChildren().get(1);
- if (nodePixelVelocitiesX[1] > 0 && mark.getLayoutX() >= nodeDestinations[1].getX()) {
- nodePixelVelocitiesX[1] = 0;
- } else if (nodePixelVelocitiesX[1] < 0 && mark.getLayoutX() <= nodeDestinations[1].getX()) {
- nodePixelVelocitiesX[1] = 0;
- } else {
- mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[1] * timeInterval);
- mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[1] * timeInterval);
- }
- if (nodePixelVelocitiesY[1] >= 0 && mark.getLayoutY() > nodeDestinations[1].getY()) {
- nodePixelVelocitiesY[1] = 0;
- } else if (nodePixelVelocitiesY[1] < 0 && mark.getLayoutY() <= nodeDestinations[1].getY()) {
- nodePixelVelocitiesY[1] = 0;
- } else {
- mark.setLayoutX(mark.getLayoutX() + nodePixelVelocitiesX[1] * timeInterval);
- mark.setLayoutY(mark.getLayoutY() + nodePixelVelocitiesY[1] * timeInterval);
- }
+ Point2D dest = nodeDestinations[0];
+ mark.setCenterY(dest.getY());
+ mark.setCenterX(dest.getX());
}
}
diff --git a/src/main/java/seng302/models/mark/SingleMark.java b/src/main/java/seng302/models/mark/SingleMark.java
index 81f6f0b4..d4b4f3f2 100644
--- a/src/main/java/seng302/models/mark/SingleMark.java
+++ b/src/main/java/seng302/models/mark/SingleMark.java
@@ -9,6 +9,7 @@ public class SingleMark extends Mark {
private double lat;
private double lon;
private String name;
+ private int id;
/**
@@ -18,10 +19,11 @@ public class SingleMark extends Mark {
* @param lat, the latitude of the marker
* @param lon, the longitude of the marker
*/
- public SingleMark(String name, double lat, double lon) {
- super(name, MarkType.SINGLE_MARK);
+ public SingleMark(String name, double lat, double lon, int id) {
+ super(name, MarkType.SINGLE_MARK, id);
this.lat = lat;
this.lon = lon;
+ this.id = id;
}
/**
@@ -30,9 +32,10 @@ public class SingleMark extends Mark {
* @param name, the name of the marker
*/
public SingleMark(String name) {
- super(name, MarkType.SINGLE_MARK);
+ super(name, MarkType.SINGLE_MARK, 0);
this.lat = 0;
this.lon = 0;
+ this.id = 0;
}
public double getLatitude() {
diff --git a/src/main/java/seng302/models/parsers/CourseParser.java b/src/main/java/seng302/models/parsers/CourseParser.java
index 04a40e0a..ae7f7856 100644
--- a/src/main/java/seng302/models/parsers/CourseParser.java
+++ b/src/main/java/seng302/models/parsers/CourseParser.java
@@ -35,7 +35,8 @@ public class CourseParser extends FileParser {
String name = element.getElementsByTagName("name").item(0).getTextContent();
double lat = Double.valueOf(element.getElementsByTagName("latitude").item(0).getTextContent());
double lon = Double.valueOf(element.getElementsByTagName("longitude").item(0).getTextContent());
- SingleMark singleMark = new SingleMark(name, lat, lon);
+ int id = Integer.valueOf(element.getElementsByTagName("id").item(0).getTextContent());
+ SingleMark singleMark = new SingleMark(name, lat, lon, id);
return singleMark;
} else {
throw new NoSuchElementException("Cannot generate a mark by given node.");
diff --git a/src/main/java/seng302/models/parsers/StreamParser.java b/src/main/java/seng302/models/parsers/StreamParser.java
index 7cbfc90d..265e5c82 100644
--- a/src/main/java/seng302/models/parsers/StreamParser.java
+++ b/src/main/java/seng302/models/parsers/StreamParser.java
@@ -48,21 +48,20 @@ public class StreamParser extends Thread{
Thread.sleep(1);
}
while (StreamReceiver.packetBuffer.peek() != null){
- StreamPacket packet = StreamReceiver.packetBuffer.peek();
- int delayTime = 1000;
- int loopTime = delayTime + 1000;
- long sleepTime = 0;
- long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime);
- if (transitTime < 0){
- transitTime = loopTime + delayTime;
- }
- if (transitTime < delayTime) {
- sleepTime = delayTime - (transitTime);
- Thread.sleep(sleepTime);
- }
- System.out.println(sleepTime);
-
- packet = StreamReceiver.packetBuffer.take();
+// StreamPacket packet = StreamReceiver.packetBuffer.peek();
+// int delayTime = 1000;
+// int loopTime = delayTime + 1000;
+// long sleepTime = 0;
+// long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime);
+// if (transitTime < 0){
+// transitTime = loopTime + delayTime;
+// }
+// if (transitTime < delayTime) {
+// sleepTime = delayTime - (transitTime);
+// Thread.sleep(sleepTime);
+// }
+// System.out.println(sleepTime);
+ StreamPacket packet = StreamReceiver.packetBuffer.take();
parsePacket(packet);
Thread.sleep(1);
while (StreamReceiver.packetBuffer.peek() == null) {
@@ -228,7 +227,6 @@ public class StreamParser extends Thread{
while (payloadStream.available() > 0 && (currentChar = payloadStream.read()) != 0) {
xmlMessage += (char)currentChar;
}
-
//Create XML document Object
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
@@ -323,7 +321,7 @@ public class StreamParser extends Thread{
// long speed = extractTimeStamp(speedBytes, 2);
double groundSpeed = bytesToLong(groundSpeedBytes)/1000.0;
short s = (short) ((groundSpeedBytes[1] & 0xFF) << 8 | (groundSpeedBytes[0] & 0xFF));
- if ((int)deviceType == 1 || (int)deviceType == 4){
+ if ((int)deviceType == 1 || (int)deviceType == 3){
// System.out.println("boatId = " + boatId);
// System.out.println("deviceType = " + (long)deviceType);
// System.out.println("seq = " + seq);
diff --git a/src/main/resources/config/course.xml b/src/main/resources/config/course.xml
index e11a24cf..6e1a72fb 100644
--- a/src/main/resources/config/course.xml
+++ b/src/main/resources/config/course.xml
@@ -8,17 +8,20 @@
Start1
57.6703330
11.8278330
+ 122
Start2
57.6706330
11.8281330
+ 123
Mid Mark
57.6675700
11.8359880
+ 131
Leeward Gate
@@ -26,11 +29,13 @@
Leeward Gate1
57.6708220
11.8433900
+ 124
Leeward Gate2
57.6711220
11.8436900
+ 125
@@ -39,11 +44,13 @@
Windward Gate1
57.6650170
11.8279170
+ 126
Windward Gate2
57.6653170
11.8282170
+ 127
@@ -52,11 +59,13 @@
Finish1
57.6715240
11.8444950
+ 128
Finish2
57.6718240
11.8447950
+ 129
diff --git a/src/test/java/seng302/EventTest.java b/src/test/java/seng302/EventTest.java
index 0be0fc98..2d53c8a3 100644
--- a/src/test/java/seng302/EventTest.java
+++ b/src/test/java/seng302/EventTest.java
@@ -23,7 +23,7 @@ public class EventTest {
@Test
public void testBoatHeading() throws Exception {
Boat boat = new Boat("testBoat");
- Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1), new SingleMark("mark2", 121.9,99.2), 0);
+ Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0);
assertEquals(event.getBoatHeading(), 228.0266137055349, 1e-15);
}
@@ -31,7 +31,7 @@ public class EventTest {
@Test
public void testDistanceBetweenMarks() throws Exception {
Boat boat = new Boat("testBoat");
- Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1), new SingleMark("mark2", 121.9,99.2), 0);
+ Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0);
assertEquals(event.getDistanceBetweenMarks(), 339059.653830461, 1e-15);
}
diff --git a/src/test/java/seng302/models/mark/MarkTest.java b/src/test/java/seng302/models/mark/MarkTest.java
index b48f5818..3db92540 100644
--- a/src/test/java/seng302/models/mark/MarkTest.java
+++ b/src/test/java/seng302/models/mark/MarkTest.java
@@ -16,8 +16,8 @@ public class MarkTest {
@Before
public void setUp() throws Exception {
- this.singleMark1 = new SingleMark("testMark_SM1", 12.23234, -34.342);
- this.singleMark2 = new SingleMark("testMark_SM2", 12.23239, -34.352);
+ this.singleMark1 = new SingleMark("testMark_SM1", 12.23234, -34.342, 1);
+ this.singleMark2 = new SingleMark("testMark_SM2", 12.23239, -34.352, 2);
this.gateMark = new GateMark("testMark_GM", MarkType.OPEN_GATE, singleMark1, singleMark2, singleMark1.getLatitude(), singleMark2.getLongitude());
}