merge GUI

This commit is contained in:
2018-03-30 16:44:22 +02:00
6 changed files with 504 additions and 447 deletions

View File

@@ -427,6 +427,10 @@ public interface IFacade {
World getWorld(Food food) throws ModelException; World getWorld(Food food) throws ModelException;
/**
* Make the given worm eat a portion of food.
*/
public void eat(Worm worm);
/******** /********
* TEAM * TEAM
@@ -519,5 +523,4 @@ public interface IFacade {
throw new MustNotImplementException(); 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.AddNewTeam;
import worms.internal.gui.game.commands.AddNewWorm; import worms.internal.gui.game.commands.AddNewWorm;
import worms.internal.gui.game.commands.Command; 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.Jump;
import worms.internal.gui.game.commands.Move; import worms.internal.gui.game.commands.Move;
import worms.internal.gui.game.commands.Rename; import worms.internal.gui.game.commands.Rename;
@@ -87,6 +88,10 @@ class DefaultActionHandler implements IActionHandler {
executeCommand(new Rename(getFacade(), worm, newName, getScreen())); executeCommand(new Rename(getFacade(), worm, newName, getScreen()));
} }
public void eat(Worm worm) {
executeCommand(new Eat(getFacade(), worm, getScreen()));
}
public void selectNextWorm() { public void selectNextWorm() {
executeCommand(new SelectNextWorm(getFacade(), getScreen())); executeCommand(new SelectNextWorm(getFacade(), getScreen()));
} }

View File

@@ -217,6 +217,14 @@ public class PlayGameScreen extends Screen {
} }
public void eat() {
Worm worm = getSelectedWorm();
if (worm != null) {
userActionHandler.eat(worm);
}
}
public void turn(double angle) { public void turn(double angle) {
Worm worm = getSelectedWorm(); Worm worm = getSelectedWorm();
angle = GUIUtils.restrictAngle(angle, -Math.PI); angle = GUIUtils.restrictAngle(angle, -Math.PI);

View File

@@ -207,7 +207,7 @@ public class PlayGameScreenPainter extends AbstractPainter<PlayGameScreen> {
double hitPoints = sprite.getHitPoints().doubleValue(); double hitPoints = sprite.getHitPoints().doubleValue();
double maxHitPoints = 2000; double maxHitPoints = 2000;
hitPoints = Math.max(hitPoints, maxHitPoints); hitPoints = Math.min(hitPoints, maxHitPoints);
RoundRectangle2D hitpointsBarFill = new RoundRectangle2D.Double(x RoundRectangle2D hitpointsBarFill = new RoundRectangle2D.Double(x
- ACTION_BAR_WIDTH / 2, y + spriteHeight / 2 - ACTION_BAR_WIDTH / 2, y + spriteHeight / 2

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': case 'N':
getScreen().renameWorm(); getScreen().renameWorm();
break; break;
case 'e':
case 'E':
getScreen().eat();
break;
} }
} }