From 4f229ad01c72aafff34cc02b5c42bc267aa95285 Mon Sep 17 00:00:00 2001 From: Connor Taylor-Brown Date: Mon, 25 Sep 2017 00:56:21 +1300 Subject: [PATCH] Implemented basic 3D start screen with no background race #story[1301] --- .../Controllers/TitleController.java | 34 +++++++++++++++++++ .../main/java/visualiser/layout/View3D.java | 7 ++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java index 86c124e1..25ae46bd 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java @@ -1,9 +1,12 @@ package visualiser.Controllers; +import com.interactivemesh.jfx.importer.stl.StlMeshImporter; +import javafx.animation.AnimationTimer; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.AmbientLight; +import javafx.scene.PointLight; import javafx.scene.control.Button; import javafx.scene.control.RadioButton; import javafx.scene.image.Image; @@ -14,9 +17,11 @@ import javafx.scene.media.AudioClip; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.paint.Color; +import javafx.scene.shape.MeshView; import javafx.stage.Modality; import mock.exceptions.EventConstructionException; import visualiser.app.App; +import visualiser.layout.SeaSurface; import visualiser.layout.SkyBox; import visualiser.layout.Subject3D; import visualiser.layout.View3D; @@ -49,15 +54,44 @@ public class TitleController extends Controller { ambientLight.setTranslateZ(210); ambientLight.setLightOn(true); + PointLight pointLight = new PointLight(Color.web("#AAAAFF")); + pointLight.setTranslateX(250); + pointLight.setTranslateZ(210); + pointLight.setLightOn(true); + ObservableList subjects = FXCollections.observableArrayList(); View3D view3D = new View3D(); view3D.addAmbientLight(ambientLight); + view3D.addPointLight(pointLight); + view3D.setDistance(10); + view3D.setPitch(5); view3D.setItems(subjects); SkyBox skyBox = new SkyBox(750,200,250,0,250); subjects.addAll(skyBox.getSkyBoxPlanes()); + SeaSurface seaSurface = new SeaSurface(750, 200); + seaSurface.setX(250); + seaSurface.setZ(250); + subjects.add(seaSurface); + + URL asset = RaceViewController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl"); + StlMeshImporter importer = new StlMeshImporter(); + importer.read(asset); + Subject3D boat = new Subject3D(new MeshView(importer.getImport()), 0); + boat.setScale(0.1); + subjects.add(boat); + view3D.trackSubject(boat, -45); + view3DContainer.add(view3D, 0, 0); + + AnimationTimer loop = new AnimationTimer() { + @Override + public void handle(long now) { + boat.setZ(boat.getPosition().getZ() + 0.05); + } + }; + loop.start(); } /** diff --git a/racevisionGame/src/main/java/visualiser/layout/View3D.java b/racevisionGame/src/main/java/visualiser/layout/View3D.java index e9069c5d..ff435ef5 100644 --- a/racevisionGame/src/main/java/visualiser/layout/View3D.java +++ b/racevisionGame/src/main/java/visualiser/layout/View3D.java @@ -169,7 +169,7 @@ public class View3D extends Pane { PickResult result = e.getPickResult(); if(result != null && result.getIntersectedNode() != null && result.getIntersectedNode() instanceof Shape3D) { untrackSubject(); - trackSubject(shapeMap.get(result.getIntersectedNode())); + trackSubject(shapeMap.get(result.getIntersectedNode()), 0); setThirdPerson(); } }); @@ -216,15 +216,16 @@ public class View3D extends Pane { /** * Set camera to follow the selected subject * @param subject to track + * @param yaw to add to boat heading */ - private void trackSubject(Subject3D subject) { + public void trackSubject(Subject3D subject, double yaw) { target.set(subject); this.trackBoat = new AnimationTimer() { @Override public void handle(long now) { updatePivot(target.get().getPosition()); - setYaw(target.get().getHeading().getAngle()); + setYaw(target.get().getHeading().getAngle() + yaw); } }; trackBoat.start();