mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Refactored Boat class to better fit the MVC model by moving all GUI parts to BoatPolygon. Changed the way animation works so that it will work with a constantly updated set of lats and lons.
TODO - Change Mark class to no longer store XY pixel data. TODO - Add in a timer force updates boat position if a packet has not been recieved for a while. #story30b #story30c #implement #refactor
This commit is contained in:
@@ -5,42 +5,26 @@ import javafx.scene.shape.Polygon;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.scene.transform.Rotate;
|
||||
import javafx.scene.transform.Translate;
|
||||
import javafx.util.Pair;
|
||||
|
||||
/**
|
||||
* Represents a boat in the race.
|
||||
*/
|
||||
public class Boat {
|
||||
|
||||
private static final double TEAMNAME_X_OFFSET = 15d;
|
||||
private static final double TEAMNAME_Y_OFFSET = -20d;
|
||||
private static final double VELOCITY_X_OFFSET = 15d;
|
||||
private static final double VELOCITY_Y_OFFSET = -10d;
|
||||
private static final double VELOCITY_WAKE_RATIO = 2d; //Ratio for deciding how long the wake will be wrt velocity
|
||||
private static final double BOAT_HEIGHT = 15d;
|
||||
private static final double BOAT_WIDTH = 10d;
|
||||
|
||||
private String teamName; // The name of the team, this is also the name of the boat
|
||||
private double velocity; // In meters/second
|
||||
private double lat; // Boats position
|
||||
private double lon; // -
|
||||
private double distanceToNextMark;
|
||||
private Color color;
|
||||
private int markLastPast;
|
||||
private String teamName;
|
||||
private double velocity;
|
||||
private double lat;
|
||||
private double lon;
|
||||
private double heading;
|
||||
private int markLastPast;
|
||||
private String shortName;
|
||||
|
||||
//Graphical
|
||||
private Polygon boatObject;
|
||||
private Polygon wake;
|
||||
private Text teamNameObject;
|
||||
private Text velocityObject;
|
||||
|
||||
public Boat(String teamName) {
|
||||
this.teamName = teamName;
|
||||
this.velocity = 10; // Default velocity
|
||||
this.lat = 0.0;
|
||||
this.lon = 0.0;
|
||||
this.distanceToNextMark = 0.0;
|
||||
this.shortName = "";
|
||||
}
|
||||
|
||||
@@ -54,16 +38,7 @@ public class Boat {
|
||||
public Boat(String teamName, double boatVelocity, String shortName) {
|
||||
this.teamName = teamName;
|
||||
this.velocity = boatVelocity;
|
||||
this.distanceToNextMark = 0.0;
|
||||
this.color = Colors.getColor();
|
||||
this.shortName = shortName;
|
||||
this.boatObject = new Polygon();
|
||||
this.boatObject.getPoints().addAll(BOAT_WIDTH /2,0.0,
|
||||
BOAT_WIDTH, BOAT_HEIGHT,
|
||||
0.0, BOAT_HEIGHT);
|
||||
createWake();
|
||||
this.teamNameObject = new Text(shortName);
|
||||
this.velocityObject = new Text(Double.toString(boatVelocity) + "ms");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,8 +88,9 @@ public class Boat {
|
||||
this.lon = lon;
|
||||
}
|
||||
|
||||
public void setDistanceToNextMark(double distance){
|
||||
this.distanceToNextMark = distance;
|
||||
public Pair<Double, Double> getLocation ()
|
||||
{
|
||||
return new Pair<>(this.lat, this.lon);
|
||||
}
|
||||
|
||||
public double getLatitude(){
|
||||
@@ -125,8 +101,12 @@ public class Boat {
|
||||
return this.lon;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
public void setLatitude (double latitude) {
|
||||
this.lat = latitude;
|
||||
}
|
||||
|
||||
public void setlongitude (double longitude) {
|
||||
this.lon =longitude;
|
||||
}
|
||||
|
||||
public double getSpeedInKnots(){
|
||||
@@ -141,92 +121,16 @@ public class Boat {
|
||||
return markLastPast;
|
||||
}
|
||||
|
||||
public void setHeading(double heading){
|
||||
boatObject.getTransforms().clear();
|
||||
wake.getTransforms().clear();
|
||||
wake.getTransforms().add(new Translate(0, BOAT_HEIGHT));
|
||||
wake.getTransforms().add(new Rotate(heading, BOAT_WIDTH/2, -BOAT_HEIGHT));
|
||||
boatObject.getTransforms().add(new Rotate(heading, BOAT_WIDTH/2, 0));
|
||||
this.heading = heading;
|
||||
}
|
||||
|
||||
public double getHeading(){
|
||||
return this.heading;
|
||||
}
|
||||
|
||||
public void setHeading(double heading) {
|
||||
this.heading = heading;
|
||||
}
|
||||
|
||||
public String getShortName(){
|
||||
return this.shortName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Moves the boat and its children annotations from its current coordinates by specified amounts.
|
||||
* @param x The amount to move the X coordinate by
|
||||
* @param y The amount to move the Y coordinate by
|
||||
*/
|
||||
void moveBoatBy(Double x, Double y) {
|
||||
boatObject.setLayoutX(boatObject.getLayoutX() + x);
|
||||
boatObject.setLayoutY(boatObject.getLayoutY() + y);
|
||||
boatObject.relocate(boatObject.getLayoutX(), boatObject.getLayoutY());
|
||||
|
||||
teamNameObject.setX(teamNameObject.getX() + x);
|
||||
teamNameObject.setY(teamNameObject.getY() + y);
|
||||
teamNameObject.relocate(teamNameObject.getX(), teamNameObject.getY());
|
||||
|
||||
velocityObject.setX(velocityObject.getX() + x);
|
||||
velocityObject.setY(velocityObject.getY() + y);
|
||||
velocityObject.relocate(velocityObject.getX(), velocityObject.getY());
|
||||
|
||||
|
||||
wake.setLayoutX(wake.getLayoutX() + x);
|
||||
wake.setLayoutY(wake.getLayoutY() + y);
|
||||
wake.relocate(wake.getLayoutX(), wake.getLayoutY());
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the boat and its children annotations to coordinates specified
|
||||
* @param x The X coordinate to move the boat to
|
||||
* @param y The Y coordinate to move the boat to
|
||||
*/
|
||||
public void moveBoatTo(Double x, Double y) {
|
||||
boatObject.setLayoutX(x);
|
||||
boatObject.setLayoutY(y);
|
||||
boatObject.relocate(boatObject.getLayoutX(), boatObject.getLayoutY());
|
||||
|
||||
teamNameObject.setX(x + TEAMNAME_X_OFFSET);
|
||||
teamNameObject.setY(y + TEAMNAME_Y_OFFSET);
|
||||
teamNameObject.relocate(teamNameObject.getX(), teamNameObject.getY());
|
||||
|
||||
velocityObject.setX(x + VELOCITY_X_OFFSET);
|
||||
velocityObject.setY(y + VELOCITY_Y_OFFSET);
|
||||
velocityObject.relocate(velocityObject.getX(), velocityObject.getY());
|
||||
|
||||
wake.setLayoutX(x);
|
||||
wake.setLayoutY(y);
|
||||
wake.relocate(wake.getLayoutX(), wake.getLayoutY());
|
||||
}
|
||||
|
||||
private void createWake(){
|
||||
wake = new Polygon();
|
||||
wake.setFill(Color.LIGHTSKYBLUE);
|
||||
wake.getPoints().addAll(5.0,0.0,
|
||||
10.0, velocity * VELOCITY_WAKE_RATIO,
|
||||
0.0, velocity * VELOCITY_WAKE_RATIO);
|
||||
}
|
||||
|
||||
public Polygon getWake() {
|
||||
return wake;
|
||||
}
|
||||
|
||||
public Polygon getBoatObject() {
|
||||
return boatObject;
|
||||
}
|
||||
|
||||
public Text getTeamNameObject() {
|
||||
return teamNameObject;
|
||||
}
|
||||
|
||||
public Text getVelocityObject() {
|
||||
return velocityObject;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user