diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/game/engine/GameEngine.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/game/engine/GameEngine.java index 76c2233..4ea817e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/game/engine/GameEngine.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/game/engine/GameEngine.java @@ -1,6 +1,9 @@ package ch.unibas.dmi.dbis.cs108.casono.server.domain.game.engine; import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.action.Action; +import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.action.ActionType; +import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.player.Player; +import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.player.PlayerId; import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.rules.RuleEngine; import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.state.GameState; @@ -80,12 +83,38 @@ public class GameEngine { */ public void handleAction(GameState state, Action action) { + if (action.getType() != ActionType.BLIND) { + + Player currentPlayer = state.getCurrentPlayer(); + PlayerId actingPlayerId = action.getPlayerId(); + + if (currentPlayer == null || actingPlayerId == null) { + throw new RuntimeException("Invalid turn state"); + } + + if (!state.isAllowOutOfTurn() && !currentPlayer.getId().equals(actingPlayerId)) { + throw new RuntimeException("Not your turn"); + } + + Player actingPlayer = state.getPlayer(actingPlayerId); + if (actingPlayer.isFolded()) { + throw new RuntimeException("Player already folded"); + } + if (actingPlayer.isAllIn()) { + throw new RuntimeException("Player is all-in"); + } + } + // 1.Check the rules ruleEngine.validate(state, action); // 2. Perform action action.execute(state); + if (action.getType() != ActionType.BLIND) { + state.markActedThisRound(action.getPlayerId()); + } + // 3. Next turn turnManager.nextPlayer(state);