Recovered stable rotation of the player's boat

- Uses AnimationTimer rather than listeners
- Reduced pre-start time to speed up testing

#story[1261]
This commit is contained in:
cbt24
2017-09-05 15:19:04 +12:00
parent c74cc26bf1
commit 3ecf203cba
4 changed files with 45 additions and 35 deletions
@@ -16,9 +16,13 @@ import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.Sphere;
import javafx.util.Callback;
import network.Messages.Enums.RaceStatusEnum;
import shared.exceptions.BoatNotFoundException;
import shared.exceptions.MarkNotFoundException;
import shared.model.Leg;
import shared.model.Mark;
import visualiser.app.App;
import visualiser.gameController.ControllerClient;
import visualiser.gameController.Keys.ControlKey;
@@ -93,7 +97,6 @@ public class RaceController extends Controller {
@Override
public void initialize(URL location, ResourceBundle resources) {
// KeyFactory keyFactory = KeyFactory.getFactory();
infoTableShow = true;
// Initialise keyboard handler
@@ -172,37 +175,37 @@ public class RaceController extends Controller {
}
private void initialiseView3D(VisualiserRaceEvent race) {
ObservableList<Subject3D> subjects = FXCollections.observableArrayList();
view3D = new View3D();
view3D.setItems(subjects);
canvasBase.getChildren().add(0, view3D);
URL asset = HostController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl");
StlMeshImporter importer = new StlMeshImporter();
importer.read(asset);
Subject3D subject = new Subject3D(new MeshView(importer.getImport()));
List<VisualiserBoat> boats = race.getVisualiserRaceState().getBoats();
viewSubjects = FXCollections.observableArrayList();
subjects.add(subject);
//Create View3D
view3D = new View3D();
view3D.setItems(viewSubjects);
for(VisualiserBoat boat: boats) {
System.out.println("Adding " + boat.getCountry());
Subject3D subject = new Subject3D(new MeshView(importer.getImport()));
viewSubjects.add(subject);
view3D.setPivot(subject); // Filthy hack makes last added boat the pivot
boat.positionProperty().addListener((o, prev, curr) -> {
System.out.println(boat.getCountry() + " is at " + curr.toString());
});
boat.bearingProperty().addListener((o, prev, curr) -> {
subject.setHeading(curr.degrees());
});
}
// Display View3D
view3D.setVisible(true);
view3D.setPivot(subject);
view3D.setDistance(50);
view3D.setYaw(45);
view3D.setPitch(20);
canvasBase.getChildren().add(0, view3D);
try {
VisualiserBoat boat = race.getVisualiserRaceState().getBoat(race.getVisualiserRaceState().getPlayerBoatID());
AnimationTimer rotate = new AnimationTimer() {
@Override
public void handle(long now) {
subject.setHeading(boat.getBearing().degrees());
}
};
rotate.start();
} catch(BoatNotFoundException e) {
e.printStackTrace();
}
}