From 9958e48c574a9ed7ebf49a745f80d077ea32d1da Mon Sep 17 00:00:00 2001 From: Zhi You Tan Date: Thu, 14 Sep 2017 02:27:46 +1200 Subject: [PATCH] [WIP] porting old fps counter to new gameview3D #story[1245] --- .../java/seng302/visualiser/GameView3D.java | 58 +++++++++++++++++++ .../controllers/RaceViewController.java | 6 +- src/main/resources/views/RaceView.fxml | 7 +++ 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/main/java/seng302/visualiser/GameView3D.java b/src/main/java/seng302/visualiser/GameView3D.java index b3ba9e93..da150294 100644 --- a/src/main/java/seng302/visualiser/GameView3D.java +++ b/src/main/java/seng302/visualiser/GameView3D.java @@ -1,6 +1,7 @@ package seng302.visualiser; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -233,6 +234,49 @@ public class GameView3D { scene.addEventHandler(KeyEvent.KEY_PRESSED, this::cameraMovement); } }); + + initializeTimer(); + } + + private void initializeTimer() { + Arrays.fill(frameTimes, 1_000_000_000 / 60); + timer = new AnimationTimer() { + private long lastTime = 0; + private int FPSCount = 30; + private Double frameRate = 60.0; + private int index = 0; + private boolean arrayFilled = false; + private long sum = 1_000_000_000 / 3; + + @Override + public void handle(long now) { + System.out.println(now); + if (lastTime == 0) { + lastTime = now; + } else { + if (now - lastTime >= (1e8 / 60)) { //Fix for framerate going above 60 when minimized + long oldFrameTime = frameTimes[frameTimeIndex]; + frameTimes[frameTimeIndex] = now; + frameTimeIndex = (frameTimeIndex + 1) % frameTimes.length; + if (frameTimeIndex == 0) { + arrayFilled = true; + } + long elapsedNanos; + if (arrayFilled) { + elapsedNanos = now - oldFrameTime; + long elapsedNanosPerFrame = elapsedNanos / frameTimes.length; + frameRate = 1_000_000_000.0 / elapsedNanosPerFrame; + if (FPSCount-- == 0) { + FPSCount = 30; + drawFps(frameRate); + } + } + lastTime = now; + } + } + boatObjects.forEach((boat, boatObject) -> boatObject.updateLocation()); + } + }; } public void updateCourse(List newCourse, List sequence) { @@ -739,4 +783,18 @@ public class GameView3D { public void setWindDir(double windDir) { this.windDir = windDir; } + + public void setFrameRateFXText(Text fpsDisplay) { + this.fpsDisplay = null; + this.fpsDisplay = fpsDisplay; + } + + private void drawFps(Double fps) { + System.out.println(fps); + Platform.runLater(() -> fpsDisplay.setText(String.format("%d FPS", Math.round(fps)))); + } + +// public void setFPSVisibility(boolean visibility) { +// fpsDisplay.setVisible(visibility); +// } } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 0c1f3cc3..478f0d89 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -212,7 +212,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel updateOrder(raceState.getPlayerPositions()); gameView = new GameView3D(); -// gameView.setFrameRateFXText(fpsDisplay); + gameView.setFrameRateFXText(fpsDisplay); Platform.runLater(() -> { contentAnchorPane.getChildren().add(0, gameView.getAssets()); ((SubScene) gameView.getAssets()).widthProperty() @@ -313,11 +313,11 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } } - private void initialiseFPSCheckBox() { +// private void initialiseFPSCheckBox() { // toggleFps.selectedProperty().addListener((obs, oldVal, newVal) -> // gameView.setFPSVisibility(toggleFps.isSelected()) // ); - } +// } private void initialiseAnnotationSlider() { // annotationSlider.setLabelFormatter(new StringConverter() { diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index 159b8e48..717f702e 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -73,6 +73,13 @@ + + + + + + +