fix: Moving while terminal too small

This commit is contained in:
2025-12-24 11:18:32 +01:00
parent f10c36de2b
commit 5b0e026480
4 changed files with 20 additions and 0 deletions

View File

@@ -120,9 +120,12 @@ public class FullRoomDrawHandler extends AbstractEventHandler<FullRoomDraw> {
} else {
eventManager.emitEvent(new RerenderScreen(partsToRerender.toArray(RerenderScreen.ScreenPart[]::new)));
}
gameState.setTerminalTooSmall(false);
} catch (ArrayIndexOutOfBoundsException e) {
// Screen too small to fit the room
eventManager.emitEvent(new TerminalTooSmallEvent());
gameState.setTerminalTooSmall(true);
}
}
}

View File

@@ -37,6 +37,10 @@ public class MouseActionEventHandler extends AbstractEventHandler<MouseAction> {
return;
}
if (gameState.isTerminalTooSmall()) {
return;
}
switch (event.getActionType()) {
case MOVE -> eventManager.emitEvent(new MouseMoveEvent(event));
case CLICK_RELEASE -> {

View File

@@ -52,6 +52,10 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
@Override
public void handle(PlayerMoveEvent event) {
if (gameState.isTerminalTooSmall()) {
return;
}
KeyStroke keyStroke = event.getKeyStroke();
Player player = gameState.getPlayer();
RoomCords playerCords = player.getPlayerCords();
@@ -70,6 +74,7 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
return;
}
playerCords.updateCordsWithColliders(currentRoom.getColliders(), player.getPlayerCords().getX(), playerCords.getY() - moveStep);
player.setPlayerRotation(Player.PlayerRotation.BACK);
}
case 'a' -> {
if (originalPlayerX <= 30) {
@@ -79,6 +84,7 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
return;
}
playerCords.updateCordsWithColliders(currentRoom.getColliders(), player.getPlayerCords().getX() - moveStep, playerCords.getY());
player.setPlayerRotation(Player.PlayerRotation.LEFT);
}
case 's' -> {
if (originalPlayerY >= 110) {
@@ -88,6 +94,7 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
return;
}
playerCords.updateCordsWithColliders(currentRoom.getColliders(), player.getPlayerCords().getX(), playerCords.getY() + moveStep);
player.setPlayerRotation(Player.PlayerRotation.FRONT);
}
case 'd' -> {
if (originalPlayerX >= 155) {
@@ -97,6 +104,7 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
return;
}
playerCords.updateCordsWithColliders(currentRoom.getColliders(), player.getPlayerCords().getX() + moveStep, playerCords.getY());
player.setPlayerRotation(Player.PlayerRotation.RIGHT);
}
}
int newPlayerX = playerCords.getX();

View File

@@ -16,6 +16,7 @@ public class GameState {
@Getter
@Setter
private GameRoom currentRoom;
@Getter
@Setter
private Player player;
@@ -27,6 +28,10 @@ public class GameState {
@Getter
private Screen screen;
@Getter
@Setter
private boolean terminalTooSmall = false;
public void setScreen(Screen screen) {
if (screen != null) {
dependencyManager.inject(screen);