forked from jzitnik/twodcraft
feat(ui): Implemented "Save and Exit" in Escape
This commit is contained in:
parent
4dd785fdfc
commit
aa6a47fff9
@ -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 -> {
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user