From 42b98d4379651c74cf12f1b6031519c5c634c7ec Mon Sep 17 00:00:00 2001
From: Peter <pt033@hdm-stuttgart.de>
Date: Thu, 15 Feb 2024 19:55:29 +0100
Subject: [PATCH] fix(game scene): fix animation timer too fast for high fps

---
 .../Controller/GameSceneController.java            | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index f0867a12..b461f4d7 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -85,6 +85,8 @@ public class GameSceneController implements Initializable {
     int diffTileCount = 30;
     int scaledTileSize = 48;
     private final Biom biom = runtimeInfo.getMapBiom();
+    private final long targetFrameTime = 1_000_000_000 / 80; // sets the target frame time to 12.5 ms (80fps)
+    private long lastFrame = 0;
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -142,11 +144,15 @@ public class GameSceneController implements Initializable {
 
         AnimationTimer gameLoop = new AnimationTimer() {
             @Override
-            public void handle(long l) {
+            public void handle(long now) {
                 if (!inputHandler.isPause()) {
-                    graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight());
-                    renderContent(graphicsContext2D);
-                    updateContent();
+                    if (now - lastFrame >= targetFrameTime) { // If short frame time (high fps) it will skip updateContent(). Next Frame has higher frame time and updates the frame
+                        graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight());
+                        renderContent(graphicsContext2D);
+                        updateContent();
+                        lastFrame = now;
+                    }
+//                    remove blur
                     if (wasPaused) {
                         resume();
                     }
-- 
GitLab