perf: Significantly improved rendering performance
This commit is contained in:
@ -116,11 +116,11 @@ public class Game {
|
||||
world[cords[1]][cords[0]].remove(player.getPlayerBlock2());
|
||||
world[cords[1] - 1][cords[0] + 1].add(player.getPlayerBlock1());
|
||||
world[cords[1] - 1][cords[0]].remove(player.getPlayerBlock1());
|
||||
screenRenderer.render(this);
|
||||
new Thread(() -> screenRenderer.render(this)).start();
|
||||
|
||||
stats.setBlocksTraveled(stats.getBlocksTraveled() + 1);
|
||||
|
||||
entitySpawnProvider.update(this, terminal);
|
||||
new Thread(() -> entitySpawnProvider.update(this, terminal)).start();
|
||||
|
||||
playMovePlayerSound(cords[0] + 1, cords[1]);
|
||||
|
||||
@ -147,11 +147,11 @@ public class Game {
|
||||
world[cords[1]][cords[0]].remove(player.getPlayerBlock2());
|
||||
world[cords[1] - 1][cords[0] - 1].add(player.getPlayerBlock1());
|
||||
world[cords[1] - 1][cords[0]].remove(player.getPlayerBlock1());
|
||||
screenRenderer.render(this);
|
||||
new Thread(() -> screenRenderer.render(this)).start();
|
||||
|
||||
stats.setBlocksTraveled(stats.getBlocksTraveled() + 1);
|
||||
|
||||
entitySpawnProvider.update(this, terminal);
|
||||
new Thread(() -> entitySpawnProvider.update(this, terminal)).start();
|
||||
|
||||
playMovePlayerSound(cords[0] - 1, cords[1]);
|
||||
|
||||
|
@ -12,6 +12,6 @@ public class SimpleSprite extends Sprite {
|
||||
}
|
||||
|
||||
public String getSprite(Enum key) {
|
||||
throw new RuntimeException("Imposible state");
|
||||
throw new RuntimeException("Impossible state");
|
||||
}
|
||||
}
|
||||
|
@ -8,9 +8,11 @@ import cz.jzitnik.tui.MouseHandler;
|
||||
import cz.jzitnik.tui.ScreenRenderer;
|
||||
import org.jline.terminal.MouseEvent;
|
||||
import org.jline.terminal.Terminal;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.BufferUnderflowException;
|
||||
import java.util.Optional;
|
||||
|
||||
import cz.jzitnik.game.annotations.ThreadRegistry;
|
||||
|
||||
/**
|
||||
@ -69,13 +71,11 @@ public class InputHandlerThread extends Thread {
|
||||
screenRenderer);
|
||||
case ESC -> game.getGameStates().dependencies.escape.mouse(mouseEvent, terminal,
|
||||
screenRenderer);
|
||||
case SAVE_EXIT -> {
|
||||
}
|
||||
case OPTIONS -> game.getGameStates().dependencies.options.handleMouse(mouseEvent,
|
||||
terminal, screenRenderer);
|
||||
case DEATH_SCREEN -> game.getGameStates().dependencies.deathScreen
|
||||
.handleMouse(mouseEvent, terminal, screenRenderer, game);
|
||||
case SAVED -> {
|
||||
case SAVE_EXIT, SAVED -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -86,11 +86,9 @@ public class InputHandlerThread extends Thread {
|
||||
case '1', '2', '3', '4', '5', '6', '7', '8', '9' -> game.changeSlot(key - 49, screenRenderer);
|
||||
case 'a' -> {
|
||||
game.movePlayerLeft(screenRenderer, terminal);
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case 'd' -> {
|
||||
game.movePlayerRight(screenRenderer, terminal);
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case ' ' -> {
|
||||
game.movePlayerUp(screenRenderer);
|
||||
|
@ -189,6 +189,6 @@ public class MouseHandler {
|
||||
screenRenderer.setSelectedBlock(Optional.empty());
|
||||
}
|
||||
|
||||
screenRenderer.render(game);
|
||||
new Thread(() -> screenRenderer.render(game)).start();
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import java.util.Optional;
|
||||
public class ScreenRenderer {
|
||||
private final SpriteList spriteList;
|
||||
private final Terminal terminal;
|
||||
private boolean rendering = false;
|
||||
|
||||
/**
|
||||
* Constructs a {@code ScreenRenderer} with the given sprite list and terminal.
|
||||
@ -98,6 +99,10 @@ public class ScreenRenderer {
|
||||
* @param game Current game state to render.
|
||||
*/
|
||||
public synchronized void render(Game game) {
|
||||
if (rendering) {
|
||||
return;
|
||||
}
|
||||
rendering = true;
|
||||
log.debug("Rendering frame");
|
||||
var world = game.getWorld();
|
||||
StringBuilder main = new StringBuilder();
|
||||
@ -216,6 +221,7 @@ public class ScreenRenderer {
|
||||
|
||||
log.debug("Frame rendered");
|
||||
System.out.println(main);
|
||||
rendering = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user