From 95bafdc0d1945fb95af8a20843f319e39f6631ff Mon Sep 17 00:00:00 2001 From: Calum Date: Wed, 26 Apr 2017 19:19:03 +1200 Subject: [PATCH] Fixed bug which caused boats to all travel to the same position. --- .../seng302/controllers/CanvasController.java | 18 +++++++--- src/main/java/seng302/models/BoatGroup.java | 34 ++++++++++++++++--- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 117a88fc..4e0aea4b 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -166,20 +166,28 @@ public class CanvasController { //descending = nextMark.getY() > boatGroup.getLayoutY(); //leftToRight = nextMark.getX() < boatGroup.getLayoutX(); - boatGroup.updatePosition(1000 / 6); + boatGroup.updatePosition(1000 / 60); Point3D p = StreamParser.boatPositions.get((long)boatGroup.getBoat().getId()); //System.out.println("boatGroup = " + boatGroup.getBoat().getId()); //System.out.println("StreamParser.boatPositions.toString() = " + StreamParser.boatPositions.toString()); if (p != null) { Point2D p2d = latLonToXY(p.getX(), p.getY()); - System.out.println("p2d = " + p2d); + //System.out.println("p2d = " + p2d); if (!boatGroup.getBoat().isSamePos(p2d)) { //System.out.println("p.toString() = " + p.toString()); double heading = 360.0 / 0xffff * p.getZ(); - System.out.println("heading = " + heading); - boatGroup.setDestination(p.getX(), p.getY(), heading); + //System.out.println("heading = " + heading); + + + + boatGroup.setDestination(p2d.getX(), p2d.getY(), heading); + + + + //boatGroup.setDestination(p2d.getX(), p2d.getY()); } } + // if (descending && nextMark.getY() < boatGroup.getLayoutY()) { // currentRaceMarker[boatIndex]++; // boatGroup.setDestination( @@ -281,7 +289,7 @@ public class CanvasController { for (Boat boat : boats) { BoatGroup boatGroup = new BoatGroup(boat, Colors.getColor()); boatGroup.moveBoatTo(startingX, startingY, 0d); -// boatGroup.setDestination(firstMarkX, firstMarkY); + boatGroup.setDestination(firstMarkX, firstMarkY); boatGroup.forceRotation(); group.getChildren().add(boatGroup); boatGroups.add(boatGroup); diff --git a/src/main/java/seng302/models/BoatGroup.java b/src/main/java/seng302/models/BoatGroup.java index 82912d08..1292e7e0 100644 --- a/src/main/java/seng302/models/BoatGroup.java +++ b/src/main/java/seng302/models/BoatGroup.java @@ -123,7 +123,29 @@ public class BoatGroup extends Group{ //this.destinationX = newXValue; //this.destinationY = newYValue; 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) { @@ -146,10 +168,12 @@ public class BoatGroup extends Group{ rotationalGoal = 270 + rotationalGoal; else rotationalGoal = 270 - rotationalGoal; - // TODO: 25/04/2017 cir27 - Verify this logic is correct. Want to produce the shortest path. - if (Math.abs(360 - rotationalGoal + currentRotation) < Math.abs(rotationalGoal - currentRotation)) { - System.out.println("ROTATE"); - this.rotationalVelocity = (360 - 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; }