feat(ui): Implemented "Save and Exit" in Escape

This commit is contained in:
Jakub Žitník 2025-04-02 20:53:54 +02:00
parent 4dd785fdfc
commit aa6a47fff9
Signed by: jzitnik
GPG Key ID: C577A802A6AF4EF3
4 changed files with 39 additions and 9 deletions

View File

@ -56,6 +56,7 @@ public class InputHandlerThread extends Thread {
.toList().getFirst().getData()).click(game, mouseEvent, terminal,
screenRenderer);
case ESC -> game.getGameStates().dependencies.escape.mouse(mouseEvent, terminal, screenRenderer);
case SAVE_EXIT -> {}
}
}
}
@ -93,10 +94,6 @@ public class InputHandlerThread extends Thread {
game.getGameStates().dependencies.escape.reset();
}
screenRenderer.render(game);
// System.out.println("Exiting game...");
// isRunning[0] = false;
// game.getGameStates().dependencies.gameSaver.save(game);
// System.exit(0);
}
default -> {
}

View File

@ -24,7 +24,27 @@ public class Escape {
this.game = game;
}
public void render(StringBuilder buffer, Terminal terminal, Game game) {
public void renderSave(StringBuilder buffer, Terminal terminal) {
var font = game.getGameStates().dependencies.font;
var savingText = font.line(terminal, "Saving", Size.LARGE, Align.CENTER);
int top = (terminal.getHeight() - savingText.getHeight()) / 2;
buffer.append("\n".repeat(top));
buffer.append(savingText.getData());
}
public void renderSaved(StringBuilder buffer, Terminal terminal) {
var font = game.getGameStates().dependencies.font;
var savingText = font.line(terminal, "Saved", Size.LARGE, Align.CENTER);
int top = (terminal.getHeight() - savingText.getHeight()) / 2;
buffer.append("\n".repeat(top));
buffer.append(savingText.getData());
}
public void render(StringBuilder buffer, Terminal terminal) {
var font = game.getGameStates().dependencies.font;
var width = terminal.getWidth();
var height = terminal.getHeight();
@ -65,6 +85,7 @@ public class Escape {
boolean changed = false;
if (buttonx > 0 && buttonx <= btnWidth) {
// Continue
if (buttony > 0 && buttony < buttonHeight) {
if (type == MouseEvent.Type.Pressed) {
game.setWindow(Window.WORLD);
@ -81,6 +102,7 @@ public class Escape {
changed = true;
}
// Options
if (buttony > buttonHeight + margin && buttony < 2 * buttonHeight + margin) {
if (type == MouseEvent.Type.Pressed) {
return;
@ -95,9 +117,19 @@ public class Escape {
changed = true;
}
// Save and exit
if (buttony > 2 * (buttonHeight + margin) && buttony < buttonHeight + 2 * (buttonHeight + margin)) {
if (type == MouseEvent.Type.Pressed) {
return;
game.setWindow(Window.SAVE_EXIT);
screenRenderer.render(game);
// Save game
game.getGameStates().dependencies.gameSaver.save(game);
game.setWindow(Window.SAVED);
screenRenderer.render(game);
System.exit(0);
}
if (buttonsHover[2] == false) {
@ -108,7 +140,6 @@ public class Escape {
buttonsHover[2] = false;
changed = true;
}
}
if (changed) {

View File

@ -1,5 +1,5 @@
package cz.jzitnik.game.ui;
public enum Window {
WORLD, INVENTORY, CRAFTING_TABLE, CHEST, FURNACE, ESC
WORLD, INVENTORY, CRAFTING_TABLE, CHEST, FURNACE, ESC, SAVE_EXIT, SAVED
}

View File

@ -80,7 +80,9 @@ public class ScreenRenderer {
case FURNACE -> ((Furnace) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX]
.stream().filter(i -> i.getBlockId().equals("furnace")).toList().getFirst().getData()).render(game,
main, terminal, spriteList);
case ESC -> game.getGameStates().dependencies.escape.render(main, terminal, game);
case ESC -> game.getGameStates().dependencies.escape.render(main, terminal);
case SAVE_EXIT -> game.getGameStates().dependencies.escape.renderSave(main, terminal);
case SAVED -> game.getGameStates().dependencies.escape.renderSaved(main, terminal);
case WORLD -> {
// World