- Indicator points towards the next mark. Seems to do some funny stuff when entering a compound mark(gate).

tags : #story[1276]
This commit is contained in:
Alistair McIntyre
2017-09-27 18:50:38 +13:00
parent 452e83c1c3
commit 0e9b818071
2 changed files with 26 additions and 16 deletions
@@ -509,9 +509,22 @@ public class GameView3D {
for (ObservableValue o : Arrays for (ObservableValue o : Arrays
.asList(playerBoat.layoutXProperty(), playerBoat.layoutXProperty())) { .asList(playerBoat.layoutXProperty(), playerBoat.layoutXProperty())) {
o.addListener((obs, oldVal, newVal) -> playerBoat.updateMarkIndicator( o.addListener((obs, oldVal, newVal) -> {
findScaledXY(course.get(playerYacht.getLegNumber()).getMidPoint())
)); List<Mark> marks = course.get(playerYacht.getLegNumber()).getMarks();
Point2D midPoint = new Point2D(0, 0);
if (marks.size() == 1) {
midPoint = findScaledXY(marks.get(0));
} else if (marks.size() == 2) {
midPoint = (findScaledXY(marks.get(0)))
.midpoint(findScaledXY(marks.get(1)));
}
if (midPoint != null) {
playerBoat.updateMarkIndicator(midPoint);
}
});
} }
gameObjects.getChildren().addAll(wakes); gameObjects.getChildren().addAll(wakes);
gameObjects.getChildren().addAll(boatObjectGroup); gameObjects.getChildren().addAll(boatObjectGroup);
@@ -10,9 +10,7 @@ import javafx.geometry.Point3D;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.transform.Rotate; import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Transform; import javafx.scene.transform.Transform;
import javafx.scene.transform.Translate;
/** /**
* BoatGroup is a javafx group that by default contains a graphical objects for representing a 2 * BoatGroup is a javafx group that by default contains a graphical objects for representing a 2
@@ -88,14 +86,13 @@ public class BoatObject extends Group {
public void updateMarkIndicator(Point2D markPoint) { public void updateMarkIndicator(Point2D markPoint) {
// calculate heading between boat and next mark // calculate heading between boat and next mark
Double x = markPoint.getX(); System.out.println(markPoint);
Double y = markPoint.getY(); ;
Point2D boatLoc = new Point2D(this.getLayoutX(), this.getLayoutY());
System.out.println(boatLoc);
Double deltaX = (boatAssets.getAssets().getLayoutX() - x); Double angle = Math.toDegrees(
Double deltaY = (boatAssets.getAssets().getLayoutY() - y); Math.atan2(boatLoc.getY() - markPoint.getY(), boatLoc.getX() - markPoint.getX())) - 90;
Double angle = Math.toDegrees(Math.atan2(deltaY, deltaX));
//Double angle = rotation.getAngle();
ObservableList<Transform> transforms = markIndicator.getTransforms(); ObservableList<Transform> transforms = markIndicator.getTransforms();
@@ -110,10 +107,10 @@ public class BoatObject extends Group {
transforms.clear(); transforms.clear();
transforms.addAll( transforms.addAll(
new Rotate(angle, boatAssets.getAssets().getLayoutX(), new Rotate(angle, new Point3D(0, 0, 1))
boatAssets.getAssets().getLayoutY(), 0), // new Rotate(angle, 0,0, 0)
new Translate(transX, transY, -1), //new Translate(transX, transY, -1),
new Scale(scale, scale, scale) //new Scale(scale, scale, scale)
); );
} }