Release v2.3

eat() method
This commit is contained in:
Koen Yskout
2018-03-28 14:11:41 +02:00
parent bfe9b06404
commit 295c510d73
5 changed files with 58 additions and 1 deletions

View File

@@ -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();
}
}

View File

@@ -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()));

View File

@@ -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();

View File

@@ -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);
}
}
}

View File

@@ -51,6 +51,10 @@ public class DefaultInputMode extends InputMode<PlayGameScreen> {
case 'N':
getScreen().renameWorm();
break;
case 'e':
case 'E':
getScreen().eat();
break;
}
}