fps multiplier and better gameobject lifecycle
parent
51eb964d49
commit
8d3535da55
|
|
@ -29,14 +29,19 @@ public abstract class Game {
|
|||
scene.render();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
scene.update(0);
|
||||
private static final float ns240 = 1_000_000_000f / 240f;
|
||||
protected float dTime = 0;
|
||||
|
||||
public void update() {
|
||||
long nanoTime = System.nanoTime();
|
||||
float elapsed = nanoTime - lastFrame;
|
||||
dTime = elapsed / ns240;
|
||||
lastFrame = nanoTime;
|
||||
|
||||
scene.update(dTime);
|
||||
|
||||
// average framerate
|
||||
averageFPS = lerp(averageFPS, 1_000_000_000f / (nanoTime - lastFrame), (nanoTime - lastFrame) / 1_000_000_000f);
|
||||
lastFrame = nanoTime;
|
||||
averageFPS = lerp(averageFPS, 1_000_000_000f / (elapsed), (elapsed) / 1_000_000_000f);
|
||||
|
||||
framesSinceKeyframe ++;
|
||||
if(nanoTime > lastKeyframe + 1_000_000_000) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import java.util.List;
|
|||
public class GameObject implements IRenderable, ITickable, Serializable {
|
||||
private transient SceneGraph scene;
|
||||
|
||||
private boolean created = false;
|
||||
|
||||
public void link(SceneGraph scene) {
|
||||
this.scene = scene;
|
||||
}
|
||||
|
|
@ -43,7 +45,21 @@ public class GameObject implements IRenderable, ITickable, Serializable {
|
|||
@Override
|
||||
public void update(float dTime) {}
|
||||
|
||||
public void start() {}
|
||||
// connect is solely for ensuring links to other objects. get() and getAll()
|
||||
protected void connect() {}
|
||||
// create is guaranteed to only run once for an object, even after save/load
|
||||
protected void create() {}
|
||||
// start is called any time the object is added to a scene
|
||||
protected void start() {}
|
||||
|
||||
public final void addedToScene() {
|
||||
connect();
|
||||
if(!created) {
|
||||
create();
|
||||
created = true;
|
||||
}
|
||||
start();
|
||||
}
|
||||
|
||||
protected void remove(GameObject obj) {
|
||||
scene.remove(obj);
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ public abstract class SceneGraph implements IScene {
|
|||
}
|
||||
|
||||
for(GameObject obj : objects) {
|
||||
obj.start();
|
||||
obj.addedToScene();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ public abstract class SceneGraph implements IScene {
|
|||
public void add(GameObject obj) {
|
||||
newObjects.add(obj);
|
||||
obj.link(this);
|
||||
obj.start();
|
||||
obj.addedToScene();
|
||||
}
|
||||
|
||||
public void remove(GameObject obj) {
|
||||
|
|
@ -207,7 +207,7 @@ public abstract class SceneGraph implements IScene {
|
|||
objects.addAll(newObjects);
|
||||
|
||||
for(GameObject obj : objects) obj.link(this);
|
||||
for(GameObject obj : objects) obj.start();
|
||||
for(GameObject obj : objects) obj.addedToScene();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,14 +44,15 @@ public class HadeanGame extends Game {
|
|||
|
||||
long allocated = runtime.totalMemory();
|
||||
long max = runtime.maxMemory();
|
||||
int left = 800;
|
||||
int left = 780;
|
||||
int top = 10;
|
||||
|
||||
List<String> strings = new ArrayList<String>();
|
||||
strings.add("DEBUG");
|
||||
strings.add("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED");
|
||||
strings.add("Mouse: <" + App.mouseX + ", " + App.mouseY + ">");
|
||||
strings.add("=== [ DEBUG ] ===");
|
||||
strings.add("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED");
|
||||
strings.add("Mouse: <" + App.mouseX + ", " + App.mouseY + ">");
|
||||
strings.add("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)");
|
||||
strings.add("dTime: " + dTime);
|
||||
|
||||
for(String str : strings) {
|
||||
Assets.flat.pushColor(Vector4f.black);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public abstract class Agent extends WorldObject implements ISelectable {
|
|||
@Override
|
||||
public void start() {
|
||||
super.start();
|
||||
frameCounter = speed;
|
||||
frameCounter = 0;
|
||||
pathfinder = new AStarPathfinder(terrain);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue