From c4fe116267d53dfaea558763fb33a71c0cfcf71a Mon Sep 17 00:00:00 2001 From: Calum Date: Mon, 15 May 2017 15:17:54 +1200 Subject: [PATCH] MarkGroups refactored to be independent of BoatGroups as their functionality has diverged. #issue[10] #refactor --- .../seng302/controllers/CanvasController.java | 81 ++++++--- .../controllers/RaceViewController.java | 20 +-- src/main/java/seng302/models/BoatGroup.java | 36 +++- src/main/java/seng302/models/RaceObject.java | 87 ---------- .../java/seng302/models/mark/MarkGroup.java | 159 +++--------------- 5 files changed, 110 insertions(+), 273 deletions(-) delete mode 100644 src/main/java/seng302/models/RaceObject.java diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 53582740..a2e00a23 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -17,6 +17,7 @@ import seng302.models.stream.packets.BoatPositionPacket; import seng302.models.stream.XMLParser; import seng302.models.stream.XMLParser.RaceXMLObject.Limit; import seng302.models.mark.Mark; +import seng302.server.simulator.Boat; import java.text.DecimalFormat; import java.util.*; @@ -53,7 +54,8 @@ public class CanvasController { private Mark maxLonPoint; private double referencePointX; private double referencePointY; - private List raceObjects = new ArrayList<>(); + private List markGroups = new ArrayList<>(); + private List boatGroups = new ArrayList<>(); private List raceMarks = new ArrayList<>(); //FRAME RATE @@ -172,21 +174,26 @@ public class CanvasController { gc.fillPolygon(xBoundaryPoints,yBoundaryPoints,yBoundaryPoints.length); } - private void updateRaceObjects(){ - for (RaceObject raceObject : raceObjects) { - raceObject.updatePosition(1000 / 60); + private void updateGroups(){ + for (BoatGroup boatGroup : boatGroups) { + boatGroup.updatePosition(1000 / 60); // some raceObjects will have multiply ID's (for instance gate marks) - for (long id : raceObject.getRaceIds()) { //checking if the current "ID" has any updates associated with it + if (StreamParser.boatPositions.containsKey(boatGroup.getRaceId())) { + moveBoatGroup(boatGroup); + } + } + for (MarkGroup markGroup : markGroups) { + for (int id : markGroup.getRaceIds()) { if (StreamParser.boatPositions.containsKey(id)) { - move(id, raceObject); + moveMarkGroup(id, markGroup); } } } } - private void move(long id, RaceObject raceObject){ - PriorityBlockingQueue movementQueue = StreamParser.boatPositions.get(id); + private void moveBoatGroup(BoatGroup boatGroup) { + PriorityBlockingQueue movementQueue = StreamParser.boatPositions.get(boatGroup.getRaceId()); if (movementQueue.size() > 0){ // BoatPositionPacket positionPacket = movementQueue.peek(); // @@ -202,9 +209,9 @@ public class CanvasController { // if (timeDiff > delayTime) { try { BoatPositionPacket positionPacket = movementQueue.take(); - Point2D p2d = latLonToXY(positionPacket.getLat(), positionPacket.getLon()); + Point2D p2d = findScaledXY(positionPacket.getLat(), positionPacket.getLon()); double heading = 360.0 / 0xffff * positionPacket.getHeading(); - raceObject.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), (int) id); + boatGroup.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), boatGroup.getRaceId()); } catch (InterruptedException e){ e.printStackTrace(); } @@ -212,6 +219,31 @@ public class CanvasController { } } + void moveMarkGroup (int raceId, MarkGroup markGroup) { + PriorityBlockingQueue movementQueue = StreamParser.boatPositions.get(raceId); + if (movementQueue.size() > 0){ +// BoatPositionPacket positionPacket = movementQueue.peek(); +// +// //this code adds a delay to reading from the movementQueue +// //in case things being put into the movement queue are slightly +// //out of order +// int delayTime = 1000; +// int loopTime = delayTime * 10; +// long timeDiff = (System.currentTimeMillis()%loopTime - positionPacket.getTimeValid()%loopTime); +// if (timeDiff < 0){ +// timeDiff = loopTime + timeDiff; +// } +// if (timeDiff > delayTime) { + try { + BoatPositionPacket positionPacket = movementQueue.take(); + Point2D p2d = findScaledXY(positionPacket.getLat(), positionPacket.getLon()); + markGroup.moveMarkTo(p2d.getX(), p2d.getY(), raceId); + } catch (InterruptedException e){ + e.printStackTrace(); + } + } + } + class ResizableCanvas extends Canvas { ResizableCanvas() { @@ -277,11 +309,11 @@ public class CanvasController { BoatGroup boatGroup = new BoatGroup(boat, boat.getColour()); // boatGroup.moveTo(startingX, startingY, 0d); //boatGroup.setStage(raceViewController.getStage()); - raceObjects.add(boatGroup); + boatGroups.add(boatGroup); boatAnnotations.getChildren().add(boatGroup.getLowPriorityAnnotations()); } group.getChildren().add(boatAnnotations); - group.getChildren().addAll(raceObjects); + group.getChildren().addAll(boatGroups); } /** @@ -393,35 +425,35 @@ public class CanvasController { private void givePointsXY() { List allPoints = StreamParser.getXmlObject().getRaceXML().getCompoundMarks(); List processed = new ArrayList<>(); - RaceObject markGroup; + MarkGroup markGroup; for (XMLParser.RaceXMLObject.CompoundMark mark : allPoints) { if (!processed.contains(mark)) { if (mark.getMarkType() != MarkType.SINGLE_MARK) { markGroup = new MarkGroup(mark, findScaledXY(mark.getMarks().get(0)), findScaledXY(mark.getMarks().get(1))); - raceObjects.add(markGroup); + markGroups.add(markGroup); } else { markGroup = new MarkGroup(mark, findScaledXY(mark.getMarks().get(0))); - raceObjects.add(markGroup); + markGroups.add(markGroup); } processed.add(mark); } } + group.getChildren().addAll(boatGroups); } private Point2D findScaledXY (Mark unscaled) { - return findScaledXY (minLatPoint.getLatitude(), minLatPoint.getLongitude(), - unscaled.getLatitude(), unscaled.getLongitude()); + return findScaledXY (unscaled.getLatitude(), unscaled.getLongitude()); } - private Point2D findScaledXY (double latA, double lonA, double latB, double lonB) { + private Point2D findScaledXY (double unscaledLat, double unscaledLon) { double distanceFromReference; double angleFromReference; int xAxisLocation = (int) referencePointX; int yAxisLocation = (int) referencePointY; - angleFromReference = Mark.calculateHeadingRad(latA, lonA, latB, lonB); - distanceFromReference = Mark.calculateDistance(latA, lonA, latB, lonB); + angleFromReference = Mark.calculateHeadingRad(minLatPoint.getLatitude(), minLatPoint.getLongitude(), unscaledLat, unscaledLon); + distanceFromReference = Mark.calculateDistance(minLatPoint.getLatitude(), minLatPoint.getLongitude(), unscaledLat, unscaledLon); if (angleFromReference >= 0 && angleFromReference <= Math.PI / 2) { xAxisLocation += (int) Math.round(distanceScaleFactor * Math.sin(angleFromReference) * distanceFromReference); yAxisLocation -= (int) Math.round(distanceScaleFactor * Math.cos(angleFromReference) * distanceFromReference); @@ -441,12 +473,7 @@ public class CanvasController { return new Point2D(xAxisLocation, yAxisLocation); } - - private Point2D latLonToXY (double latitude, double longitude) { - return findScaledXY(minLatPoint.getLatitude(), minLatPoint.getLongitude(), latitude, longitude); - } - - List getRaceObjects() { - return raceObjects; + List getBoatGroups() { + return boatGroups; } } \ No newline at end of file diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index a1bb9651..4ff0327d 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -201,47 +201,35 @@ public class RaceViewController extends Thread{ private void setAnnotations(Integer annotationLevel) { switch (annotationLevel) { case 0: - for (RaceObject ro : includedCanvasController.getRaceObjects()) { - if(ro instanceof BoatGroup) { - BoatGroup bg = (BoatGroup) ro; + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { bg.setTeamNameObjectVisible(false); bg.setVelocityObjectVisible(false); bg.setLineGroupVisible(false); bg.setWakeVisible(false); - } } break; case 1: - for (RaceObject ro : includedCanvasController.getRaceObjects()) { - if(ro instanceof BoatGroup) { - BoatGroup bg = (BoatGroup) ro; + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { bg.setTeamNameObjectVisible(true); bg.setVelocityObjectVisible(false); bg.setLineGroupVisible(false); bg.setWakeVisible(false); - } } break; case 2: - for (RaceObject ro : includedCanvasController.getRaceObjects()) { - if(ro instanceof BoatGroup) { - BoatGroup bg = (BoatGroup) ro; + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { bg.setTeamNameObjectVisible(true); bg.setVelocityObjectVisible(false); bg.setLineGroupVisible(true); bg.setWakeVisible(false); - } } break; case 3: - for (RaceObject ro : includedCanvasController.getRaceObjects()) { - if(ro instanceof BoatGroup) { - BoatGroup bg = (BoatGroup) ro; + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { bg.setTeamNameObjectVisible(true); bg.setVelocityObjectVisible(true); bg.setLineGroupVisible(true); bg.setWakeVisible(true); - } } break; } diff --git a/src/main/java/seng302/models/BoatGroup.java b/src/main/java/seng302/models/BoatGroup.java index 57dd48db..54cb5e8c 100644 --- a/src/main/java/seng302/models/BoatGroup.java +++ b/src/main/java/seng302/models/BoatGroup.java @@ -19,7 +19,7 @@ import java.util.List; * UpdatePosition is called unless the window is minimized in which case it attempts to store animations and apply them * when the window is maximised. */ -public class BoatGroup extends RaceObject{ +public class BoatGroup extends Group{ //Constants for drawing private static final double TEAMNAME_X_OFFSET = 10d; @@ -32,6 +32,12 @@ public class BoatGroup extends RaceObject{ private Point2D lastPoint; private int wakeGenerationDelay = 10; private double distanceTravelled; + private double pixelVelocityX; + private double pixelVelocityY; + private double currentRotation; + private double rotationalGoal; + private double rotationalVelocity; + private static final int expectedUpdateInterval = 200; //Graphical objects private Yacht boat; private Group lineGroup = new Group(); @@ -194,7 +200,7 @@ public class BoatGroup extends RaceObject{ * @param rotation Rotation to move graphics to. * @param raceIds RaceID of the object to move. */ - public void setDestination (double newXValue, double newYValue, double rotation, double groundSpeed, int... raceIds) { + public void setDestination (double newXValue, double newYValue, double rotation, double groundSpeed, int raceIds) { if (hasRaceId(raceIds)) { if (setToInitialLocation) { destinationSet = true; @@ -254,7 +260,7 @@ public class BoatGroup extends RaceObject{ } } - public void setDestination (double newXValue, double newYValue, double groundSpeed, int... raceIDs) { + public void setDestination (double newXValue, double newYValue, double groundSpeed, int raceIDs) { destinationSet = true; if (hasRaceId(raceIDs)) { @@ -318,8 +324,8 @@ public class BoatGroup extends RaceObject{ * * @return An array containing all ID's associated with this RaceObject. */ - public int[] getRaceIds () { - return new int[] {boat.getSourceID()}; + public int getRaceId() { + return boat.getSourceID(); } /** @@ -355,4 +361,24 @@ public class BoatGroup extends RaceObject{ } }); } + + /** + * Calculates the rotational velocity required to reach the rotationalGoal from the currentRotation. + */ + protected void calculateRotationalVelocity () { + 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; + } + //Sometimes the rotation is too large to be realistic. In that case just do it instantly. + if (Math.abs(rotationalVelocity) > 1) { + rotationalVelocity = 0; + rotateTo(rotationalGoal); + } + } } diff --git a/src/main/java/seng302/models/RaceObject.java b/src/main/java/seng302/models/RaceObject.java deleted file mode 100644 index 91f02971..00000000 --- a/src/main/java/seng302/models/RaceObject.java +++ /dev/null @@ -1,87 +0,0 @@ -package seng302.models; - -import javafx.geometry.Point2D; -import javafx.scene.Group; - -/** - * RaceObject defines the behaviour that animated objects whose position is updated from a yacht race data stream must - * adhere to. - */ -public abstract class RaceObject extends Group { - - //Time between sections of race - protected static double expectedUpdateInterval = 200; - - protected double rotationalGoal; - protected double currentRotation; - protected double rotationalVelocity; - protected double pixelVelocityX; - protected double pixelVelocityY; - - public Point2D getPosition () { - return new Point2D(super.getLayoutX(), getLayoutY()); - } - - public static double getExpectedUpdateInterval() { - return expectedUpdateInterval; - } - - /** - * - */ - public static void setExpectedUpdateInterval(double expectedUpdateInterval) { - RaceObject.expectedUpdateInterval = expectedUpdateInterval; - } - - /** - * Calculates the rotational velocity required to reach the rotationalGoal from the currentRotation. - */ - protected void calculateRotationalVelocity () { - 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; - } - //Sometimes the rotation is too large to be realistic. In that case just do it instantly. - if (Math.abs(rotationalVelocity) > 1) { - rotationalVelocity = 0; - rotateTo(rotationalGoal); - } - } - - /** - * Sets the destination of everything within the RaceObject that has an ID in the array raceIds. The destination is - * set to the co-ordinates (x, y) with the given rotation. - * @param x X co-ordinate to move the graphics to. - * @param y Y co-ordinate to move the graphics to. - * @param rotation Rotation to move graphics to. - * @param raceIds RaceID of the object to move. - */ - public abstract void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds); - /** - * Sets the destination of everything within the RaceObject that has an ID in the array raceIds. The destination is - * set to the co-ordinates (x, y). - * @param x X co-ordinate to move the graphic to. - * @param y Y co-ordinate to move the graphic to. - * @param raceIds RaceID to the object to move. - */ - public abstract void setDestination (double x, double y, double groundSpeed, int... raceIds); - - public abstract void updatePosition (long timeInterval); - - public abstract void moveTo (double x, double y, double rotation); - - public abstract void moveTo (double x, double y); - - public abstract void moveGroupBy(double x, double y, double rotation); - - public abstract void rotateTo (double rotation); - - public abstract boolean hasRaceId (int... raceIds); - - public abstract int[] getRaceIds (); -} diff --git a/src/main/java/seng302/models/mark/MarkGroup.java b/src/main/java/seng302/models/mark/MarkGroup.java index 78a97d58..22fe05d8 100644 --- a/src/main/java/seng302/models/mark/MarkGroup.java +++ b/src/main/java/seng302/models/mark/MarkGroup.java @@ -1,12 +1,11 @@ package seng302.models.mark; import javafx.geometry.Point2D; -import javafx.scene.Node; +import javafx.scene.Group; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.transform.Rotate; -import seng302.models.RaceObject; import java.util.ArrayList; import java.util.List; @@ -14,7 +13,7 @@ import java.util.List; /** * Created by CJIRWIN on 26/04/2017. */ -public class MarkGroup extends RaceObject { +public class MarkGroup extends Group { private static int MARK_RADIUS = 5; private static int LINE_THICKNESS = 2; @@ -23,14 +22,8 @@ public class MarkGroup extends RaceObject { private List marks = new ArrayList<>(); private Mark mainMark; - private double[] nodePixelVelocitiesX; - private double[] nodePixelVelocitiesY; - private Point2D[] nodeDestinations; public MarkGroup (Mark mark, Point2D... points) { - nodePixelVelocitiesX = new double[points.length]; - nodePixelVelocitiesY = new double[points.length]; - nodeDestinations = new Point2D[points.length]; marks.add(mark); mainMark = mark; Color color = Color.BLACK; @@ -47,25 +40,14 @@ public class MarkGroup extends RaceObject { MARK_RADIUS, color ); - nodeDestinations = new Point2D[]{ - new Point2D(markCircle.getCenterX(), markCircle.getCenterY() - ) - }; super.getChildren().add(markCircle); } else { -// marks.add(((GateMark) mark).getSingleMark1()); -// marks.add(((GateMark) mark).getSingleMark2()); - nodePixelVelocitiesX = new double[]{0d,0d}; - nodePixelVelocitiesY = new double[]{0d,0d}; - nodeDestinations = new Point2D[2]; - markCircle = new Circle( points[0].getX(), points[0].getY(), MARK_RADIUS, color ); - nodeDestinations[0] = new Point2D(markCircle.getCenterX(), markCircle.getCenterY()); super.getChildren().add(markCircle); markCircle = new Circle( @@ -74,7 +56,6 @@ public class MarkGroup extends RaceObject { MARK_RADIUS, color ); - nodeDestinations[1] = new Point2D(markCircle.getCenterX(), markCircle.getCenterY()); super.getChildren().add(markCircle); Line line = new Line( points[0].getX(), @@ -91,117 +72,27 @@ public class MarkGroup extends RaceObject { } } - public void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds) { - setDestination(x, y, 0, raceIds); - this.rotationalGoal = rotation; - calculateRotationalVelocity(); - } - - public void setDestination (double x, double y, double groundSpeed, int... raceIds) { - for (int i = 0; i < marks.size(); i++) - for (int id : raceIds) - if (id == marks.get(i).getId()) - setDestinationChild(x, y, 0, Math.max(0, i-1)); - } - - - private void setDestinationChild (double x, double y, double speed, int childIndex) { - //double relativeX = x - super.getLayoutX(); - //double relativeY = y - super.getLayoutY(); - Circle markCircle = (Circle) super.getChildren().get(childIndex); - this.nodeDestinations[childIndex] = new Point2D(x, y); - //if (Math.abs(relativeX - markCircle.getCenterX()) > 30 && Math.abs(relativeY - markCircle.getCenterY()) > 30) { - this.nodePixelVelocitiesX[childIndex] = (x - markCircle.getCenterX()) / expectedUpdateInterval; - this.nodePixelVelocitiesY[childIndex] = (y - markCircle.getCenterY()) / expectedUpdateInterval; - //} - } - - public void rotateTo (double rotation) { - if (mainMark.getMarkType() != MarkType.SINGLE_MARK) { - Line line = (Line) super.getChildren().get(2); - double xCenter = Math.abs(line.getEndX() - line.getStartX()); - double yCenter = Math.abs(line.getEndY() - line.getStartY()); - super.getTransforms().setAll(new Rotate(rotation, xCenter, yCenter)); - } - } - - public void updatePosition (long timeInterval) { - Circle markCircle = (Circle) super.getChildren().get(0); - - if (nodePixelVelocitiesX[0] > 0 && markCircle.getCenterX() > nodeDestinations[0].getX() || - nodePixelVelocitiesX[0] < 0 && markCircle.getCenterX() < nodeDestinations[0].getY()) - nodePixelVelocitiesX[0] = 0; - else if (nodePixelVelocitiesX[0] != 0) - markCircle.setCenterX(markCircle.getCenterX() + nodePixelVelocitiesX[0] * timeInterval); - - if (nodePixelVelocitiesY[0] > 0 && markCircle.getCenterY() > nodeDestinations[0].getY() || - nodePixelVelocitiesY[0] < 0 && markCircle.getCenterY() < nodeDestinations[0].getY()) - nodePixelVelocitiesY[0] = 0; - else if (nodePixelVelocitiesY[0] != 0) - markCircle.setCenterY(markCircle.getCenterY() + nodePixelVelocitiesY[0] * timeInterval); - - if (mainMark.getMarkType() != MarkType.SINGLE_MARK) { - - Line line = (Line) super.getChildren().get(2); - line.setStartX(markCircle.getCenterX()); - line.setStartY(markCircle.getCenterY()); - - markCircle = (Circle) super.getChildren().get(1); - - if (nodePixelVelocitiesX[1] > 0 && markCircle.getCenterX() >= nodeDestinations[1].getX() || - nodePixelVelocitiesX[1] < 0 && markCircle.getCenterX() <= nodeDestinations[1].getX()) - nodePixelVelocitiesX[1] = 0; - else if (nodePixelVelocitiesX[1] != 0) - markCircle.setCenterX(markCircle.getCenterX() + nodePixelVelocitiesX[1] * timeInterval); - - if (nodePixelVelocitiesY[1] > 0 && markCircle.getCenterY() > nodeDestinations[1].getY() || - nodePixelVelocitiesY[1] < 0 && markCircle.getCenterY() < nodeDestinations[1].getY()) - nodePixelVelocitiesY[1] = 0; - else if (nodePixelVelocitiesY[1] != 0) - markCircle.setCenterY(markCircle.getCenterY() + nodePixelVelocitiesY[1] * timeInterval); - line.setEndX(markCircle.getCenterX()); - line.setEndY(markCircle.getCenterY()); - } - } - - public void moveGroupBy (double x, double y, double rotation) { - 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); - mark.setCenterY(mark.getCenterY() + y); - mark.setCenterX(mark.getCenterX() + x); - } - line.setStartX(line.getStartX() + x); - line.setStartY(line.getStartY() + y); - line.setEndX(line.getEndX() + x); - line.setEndY(line.getEndY() + y); - } else { - Circle mark = (Circle) super.getChildren().get(0); - mark.setCenterY(mark.getCenterY() + y); - mark.setCenterX(mark.getCenterX() + x); - } - rotateTo(currentRotation + rotation); - } - - public void moveTo (double x, double y, double rotation) { - moveTo(x, y); - rotateTo(rotation); - } - - public void moveTo (double x, double y) { - Circle markCircle = (Circle) super.getChildren().get(0); - markCircle.setCenterX(x); - markCircle.setCenterY(y); - if (mainMark.getMarkType() != MarkType.SINGLE_MARK) { - markCircle = (Circle) super.getChildren().get(1); + public void moveMarkTo (double x, double y, int raceId) + { + if (mainMark.getMarkType() == MarkType.SINGLE_MARK) { + Circle markCircle = (Circle) super.getChildren().get(0); markCircle.setCenterX(x); markCircle.setCenterY(y); - Line line = (Line) super.getChildren().get(2); - line.setStartX(x); - line.setStartY(y); - line.setEndX(x); - line.setEndY(y); + } else { + Circle markCircle1 = (Circle) super.getChildren().get(0); + Circle markCircle2 = (Circle) super.getChildren().get(1); + Line connectingLine = (Line) super.getChildren().get(2); + if (marks.get(1).getId() == raceId) { + markCircle1.setCenterX(x); + markCircle1.setCenterY(y); + connectingLine.setStartX(markCircle1.getCenterX()); + connectingLine.setStartY(markCircle1.getCenterY()); + } else if (marks.get(2).getId() == raceId) { + markCircle2.setCenterX(x); + markCircle2.setCenterY(y); + connectingLine.setEndX(markCircle2.getCenterX()); + connectingLine.setEndY(markCircle2.getCenterY()); + } } } @@ -213,14 +104,6 @@ public class MarkGroup extends RaceObject { return false; } - public static int getMarkRadius() { - return MARK_RADIUS; - } - - public static void setMarkRadius(int markRadius) { - MARK_RADIUS = markRadius; - } - public int[] getRaceIds () { int[] idArray = new int[marks.size()]; int i = 0;