colorful fps counters

This commit is contained in:
yugecin 2017-01-17 21:06:59 +01:00
parent 580b4142f6
commit 14c8fba9cb
2 changed files with 36 additions and 7 deletions

View File

@ -81,6 +81,9 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
public int mouseX; public int mouseX;
public int mouseY; public int mouseY;
private int targetUpdatesPerSecond;
public int targetUpdateInterval;
private int targetRendersPerSecond;
public int targetRenderInterval; public int targetRenderInterval;
public int targetBackgroundRenderInterval; public int targetBackgroundRenderInterval;
@ -118,13 +121,24 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
}; };
this.nativeDisplayMode = Display.getDisplayMode(); this.nativeDisplayMode = Display.getDisplayMode();
targetRenderInterval = 16; // ~60 fps setUPS(1000);
setFPS(60);
targetBackgroundRenderInterval = 41; // ~24 fps targetBackgroundRenderInterval = 41; // ~24 fps
lastFrame = getTime(); lastFrame = getTime();
delta = 1; delta = 1;
renderDelta = 1; renderDelta = 1;
} }
public void setUPS(int ups) {
targetUpdatesPerSecond = ups;
targetUpdateInterval = 1000 / targetUpdatesPerSecond;
}
public void setFPS(int fps) {
targetRendersPerSecond = fps;
targetRenderInterval = 1000 / targetRendersPerSecond;
}
public void init(Class<? extends OpsuState> startingState) { public void init(Class<? extends OpsuState> startingState) {
state = instanceContainer.provide(startingState); state = instanceContainer.provide(startingState);
state.enter(); state.enter();
@ -177,7 +191,7 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
} }
Display.processMessages(); Display.processMessages();
Display.sync(1000); // TODO add option to change this, to not eat CPUs Display.sync(targetUpdatesPerSecond);
} }
teardown(); teardown();
} }

View File

@ -28,6 +28,10 @@ public class FpsRenderState implements EventListener<ResolutionChangedEvent> {
private final DisplayContainer displayContainer; private final DisplayContainer displayContainer;
private final static Color GREEN = new Color(171, 218, 25);
private final static Color ORANGE = new Color(255, 204, 34);
private final static Color DARKORANGE = new Color(255, 149, 24);
private int x; private int x;
private int y; private int y;
private int singleHeight; private int singleHeight;
@ -39,15 +43,26 @@ public class FpsRenderState implements EventListener<ResolutionChangedEvent> {
public void render(Graphics g) { public void render(Graphics g) {
int x = this.x; int x = this.x;
x = drawText(g, (1000 / displayContainer.renderDelta) + " fps", x, this.y); int target = displayContainer.targetRenderInterval - (displayContainer.targetUpdateInterval % displayContainer.targetRenderInterval);
drawText(g, (1000 / displayContainer.delta) + " ups", x, this.y); x = drawText(g, getColor(target, displayContainer.renderDelta), (1000 / displayContainer.renderDelta) + " fps", x, this.y);
drawText(g, getColor(displayContainer.targetUpdateInterval, displayContainer.delta), (1000 / displayContainer.delta) + " ups", x, this.y);
} }
private int drawText(Graphics g, String text, int x, int y) { private Color getColor(int targetValue, int realValue) {
if (realValue >= targetValue) {
return GREEN;
}
if (realValue >= targetValue * 0.9f) {
return ORANGE;
}
return DARKORANGE;
}
private int drawText(Graphics g, Color color, String text, int x, int y) {
int width = Fonts.SMALL.getWidth(text) + 10; int width = Fonts.SMALL.getWidth(text) + 10;
g.setColor(new Color(0, 0x80, 0)); g.setColor(color);
g.fillRoundRect(x - width, y, width, singleHeight + 6, 2); g.fillRoundRect(x - width, y, width, singleHeight + 6, 2);
Fonts.SMALL.drawString(x - width + 3, y + 3, text, Color.white); Fonts.SMALL.drawString(x - width + 3, y + 3, text, Color.black);
return x - width - 6; return x - width - 6;
} }