diff --git a/app/src/main/java/chess/io/Command.java b/app/src/main/java/chess/io/Command.java index d49c73c..363d83b 100644 --- a/app/src/main/java/chess/io/Command.java +++ b/app/src/main/java/chess/io/Command.java @@ -16,4 +16,6 @@ public abstract class Command { } public abstract CommandResult execute(Game game, OutputSystem outputSystem); + + public void postExec(Game game, OutputSystem outputSystem) {} } diff --git a/app/src/main/java/chess/io/CommandExecutor.java b/app/src/main/java/chess/io/CommandExecutor.java index 5732604..93f0b8f 100644 --- a/app/src/main/java/chess/io/CommandExecutor.java +++ b/app/src/main/java/chess/io/CommandExecutor.java @@ -24,6 +24,7 @@ public class CommandExecutor { assert result != CommandResult.Moved || command instanceof PlayerCommand; processResult(command, result); + command.postExec(game, outputSystem); return result; } diff --git a/app/src/main/java/chess/io/commands/MoveCommand.java b/app/src/main/java/chess/io/commands/MoveCommand.java index 755109f..bf82dfb 100644 --- a/app/src/main/java/chess/io/commands/MoveCommand.java +++ b/app/src/main/java/chess/io/commands/MoveCommand.java @@ -50,7 +50,7 @@ public class MoveCommand extends PlayerCommand { return CommandResult.NotAllowed; } - if (shouldPromote(game, outputSystem)) + if (game.pawnShouldBePromoted()) return CommandResult.ActionNeeded; return CommandResult.Moved; @@ -63,14 +63,18 @@ public class MoveCommand extends PlayerCommand { board.undoMove(move, deadPiece); } - private boolean shouldPromote(Game game, OutputSystem outputSystem) { + @Override + public void postExec(Game game, OutputSystem outputSystem) { + tryPromote(game, outputSystem); + } + + private void tryPromote(Game game, OutputSystem outputSystem) { Coordinate pawnPos = game.pawnPromotePosition(); if (pawnPos == null) - return false; + return; outputSystem.promotePawn(pawnPos); - return true; } }