Fixed bug which caused boats to all travel to the same position.

This commit is contained in:
Calum
2017-04-26 19:19:03 +12:00
parent c776d22941
commit 95bafdc0d1
2 changed files with 42 additions and 10 deletions
@@ -166,20 +166,28 @@ public class CanvasController {
//descending = nextMark.getY() > boatGroup.getLayoutY(); //descending = nextMark.getY() > boatGroup.getLayoutY();
//leftToRight = nextMark.getX() < boatGroup.getLayoutX(); //leftToRight = nextMark.getX() < boatGroup.getLayoutX();
boatGroup.updatePosition(1000 / 6); boatGroup.updatePosition(1000 / 60);
Point3D p = StreamParser.boatPositions.get((long)boatGroup.getBoat().getId()); Point3D p = StreamParser.boatPositions.get((long)boatGroup.getBoat().getId());
//System.out.println("boatGroup = " + boatGroup.getBoat().getId()); //System.out.println("boatGroup = " + boatGroup.getBoat().getId());
//System.out.println("StreamParser.boatPositions.toString() = " + StreamParser.boatPositions.toString()); //System.out.println("StreamParser.boatPositions.toString() = " + StreamParser.boatPositions.toString());
if (p != null) { if (p != null) {
Point2D p2d = latLonToXY(p.getX(), p.getY()); Point2D p2d = latLonToXY(p.getX(), p.getY());
System.out.println("p2d = " + p2d); //System.out.println("p2d = " + p2d);
if (!boatGroup.getBoat().isSamePos(p2d)) { if (!boatGroup.getBoat().isSamePos(p2d)) {
//System.out.println("p.toString() = " + p.toString()); //System.out.println("p.toString() = " + p.toString());
double heading = 360.0 / 0xffff * p.getZ(); double heading = 360.0 / 0xffff * p.getZ();
System.out.println("heading = " + heading); //System.out.println("heading = " + heading);
boatGroup.setDestination(p.getX(), p.getY(), heading);
boatGroup.setDestination(p2d.getX(), p2d.getY(), heading);
//boatGroup.setDestination(p2d.getX(), p2d.getY());
} }
} }
// if (descending && nextMark.getY() < boatGroup.getLayoutY()) { // if (descending && nextMark.getY() < boatGroup.getLayoutY()) {
// currentRaceMarker[boatIndex]++; // currentRaceMarker[boatIndex]++;
// boatGroup.setDestination( // boatGroup.setDestination(
@@ -281,7 +289,7 @@ public class CanvasController {
for (Boat boat : boats) { for (Boat boat : boats) {
BoatGroup boatGroup = new BoatGroup(boat, Colors.getColor()); BoatGroup boatGroup = new BoatGroup(boat, Colors.getColor());
boatGroup.moveBoatTo(startingX, startingY, 0d); boatGroup.moveBoatTo(startingX, startingY, 0d);
// boatGroup.setDestination(firstMarkX, firstMarkY); boatGroup.setDestination(firstMarkX, firstMarkY);
boatGroup.forceRotation(); boatGroup.forceRotation();
group.getChildren().add(boatGroup); group.getChildren().add(boatGroup);
boatGroups.add(boatGroup); boatGroups.add(boatGroup);
+29 -5
View File
@@ -123,7 +123,29 @@ public class BoatGroup extends Group{
//this.destinationX = newXValue; //this.destinationX = newXValue;
//this.destinationY = newYValue; //this.destinationY = newYValue;
this.rotationalGoal = rotation; this.rotationalGoal = rotation;
this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval; // if (super.getLayoutY() >= newYValue && super.getLayoutX() <= newXValue)
// rotationalGoal = 90 - rotationalGoal;
// else if (super.getLayoutY() < newYValue && super.getLayoutX() <= newXValue)
// rotationalGoal = 90 + rotationalGoal;
// else if (super.getLayoutY() >= newYValue && super.getLayoutX() > newXValue)
// rotationalGoal = 270 + rotationalGoal;
// else
// rotationalGoal = 270 - rotationalGoal;
// if (Math.abs(360 - rotationalGoal + currentRotation) < Math.abs(rotationalGoal - currentRotation)) {
// System.out.println("ROTATE");
// this.rotationalVelocity = (360 - rotationalGoal + currentRotation) / expectedUpdateInterval;
// } else {
// this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval;
// }
if (Math.abs(rotationalGoal - currentRotation) > 180) {
if (rotationalGoal - currentRotation >= 0) {
this.rotationalVelocity = ((rotationalGoal - currentRotation) - 360) / expectedUpdateInterval;
} else {
this.rotationalVelocity = (360 + (rotationalGoal - currentRotation)) / expectedUpdateInterval;
}
} else {
this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval;
}
} }
public void setDestination (double newXValue, double newYValue) { public void setDestination (double newXValue, double newYValue) {
@@ -146,10 +168,12 @@ public class BoatGroup extends Group{
rotationalGoal = 270 + rotationalGoal; rotationalGoal = 270 + rotationalGoal;
else else
rotationalGoal = 270 - rotationalGoal; rotationalGoal = 270 - rotationalGoal;
// TODO: 25/04/2017 cir27 - Verify this logic is correct. Want to produce the shortest path. if (Math.abs(rotationalGoal - currentRotation) > 180) {
if (Math.abs(360 - rotationalGoal + currentRotation) < Math.abs(rotationalGoal - currentRotation)) { if (rotationalGoal - currentRotation >= 0) {
System.out.println("ROTATE"); this.rotationalVelocity = ((rotationalGoal - currentRotation) - 360) / expectedUpdateInterval;
this.rotationalVelocity = (360 - rotationalGoal + currentRotation) / expectedUpdateInterval; } else {
this.rotationalVelocity = (360 + (rotationalGoal - currentRotation)) / expectedUpdateInterval;
}
} else { } else {
this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval; this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval;
} }