diff --git a/OGP1718-Worms/src-provided/worms/facade/IFacade.java b/OGP1718-Worms/src-provided/worms/facade/IFacade.java index b9b1ff1..4bfac9f 100644 --- a/OGP1718-Worms/src-provided/worms/facade/IFacade.java +++ b/OGP1718-Worms/src-provided/worms/facade/IFacade.java @@ -427,6 +427,10 @@ public interface IFacade { World getWorld(Food food) throws ModelException; + /** + * Make the given worm eat a portion of food. + */ + public void eat(Worm worm); /******** * TEAM @@ -519,5 +523,4 @@ public interface IFacade { throw new MustNotImplementException(); } - } diff --git a/OGP1718-Worms/src-provided/worms/internal/gui/game/DefaultActionHandler.java b/OGP1718-Worms/src-provided/worms/internal/gui/game/DefaultActionHandler.java index 59193ce..9f25190 100644 --- a/OGP1718-Worms/src-provided/worms/internal/gui/game/DefaultActionHandler.java +++ b/OGP1718-Worms/src-provided/worms/internal/gui/game/DefaultActionHandler.java @@ -9,6 +9,7 @@ import worms.internal.gui.game.commands.AddNewFood; import worms.internal.gui.game.commands.AddNewTeam; import worms.internal.gui.game.commands.AddNewWorm; import worms.internal.gui.game.commands.Command; +import worms.internal.gui.game.commands.Eat; import worms.internal.gui.game.commands.Jump; import worms.internal.gui.game.commands.Move; import worms.internal.gui.game.commands.Rename; @@ -86,6 +87,10 @@ class DefaultActionHandler implements IActionHandler { public void changeName(Worm worm, String newName) { executeCommand(new Rename(getFacade(), worm, newName, getScreen())); } + + public void eat(Worm worm) { + executeCommand(new Eat(getFacade(), worm, getScreen())); + } public void selectNextWorm() { executeCommand(new SelectNextWorm(getFacade(), getScreen())); diff --git a/OGP1718-Worms/src-provided/worms/internal/gui/game/PlayGameScreen.java b/OGP1718-Worms/src-provided/worms/internal/gui/game/PlayGameScreen.java index 74ca37a..4a6c295 100644 --- a/OGP1718-Worms/src-provided/worms/internal/gui/game/PlayGameScreen.java +++ b/OGP1718-Worms/src-provided/worms/internal/gui/game/PlayGameScreen.java @@ -216,6 +216,14 @@ public class PlayGameScreen extends Screen { } } + + public void eat() { + Worm worm = getSelectedWorm(); + if (worm != null) { + userActionHandler.eat(worm); + } + + } public void turn(double angle) { Worm worm = getSelectedWorm(); diff --git a/OGP1718-Worms/src-provided/worms/internal/gui/game/commands/Eat.java b/OGP1718-Worms/src-provided/worms/internal/gui/game/commands/Eat.java new file mode 100644 index 0000000..ffd3b31 --- /dev/null +++ b/OGP1718-Worms/src-provided/worms/internal/gui/game/commands/Eat.java @@ -0,0 +1,37 @@ +package worms.internal.gui.game.commands; + +import worms.facade.IFacade; +import worms.internal.gui.game.PlayGameScreen; +import worms.internal.gui.messages.MessageType; +import worms.model.Food; +import worms.model.Worm; +import worms.util.ModelException; + +public class Eat extends InstantaneousCommand { + private final Worm worm; + + public Eat(IFacade facade, Worm worm, + PlayGameScreen screen) { + super(facade, screen); + this.worm = worm; + } + + @Override + protected boolean canStart() { + return worm != null; + } + + @Override + protected void doStartExecution() { + try { + long nbFoodBefore = getFacade().getAllItems(getWorld()).stream().filter(Food.class::isInstance).count(); + getFacade().eat(worm); + long nbFoodAfter = getFacade().getAllItems(getWorld()).stream().filter(Food.class::isInstance).count(); + if (nbFoodAfter < nbFoodBefore) { + getScreen().addMessage("Yummie!", MessageType.INFO); + } + } catch (ModelException e) { + getScreen().addMessage("This worm cannot eat.", MessageType.ERROR); + } + } +} \ No newline at end of file diff --git a/OGP1718-Worms/src-provided/worms/internal/gui/game/modes/DefaultInputMode.java b/OGP1718-Worms/src-provided/worms/internal/gui/game/modes/DefaultInputMode.java index 63da925..39e5d9c 100644 --- a/OGP1718-Worms/src-provided/worms/internal/gui/game/modes/DefaultInputMode.java +++ b/OGP1718-Worms/src-provided/worms/internal/gui/game/modes/DefaultInputMode.java @@ -51,6 +51,10 @@ public class DefaultInputMode extends InputMode { case 'N': getScreen().renameWorm(); break; + case 'e': + case 'E': + getScreen().eat(); + break; } }