From 5121b193b9836cefbc6be511497d92aea9ffba3e Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Fri, 14 May 2021 14:29:28 +1200 Subject: [PATCH] Successfully implmented physics system --- .../ac/massey/programming_project_159333_s1_2021/App.java | 4 +++- .../FrameRateSystem.java | 4 ++-- .../LogVec2DSystem.java | 2 +- .../programming_project_159333_s1_2021/SystemManager.java | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/App.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/App.java index 9fc537e..990eb17 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/App.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/App.java @@ -61,6 +61,7 @@ public final class App { double dt = 0.0; double frameRate = 1.0 / 20; // 1 second divided by target number of frames + double idleTime = 0.0; // the amount of time spent sleeping boolean quit = false; long loopStart = System.currentTimeMillis(); @@ -68,13 +69,14 @@ public final class App { // Get the time between frames for accurate time-based calculations (i.e. physics systems etc) long startTime = System.nanoTime(); - frameRateSystem.update(dt); + frameRateSystem.update(dt, idleTime); physicsSystem.update(dt); logVec2DSystem.update(dt); dt = (System.nanoTime() - startTime) / 1e9; // convert nanoseconds to seconds // Limit frame rate (approximately) to minimum of 16 ms if (dt < frameRate){ + idleTime = frameRate-dt; Thread.sleep((int)((frameRate-dt)*1000)); dt = (System.nanoTime() - startTime) / 1e9; } diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/FrameRateSystem.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/FrameRateSystem.java index 900f5fe..5ceac97 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/FrameRateSystem.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/FrameRateSystem.java @@ -3,7 +3,7 @@ package nz.ac.massey.programming_project_159333_s1_2021; public class FrameRateSystem extends ECSSystem{ void init() {} - void update(double dt){ - System.out.print("dt: " + dt + " "); + void update(double dt, double idleTime){ + System.out.print(String.format("dt: %.3g (%.3g idle) ", dt, idleTime)); } } diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/LogVec2DSystem.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/LogVec2DSystem.java index 1c0a47a..d953a00 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/LogVec2DSystem.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/LogVec2DSystem.java @@ -11,7 +11,7 @@ public class LogVec2DSystem extends ECSSystem{ void update(double dt){ for (Integer entity : entities) { Vec2D pos = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class.getName()); - System.out.println("X: " + pos.x + ", Y:" + pos.y); + System.out.println(String.format("X: %.6g, Y: %.6g", pos.x, pos.y)); } } } diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/SystemManager.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/SystemManager.java index db2603c..187cf26 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/SystemManager.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/SystemManager.java @@ -26,13 +26,13 @@ class SystemManager{ // instance. // I.e., create an object that represents the system class; then store that class in the system // table. - public boolean registerSystem(String system, ECSSystem action){ - if (systems.containsKey(system)){ + public boolean registerSystem(String systemName, ECSSystem system){ + if (systems.containsKey(systemName)){ System.err.println("System already registered"); return false; } - systems.put(system, action); - signatures.put(system, new BitSet()); + systems.put(systemName, system); + signatures.put(systemName, new BitSet()); return true; }