split up onUpdate() methods into onUpdateGameState and onUpdateFrame

this will help avoid needing to place a lot of update logic that is
tied to the frame rate (e.g. anything not related to physics
integration) in onRender()
This commit is contained in:
Gered 2013-12-30 14:31:26 -05:00
parent 8d9457b872
commit bf659f7bc2
9 changed files with 58 additions and 39 deletions

View file

@ -1,5 +1,6 @@
package ca.blarg.gdx; package ca.blarg.gdx;
import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.graphics.*; import ca.blarg.gdx.graphics.*;
import ca.blarg.gdx.states.StateManager; import ca.blarg.gdx.states.StateManager;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
@ -7,8 +8,6 @@ import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.TimeUtils;
import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.states.StateManager;
public abstract class GameApp implements Disposable { public abstract class GameApp implements Disposable {
public final EventManager eventManager; public final EventManager eventManager;
@ -71,10 +70,9 @@ public abstract class GameApp implements Disposable {
viewportContext.onPostRender(); viewportContext.onPostRender();
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
viewportContext.onUpdate(delta);
eventManager.onUpdate(delta); eventManager.onUpdate(delta);
stateManager.onUpdate(delta); stateManager.onUpdateGameState(delta);
if (stateManager.isEmpty()) { if (stateManager.isEmpty()) {
Gdx.app.debug("GameApp", "No states running. Quitting."); Gdx.app.debug("GameApp", "No states running. Quitting.");
Gdx.app.exit(); Gdx.app.exit();
@ -90,6 +88,11 @@ public abstract class GameApp implements Disposable {
} }
} }
public void onUpdateFrame(float delta) {
viewportContext.onUpdateFrame(delta);
stateManager.onUpdateFrame(delta);
}
public void onPause() { public void onPause() {
Gdx.app.debug("GameApp", "onPause"); Gdx.app.debug("GameApp", "onPause");
stateManager.onAppPause(); stateManager.onAppPause();

View file

@ -61,12 +61,13 @@ public class GdxGameAppListener implements ApplicationListener, GameLooper {
accumulator += frameTime; accumulator += frameTime;
while (accumulator >= updateDelta) { while (accumulator >= updateDelta) {
gameApp.onUpdate(updateDelta); gameApp.onUpdateGameState(updateDelta);
accumulator -= updateDelta; accumulator -= updateDelta;
} }
renderDelta = accumulator / updateDelta; renderDelta = accumulator / updateDelta;
gameApp.onUpdateFrame(frameTime);
gameApp.onRender(renderDelta); gameApp.onRender(renderDelta);
} }

View file

@ -1,10 +1,9 @@
package ca.blarg.gdx.entities; package ca.blarg.gdx.entities;
import ca.blarg.gdx.events.EventHandler;
import com.badlogic.gdx.utils.Disposable;
import ca.blarg.gdx.events.Event; import ca.blarg.gdx.events.Event;
import ca.blarg.gdx.events.EventHandler; import ca.blarg.gdx.events.EventHandler;
import ca.blarg.gdx.events.EventManager; import ca.blarg.gdx.events.EventManager;
import com.badlogic.gdx.utils.Disposable;
public abstract class ComponentSystem extends EventHandler implements Disposable { public abstract class ComponentSystem extends EventHandler implements Disposable {
public final EntityManager entityManager; public final EntityManager entityManager;
@ -29,7 +28,10 @@ public abstract class ComponentSystem extends EventHandler implements Disposable
public void onRender(float delta) { public void onRender(float delta) {
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
}
public void onUpdateFrame(float delta) {
} }
@Override @Override

View file

@ -1,13 +1,10 @@
package ca.blarg.gdx.entities; package ca.blarg.gdx.entities;
import ca.blarg.gdx.ReflectionUtils;
import ca.blarg.gdx.entities.systemcomponents.EntityPresetComponent;
import ca.blarg.gdx.entities.systemcomponents.InactiveComponent;
import com.badlogic.gdx.utils.*;
import ca.blarg.gdx.ReflectionUtils; import ca.blarg.gdx.ReflectionUtils;
import ca.blarg.gdx.entities.systemcomponents.EntityPresetComponent; import ca.blarg.gdx.entities.systemcomponents.EntityPresetComponent;
import ca.blarg.gdx.entities.systemcomponents.InactiveComponent; import ca.blarg.gdx.entities.systemcomponents.InactiveComponent;
import ca.blarg.gdx.events.EventManager; import ca.blarg.gdx.events.EventManager;
import com.badlogic.gdx.utils.*;
public class EntityManager implements Disposable { public class EntityManager implements Disposable {
public final EventManager eventManager; public final EventManager eventManager;
@ -315,12 +312,17 @@ public class EntityManager implements Disposable {
componentSystems.get(i).onRender(delta); componentSystems.get(i).onRender(delta);
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
for (Entity i : getAllWith(InactiveComponent.class)) for (Entity i : getAllWith(InactiveComponent.class))
remove(i); remove(i);
for (int i = 0; i < componentSystems.size; ++i) for (int i = 0; i < componentSystems.size; ++i)
componentSystems.get(i).onUpdate(delta); componentSystems.get(i).onUpdateGameState(delta);
}
public void onUpdateFrame(float delta) {
for (int i = 0; i < componentSystems.size; ++i)
componentSystems.get(i).onUpdateFrame(delta);
} }
/*** private Entity/Component management ***/ /*** private Entity/Component management ***/

View file

@ -5,7 +5,6 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.Camera;
import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.PerspectiveCamera; import com.badlogic.gdx.graphics.PerspectiveCamera;
import ca.blarg.gdx.math.MathHelpers;
/** /**
* Manages graphics state relating to the viewport dimensions and camera(s). * Manages graphics state relating to the viewport dimensions and camera(s).
@ -60,7 +59,7 @@ public class ViewportContext {
} }
public void onUpdate(float delta) { public void onUpdateFrame(float delta) {
perspectiveCamera.update(); perspectiveCamera.update();
orthographicCamera.update(); orthographicCamera.update();
} }

View file

@ -1,14 +1,11 @@
package ca.blarg.gdx.processes; package ca.blarg.gdx.processes;
import ca.blarg.gdx.GameApp;
import ca.blarg.gdx.events.EventHandler;
import ca.blarg.gdx.states.GameState;
import com.badlogic.gdx.utils.Disposable;
import ca.blarg.gdx.GameApp; import ca.blarg.gdx.GameApp;
import ca.blarg.gdx.events.Event; import ca.blarg.gdx.events.Event;
import ca.blarg.gdx.events.EventHandler; import ca.blarg.gdx.events.EventHandler;
import ca.blarg.gdx.events.EventManager; import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.states.GameState; import ca.blarg.gdx.states.GameState;
import com.badlogic.gdx.utils.Disposable;
public abstract class GameProcess extends EventHandler implements Disposable { public abstract class GameProcess extends EventHandler implements Disposable {
public final ProcessManager processManager; public final ProcessManager processManager;
@ -60,7 +57,10 @@ public abstract class GameProcess extends EventHandler implements Disposable {
public void onRender(float delta) { public void onRender(float delta) {
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
}
public void onUpdateFrame(float delta) {
} }
public boolean onTransition(float delta, boolean isTransitioningOut, boolean started) { public boolean onTransition(float delta, boolean isTransitioningOut, boolean started) {

View file

@ -6,10 +6,6 @@ import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.states.GameState; import ca.blarg.gdx.states.GameState;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
import ca.blarg.gdx.ReflectionUtils;
import ca.blarg.gdx.Strings;
import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.states.GameState;
import java.util.LinkedList; import java.util.LinkedList;
@ -200,7 +196,7 @@ public class ProcessManager implements Disposable {
} }
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
cleanupInactiveProcesses(); cleanupInactiveProcesses();
checkForFinishedProcesses(); checkForFinishedProcesses();
processQueue(); processQueue();
@ -209,7 +205,15 @@ public class ProcessManager implements Disposable {
for (int i = 0; i < processes.size(); ++i) { for (int i = 0; i < processes.size(); ++i) {
ProcessInfo processInfo = processes.get(i); ProcessInfo processInfo = processes.get(i);
if (!processInfo.isInactive) if (!processInfo.isInactive)
processInfo.process.onUpdate(delta); processInfo.process.onUpdateGameState(delta);
}
}
public void onUpdateFrame(float delta) {
for (int i = 0; i < processes.size(); ++i) {
ProcessInfo processInfo = processes.get(i);
if (!processInfo.isInactive)
processInfo.process.onUpdateFrame(delta);
} }
} }

View file

@ -1,15 +1,12 @@
package ca.blarg.gdx.states; package ca.blarg.gdx.states;
import ca.blarg.gdx.GameApp;
import ca.blarg.gdx.events.EventHandler;
import ca.blarg.gdx.graphics.screeneffects.ScreenEffectManager;
import com.badlogic.gdx.utils.Disposable;
import ca.blarg.gdx.GameApp; import ca.blarg.gdx.GameApp;
import ca.blarg.gdx.events.Event; import ca.blarg.gdx.events.Event;
import ca.blarg.gdx.events.EventHandler; import ca.blarg.gdx.events.EventHandler;
import ca.blarg.gdx.events.EventManager; import ca.blarg.gdx.events.EventManager;
import ca.blarg.gdx.graphics.screeneffects.ScreenEffectManager; import ca.blarg.gdx.graphics.screeneffects.ScreenEffectManager;
import ca.blarg.gdx.processes.ProcessManager; import ca.blarg.gdx.processes.ProcessManager;
import com.badlogic.gdx.utils.Disposable;
public abstract class GameState extends EventHandler implements Disposable { public abstract class GameState extends EventHandler implements Disposable {
public final StateManager stateManager; public final StateManager stateManager;
@ -90,9 +87,13 @@ public abstract class GameState extends EventHandler implements Disposable {
processManager.onRender(delta); processManager.onRender(delta);
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
processManager.onUpdateGameState(delta);
}
public void onUpdateFrame(float delta) {
effectManager.onUpdate(delta); effectManager.onUpdate(delta);
processManager.onUpdate(delta); processManager.onUpdateFrame(delta);
} }
public boolean onTransition(float delta, boolean isTransitioningOut, boolean started) { public boolean onTransition(float delta, boolean isTransitioningOut, boolean started) {

View file

@ -1,12 +1,11 @@
package ca.blarg.gdx.states; package ca.blarg.gdx.states;
import ca.blarg.gdx.ReflectionUtils;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Disposable;
import ca.blarg.gdx.GameApp; import ca.blarg.gdx.GameApp;
import ca.blarg.gdx.ReflectionUtils; import ca.blarg.gdx.ReflectionUtils;
import ca.blarg.gdx.Strings; import ca.blarg.gdx.Strings;
import ca.blarg.gdx.events.EventManager; import ca.blarg.gdx.events.EventManager;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Disposable;
import java.util.LinkedList; import java.util.LinkedList;
@ -264,7 +263,7 @@ public class StateManager implements Disposable {
} }
} }
public void onUpdate(float delta) { public void onUpdateGameState(float delta) {
lastCleanedStatesWereAllOverlays = false; lastCleanedStatesWereAllOverlays = false;
cleanupInactiveStates(); cleanupInactiveStates();
@ -276,7 +275,15 @@ public class StateManager implements Disposable {
for (int i = getTopNonOverlayIndex(); i != -1 && i < states.size(); ++i) { for (int i = getTopNonOverlayIndex(); i != -1 && i < states.size(); ++i) {
StateInfo stateInfo = states.get(i); StateInfo stateInfo = states.get(i);
if (!stateInfo.isInactive) if (!stateInfo.isInactive)
stateInfo.state.onUpdate(delta); stateInfo.state.onUpdateGameState(delta);
}
}
public void onUpdateFrame(float delta) {
for (int i = getTopNonOverlayIndex(); i != -1 && i < states.size(); ++i) {
StateInfo stateInfo = states.get(i);
if (!stateInfo.isInactive)
stateInfo.state.onUpdateFrame(delta);
} }
} }