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, .toList().getFirst().getData()).click(game, mouseEvent, terminal,
screenRenderer); screenRenderer);
case ESC -> game.getGameStates().dependencies.escape.mouse(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(); game.getGameStates().dependencies.escape.reset();
} }
screenRenderer.render(game); screenRenderer.render(game);
// System.out.println("Exiting game...");
// isRunning[0] = false;
// game.getGameStates().dependencies.gameSaver.save(game);
// System.exit(0);
} }
default -> { default -> {
} }

View File

@ -24,7 +24,27 @@ public class Escape {
this.game = game; 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 font = game.getGameStates().dependencies.font;
var width = terminal.getWidth(); var width = terminal.getWidth();
var height = terminal.getHeight(); var height = terminal.getHeight();
@ -65,6 +85,7 @@ public class Escape {
boolean changed = false; boolean changed = false;
if (buttonx > 0 && buttonx <= btnWidth) { if (buttonx > 0 && buttonx <= btnWidth) {
// Continue
if (buttony > 0 && buttony < buttonHeight) { if (buttony > 0 && buttony < buttonHeight) {
if (type == MouseEvent.Type.Pressed) { if (type == MouseEvent.Type.Pressed) {
game.setWindow(Window.WORLD); game.setWindow(Window.WORLD);
@ -81,6 +102,7 @@ public class Escape {
changed = true; changed = true;
} }
// Options
if (buttony > buttonHeight + margin && buttony < 2 * buttonHeight + margin) { if (buttony > buttonHeight + margin && buttony < 2 * buttonHeight + margin) {
if (type == MouseEvent.Type.Pressed) { if (type == MouseEvent.Type.Pressed) {
return; return;
@ -95,9 +117,19 @@ public class Escape {
changed = true; changed = true;
} }
// Save and exit
if (buttony > 2 * (buttonHeight + margin) && buttony < buttonHeight + 2 * (buttonHeight + margin)) { if (buttony > 2 * (buttonHeight + margin) && buttony < buttonHeight + 2 * (buttonHeight + margin)) {
if (type == MouseEvent.Type.Pressed) { 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) { if (buttonsHover[2] == false) {
@ -108,7 +140,6 @@ public class Escape {
buttonsHover[2] = false; buttonsHover[2] = false;
changed = true; changed = true;
} }
} }
if (changed) { if (changed) {

View File

@ -1,5 +1,5 @@
package cz.jzitnik.game.ui; package cz.jzitnik.game.ui;
public enum Window { 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] case FURNACE -> ((Furnace) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX]
.stream().filter(i -> i.getBlockId().equals("furnace")).toList().getFirst().getData()).render(game, .stream().filter(i -> i.getBlockId().equals("furnace")).toList().getFirst().getData()).render(game,
main, terminal, spriteList); 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 -> { case WORLD -> {
// World // World