Created wrapper for controlling the position and heading of rendered 3D models.

- Updated View3D to use Subject3D wrappers instead of Shape3D
- Fixed HostController for the new architecture
- Made position and heading observable in VisualiserBoat
- Attached listeners to each VisualiserBoat in RaceController

#story[1261]
This commit is contained in:
Connor Taylor-Brown
2017-09-04 01:27:29 +12:00
parent 368bb8ddb3
commit 0ee448e17d
6 changed files with 141 additions and 47 deletions
@@ -11,14 +11,11 @@ import javafx.scene.control.SplitPane;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.shape.Box;
import javafx.scene.shape.Mesh;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.Shape3D;
import javafx.scene.transform.Rotate;
import mock.app.Event;
import mock.exceptions.EventConstructionException;
import visualiser.model.View3D;
import visualiser.layout.Subject3D;
import visualiser.layout.View3D;
import java.io.IOException;
import java.net.Socket;
@@ -64,31 +61,29 @@ public class HostController extends Controller {
@Override
public void initialize(URL location, ResourceBundle resources) {
ObservableList<Shape3D> shapes = FXCollections.observableArrayList();
ObservableList<Subject3D> subjects = FXCollections.observableArrayList();
view3D = new View3D();
view3D.setItems(shapes);
view3D.setItems(subjects);
playerContainer.add(view3D, 0,0);
URL asset = HostController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl");
StlMeshImporter importer = new StlMeshImporter();
importer.read(asset);
MeshView mesh = new MeshView(importer.getImport());
shapes.add(mesh);
Subject3D subject = new Subject3D(new MeshView(importer.getImport()));
view3D.setPivot(mesh);
subjects.add(subject);
view3D.setPivot(subject);
view3D.setDistance(50);
view3D.setYaw(45);
view3D.setPitch(20);
Rotate rotation = new Rotate(0, Rotate.Y_AXIS);
mesh.getTransforms().addAll(rotation, new Rotate(-90, Rotate.X_AXIS));
AnimationTimer rotate = new AnimationTimer() {
@Override
public void handle(long now) {
rotation.setAngle(rotation.getAngle() + 0.1);
subject.setHeading(subject.getHeading() + 0.1);
}
};
rotate.start();
@@ -28,6 +28,7 @@ import visualiser.model.*;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.logging.Level;
@@ -185,6 +186,8 @@ public class RaceController extends Controller {
//Race canvas.
initialiseRaceCanvas(this.visualiserRace);
initialiseView3D(this.visualiserRace);
//Race timezone label.
initialiseRaceTimezoneLabel(this.visualiserRace);
@@ -196,6 +199,14 @@ public class RaceController extends Controller {
raceTimer();
}
private void initialiseView3D(VisualiserRaceEvent race) {
List<VisualiserBoat> boats = race.getVisualiserRaceState().getBoats();
for(VisualiserBoat boat: boats) {
boat.positionProperty().addListener((o, prev, curr) -> {
System.out.println(boat.getCountry() + " is at " + curr.toString());
});
}
}
/**