mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Fixed horizontal and vertical resizing not to draw larger than scene.
#story[1248]
This commit is contained in:
@@ -20,6 +20,7 @@ import javafx.scene.Node;
|
|||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
import javafx.scene.input.KeyEvent;
|
import javafx.scene.input.KeyEvent;
|
||||||
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.paint.Paint;
|
import javafx.scene.paint.Paint;
|
||||||
@@ -42,6 +43,8 @@ import seng302.visualiser.fxObjects.CourseBoundary;
|
|||||||
import seng302.visualiser.fxObjects.Gate;
|
import seng302.visualiser.fxObjects.Gate;
|
||||||
import seng302.visualiser.fxObjects.MarkArrowFactory;
|
import seng302.visualiser.fxObjects.MarkArrowFactory;
|
||||||
import seng302.visualiser.fxObjects.Marker;
|
import seng302.visualiser.fxObjects.Marker;
|
||||||
|
import seng302.visualiser.map.Boundary;
|
||||||
|
import seng302.visualiser.map.CanvasMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by cir27 on 20/07/17.
|
* Created by cir27 on 20/07/17.
|
||||||
@@ -49,6 +52,8 @@ import seng302.visualiser.fxObjects.Marker;
|
|||||||
public class GameView extends Pane {
|
public class GameView extends Pane {
|
||||||
|
|
||||||
private double bufferSize = 50;
|
private double bufferSize = 50;
|
||||||
|
private double panelWidth = 1280;
|
||||||
|
private double panelHeight = 960;
|
||||||
private double canvasWidth = 1100;
|
private double canvasWidth = 1100;
|
||||||
private double canvasHeight = 920;
|
private double canvasHeight = 920;
|
||||||
private boolean horizontalInversion = false;
|
private boolean horizontalInversion = false;
|
||||||
@@ -102,7 +107,7 @@ public class GameView extends Pane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void zoomIn() {
|
private void zoomIn() {
|
||||||
scaleFactor = 0.10;
|
scaleFactor = 0.1;
|
||||||
if (this.getScaleX() < 2.5) {
|
if (this.getScaleX() < 2.5) {
|
||||||
this.setScaleX(this.getScaleX() + scaleFactor);
|
this.setScaleX(this.getScaleX() + scaleFactor);
|
||||||
this.setScaleY(this.getScaleY() + scaleFactor);
|
this.setScaleY(this.getScaleY() + scaleFactor);
|
||||||
@@ -137,35 +142,20 @@ public class GameView extends Pane {
|
|||||||
gameObjects.add(markers);
|
gameObjects.add(markers);
|
||||||
initializeTimer();
|
initializeTimer();
|
||||||
|
|
||||||
// DEBUG USE
|
|
||||||
gameObjects.add(new Circle(0, 0, 10, Color.RED));
|
|
||||||
gameObjects.add(new Circle(0, 960, 10, Color.RED));
|
|
||||||
gameObjects.add(new Circle(1280, 960, 10, Color.RED));
|
|
||||||
gameObjects.add(new Circle(1280, 0, 10, Color.RED));
|
|
||||||
// --------
|
|
||||||
|
|
||||||
double RATIO = getWidth() / getHeight();
|
|
||||||
|
|
||||||
this.widthProperty().addListener(new ChangeListener<Number>() {
|
this.widthProperty().addListener(new ChangeListener<Number>() {
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
|
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
|
||||||
Number newValue) {
|
Number newValue) {
|
||||||
scaleFactor = getWidth() / getHeight() > RATIO
|
scaleFactor = getWidth() / panelWidth;
|
||||||
? getHeight() / canvasHeight
|
|
||||||
: getWidth() / canvasWidth;
|
|
||||||
|
|
||||||
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
|
if (panelHeight * scaleFactor < getHeight()) {
|
||||||
getTransforms().remove(0, getTransforms().size());
|
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
|
||||||
getTransforms().add(scale);
|
getTransforms().remove(0, getTransforms().size());
|
||||||
|
getTransforms().add(scale);
|
||||||
|
|
||||||
setPrefWidth(getWidth() / scaleFactor);
|
setPrefWidth(getWidth() / scaleFactor);
|
||||||
setPrefHeight(getHeight() / scaleFactor);
|
setPrefHeight(getHeight() / scaleFactor);
|
||||||
|
}
|
||||||
System.out.println("Width: " + newValue);
|
|
||||||
System.out.println("Scale X: " + getScaleX());
|
|
||||||
System.out.println("Transition X: " + getTranslateX());
|
|
||||||
System.out.println("Get Height: " + getScene().getHeight());
|
|
||||||
System.out.println("Get Width: " + getScene().getWidth());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -173,22 +163,16 @@ public class GameView extends Pane {
|
|||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
|
public void changed(ObservableValue<? extends Number> observable, Number oldValue,
|
||||||
Number newValue) {
|
Number newValue) {
|
||||||
scaleFactor = getWidth() / getHeight() > RATIO
|
scaleFactor = getHeight() / panelHeight;
|
||||||
? getWidth() / canvasWidth
|
|
||||||
: getHeight() / canvasHeight;
|
|
||||||
|
|
||||||
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
|
if (panelWidth * scaleFactor < getWidth()) {
|
||||||
getTransforms().remove(0, getTransforms().size());
|
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
|
||||||
getTransforms().add(scale);
|
getTransforms().remove(0, getTransforms().size());
|
||||||
|
getTransforms().add(scale);
|
||||||
|
|
||||||
setPrefWidth(getWidth() / scaleFactor);
|
setPrefWidth(getWidth() / scaleFactor);
|
||||||
setPrefHeight(getHeight() / scaleFactor);
|
setPrefHeight(getHeight() / scaleFactor);
|
||||||
|
}
|
||||||
System.out.println("Height: " + newValue);
|
|
||||||
System.out.println("Scale Y: " + getScaleY());
|
|
||||||
System.out.println("Transition Y: " + getTranslateY());
|
|
||||||
System.out.println("Get Height: " + getScene().getHeight());
|
|
||||||
System.out.println("Get Width: " + getScene().getWidth());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -234,6 +218,43 @@ public class GameView extends Pane {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First find the top right and bottom left points' geo locations, then retrieve map from google
|
||||||
|
* to display on image view. - Haoming 22/5/2017
|
||||||
|
*/
|
||||||
|
private void drawGoogleMap() {
|
||||||
|
findMetersPerPixel();
|
||||||
|
Point2D topLeftPoint = findScaledXY(maxLatPoint.getLat(), minLonPoint.getLng());
|
||||||
|
// distance from top left extreme to panel origin (top left corner)
|
||||||
|
double distanceFromTopLeftToOrigin = Math.sqrt(
|
||||||
|
Math.pow(topLeftPoint.getX() * metersPerPixelX, 2) + Math
|
||||||
|
.pow(topLeftPoint.getY() * metersPerPixelY, 2));
|
||||||
|
// angle from top left extreme to panel origin
|
||||||
|
double bearingFromTopLeftToOrigin = Math
|
||||||
|
.toDegrees(Math.atan2(-topLeftPoint.getX(), topLeftPoint.getY()));
|
||||||
|
// the top left extreme
|
||||||
|
GeoPoint topLeftPos = new GeoPoint(maxLatPoint.getLat(), minLonPoint.getLng());
|
||||||
|
GeoPoint originPos = GeoUtility
|
||||||
|
.getGeoCoordinate(topLeftPos, bearingFromTopLeftToOrigin, distanceFromTopLeftToOrigin);
|
||||||
|
|
||||||
|
// distance from origin corner to bottom right corner of the panel
|
||||||
|
double distanceFromOriginToBottomRight = Math.sqrt(
|
||||||
|
Math.pow(panelHeight * metersPerPixelY, 2) + Math
|
||||||
|
.pow(panelWidth * metersPerPixelX, 2));
|
||||||
|
double bearingFromOriginToBottomRight = Math
|
||||||
|
.toDegrees(Math.atan2(panelWidth, -panelHeight));
|
||||||
|
GeoPoint bottomRightPos = GeoUtility
|
||||||
|
.getGeoCoordinate(originPos, bearingFromOriginToBottomRight,
|
||||||
|
distanceFromOriginToBottomRight);
|
||||||
|
|
||||||
|
Boundary boundary = new Boundary(originPos.getLat(), bottomRightPos.getLng(),
|
||||||
|
bottomRightPos.getLat(), originPos.getLng());
|
||||||
|
CanvasMap canvasMap = new CanvasMap(boundary);
|
||||||
|
mapImage.setImage(canvasMap.getMapImage());
|
||||||
|
mapImage.fitWidthProperty().bind(((AnchorPane) this.getParent()).heightProperty());
|
||||||
|
mapImage.fitHeightProperty().bind(((AnchorPane) this.getParent()).heightProperty());
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: 16/08/17 Break up this function
|
// TODO: 16/08/17 Break up this function
|
||||||
/**
|
/**
|
||||||
* Adds a course to the GameView. The view is scaled accordingly unless a border is set in which
|
* Adds a course to the GameView. The view is scaled accordingly unless a border is set in which
|
||||||
@@ -474,6 +495,7 @@ public class GameView extends Pane {
|
|||||||
findMinMaxPoint(limitingCoordinates);
|
findMinMaxPoint(limitingCoordinates);
|
||||||
double minLonToMaxLon = scaleRaceExtremities();
|
double minLonToMaxLon = scaleRaceExtremities();
|
||||||
calculateReferencePointLocation(minLonToMaxLon);
|
calculateReferencePointLocation(minLonToMaxLon);
|
||||||
|
// drawGoogleMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSelectedBoat(BoatObject bo, Boolean isSelected) {
|
private void setSelectedBoat(BoatObject bo, Boolean isSelected) {
|
||||||
|
|||||||
Reference in New Issue
Block a user