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 { } else {
eventManager.emitEvent(new RerenderScreen(partsToRerender.toArray(RerenderScreen.ScreenPart[]::new))); eventManager.emitEvent(new RerenderScreen(partsToRerender.toArray(RerenderScreen.ScreenPart[]::new)));
} }
gameState.setTerminalTooSmall(false);
} catch (ArrayIndexOutOfBoundsException e) { } catch (ArrayIndexOutOfBoundsException e) {
// Screen too small to fit the room // Screen too small to fit the room
eventManager.emitEvent(new TerminalTooSmallEvent()); eventManager.emitEvent(new TerminalTooSmallEvent());
gameState.setTerminalTooSmall(true);
} }
} }
} }

View File

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

View File

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

View File

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