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:
@@ -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());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user