From 79f02268fc5c303b1e44b38a88b3e7815e764dd5 Mon Sep 17 00:00:00 2001 From: pacien Date: Fri, 2 Feb 2018 01:58:15 +0100 Subject: Create new events and move filter functions Signed-off-by: pacien --- .../java/fr/umlv/java/wallj/block/RobotBlock.java | 8 ++--- .../fr/umlv/java/wallj/event/BlockCreateEvent.java | 39 ++++++++++++++++++++++ .../umlv/java/wallj/event/BlockDestroyEvent.java | 28 ++++++++++++++++ .../fr/umlv/java/wallj/event/BombSetupOrder.java | 2 +- .../fr/umlv/java/wallj/event/ConfirmOrder.java | 1 + src/main/java/fr/umlv/java/wallj/event/Event.java | 10 +----- src/main/java/fr/umlv/java/wallj/event/Events.java | 38 +++++++++++++++++++++ .../fr/umlv/java/wallj/event/GameOverEvent.java | 6 ++++ .../java/fr/umlv/java/wallj/event/InputEvent.java | 2 +- .../umlv/java/wallj/event/StageClearedEvent.java | 10 ++++++ 10 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 src/main/java/fr/umlv/java/wallj/event/BlockCreateEvent.java create mode 100644 src/main/java/fr/umlv/java/wallj/event/BlockDestroyEvent.java create mode 100644 src/main/java/fr/umlv/java/wallj/event/Events.java create mode 100644 src/main/java/fr/umlv/java/wallj/event/StageClearedEvent.java diff --git a/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java b/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java index f5e2584..e41c57f 100644 --- a/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java +++ b/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java @@ -5,10 +5,8 @@ import fr.umlv.java.wallj.board.PathFinder; import fr.umlv.java.wallj.board.TileVec2; import fr.umlv.java.wallj.context.Context; import fr.umlv.java.wallj.context.GraphicsContext; -import fr.umlv.java.wallj.event.BombSetupEvent; -import fr.umlv.java.wallj.event.BombSetupOrder; +import fr.umlv.java.wallj.event.*; import fr.umlv.java.wallj.event.Event; -import fr.umlv.java.wallj.event.MoveRobotOrder; import org.jbox2d.common.Vec2; import org.jbox2d.dynamics.World; @@ -45,7 +43,7 @@ public class RobotBlock extends Block { @Override public List update(Context context) { - Event.findFirst(context.getEvents(), MoveRobotOrder.class) + Events.findFirst(context.getEvents(), MoveRobotOrder.class) .ifPresent(event -> updatePath(context.getGame().getCurrentStage().getBoard(), event.getTarget())); if (!path.isEmpty()) move(context.getTimeDelta()); @@ -54,7 +52,7 @@ public class RobotBlock extends Block { } private List setupBomb(List events) { - return Event.findFirst(events, BombSetupOrder.class) + return Events.findFirst(events, BombSetupOrder.class) .map(event -> Collections.singletonList(new BombSetupEvent(TileVec2.of(pos)))) .orElse(Collections.emptyList()); } diff --git a/src/main/java/fr/umlv/java/wallj/event/BlockCreateEvent.java b/src/main/java/fr/umlv/java/wallj/event/BlockCreateEvent.java new file mode 100644 index 0000000..1df177a --- /dev/null +++ b/src/main/java/fr/umlv/java/wallj/event/BlockCreateEvent.java @@ -0,0 +1,39 @@ +package fr.umlv.java.wallj.event; + +import fr.umlv.java.wallj.block.BlockType; +import fr.umlv.java.wallj.board.TileVec2; + +import java.util.Objects; + +/** + * Block creation request. + * + * @author Pacien TRAN-GIRARD + */ +public class BlockCreateEvent implements GameEvent { + private final BlockType blockType; + private final TileVec2 pos; + + /** + * @param blockType the type of the block to create + * @param pos the position of the block to create + */ + public BlockCreateEvent(BlockType blockType, TileVec2 pos) { + this.blockType = Objects.requireNonNull(blockType); + this.pos = Objects.requireNonNull(pos); + } + + /** + * @return the type of the block to create + */ + public BlockType getBlockType() { + return blockType; + } + + /** + * @return the position of the block to create + */ + public TileVec2 getPos() { + return pos; + } +} diff --git a/src/main/java/fr/umlv/java/wallj/event/BlockDestroyEvent.java b/src/main/java/fr/umlv/java/wallj/event/BlockDestroyEvent.java new file mode 100644 index 0000000..d954fa0 --- /dev/null +++ b/src/main/java/fr/umlv/java/wallj/event/BlockDestroyEvent.java @@ -0,0 +1,28 @@ +package fr.umlv.java.wallj.event; + +import fr.umlv.java.wallj.block.Block; + +import java.util.Objects; + +/** + * Block destroy request. + * + * @author Pacien TRAN-GIRARD + */ +public class BlockDestroyEvent implements GameEvent { + private final Block block; + + /** + * @param block the block to destroy + */ + public BlockDestroyEvent(Block block) { + this.block = Objects.requireNonNull(block); + } + + /** + * @return the block to destroy + */ + public Block getBlock() { + return block; + } +} diff --git a/src/main/java/fr/umlv/java/wallj/event/BombSetupOrder.java b/src/main/java/fr/umlv/java/wallj/event/BombSetupOrder.java index 99c0942..25f0048 100644 --- a/src/main/java/fr/umlv/java/wallj/event/BombSetupOrder.java +++ b/src/main/java/fr/umlv/java/wallj/event/BombSetupOrder.java @@ -6,5 +6,5 @@ package fr.umlv.java.wallj.event; * @author Adam NAILI */ public final class BombSetupOrder implements InputEvent { - + // void } diff --git a/src/main/java/fr/umlv/java/wallj/event/ConfirmOrder.java b/src/main/java/fr/umlv/java/wallj/event/ConfirmOrder.java index a3e3525..eb384cb 100644 --- a/src/main/java/fr/umlv/java/wallj/event/ConfirmOrder.java +++ b/src/main/java/fr/umlv/java/wallj/event/ConfirmOrder.java @@ -6,4 +6,5 @@ package fr.umlv.java.wallj.event; * @author Adam NAILI */ public class ConfirmOrder implements InputEvent { + // void } diff --git a/src/main/java/fr/umlv/java/wallj/event/Event.java b/src/main/java/fr/umlv/java/wallj/event/Event.java index 5b8b500..e373002 100644 --- a/src/main/java/fr/umlv/java/wallj/event/Event.java +++ b/src/main/java/fr/umlv/java/wallj/event/Event.java @@ -1,18 +1,10 @@ package fr.umlv.java.wallj.event; -import java.util.List; -import java.util.Optional; - /** * An application event * * @author Pacien TRAN-GIRARD */ public interface Event { - static Optional findFirst(List eventList, Class eventClass) { - return eventList.stream() - .filter(e -> e.getClass().isInstance(eventClass)) - .findFirst() - .map(eventClass::cast); - } + // void } diff --git a/src/main/java/fr/umlv/java/wallj/event/Events.java b/src/main/java/fr/umlv/java/wallj/event/Events.java new file mode 100644 index 0000000..da8b199 --- /dev/null +++ b/src/main/java/fr/umlv/java/wallj/event/Events.java @@ -0,0 +1,38 @@ +package fr.umlv.java.wallj.event; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; + +/** + * Events filtering utilities. + * + * @author Pacien TRAN-GIRARD + */ +public final class Events { + /** + * @param eventList list of events to filter + * @param eventClass event class to keep + * @param type of events to keep + * @return a filtered stream of events + */ + public static Stream filter(List eventList, Class eventClass) { + return eventList.stream() + .filter(e -> e.getClass().isInstance(eventClass)) + .map(eventClass::cast); + } + + /** + * @param eventList list of events to filter + * @param eventClass event class to keep + * @param type of events to keep + * @return any matching event + */ + public static Optional findFirst(List eventList, Class eventClass) { + return filter(eventList, eventClass).findFirst(); + } + + private Events() { + // static class + } +} diff --git a/src/main/java/fr/umlv/java/wallj/event/GameOverEvent.java b/src/main/java/fr/umlv/java/wallj/event/GameOverEvent.java index 93ec049..4365dc4 100644 --- a/src/main/java/fr/umlv/java/wallj/event/GameOverEvent.java +++ b/src/main/java/fr/umlv/java/wallj/event/GameOverEvent.java @@ -1,4 +1,10 @@ package fr.umlv.java.wallj.event; +/** + * Signals that the game is over. + * + * @author Pacien TRAN-GIRARD + */ public final class GameOverEvent implements GameEvent { + // void } diff --git a/src/main/java/fr/umlv/java/wallj/event/InputEvent.java b/src/main/java/fr/umlv/java/wallj/event/InputEvent.java index 20a6203..39e6deb 100644 --- a/src/main/java/fr/umlv/java/wallj/event/InputEvent.java +++ b/src/main/java/fr/umlv/java/wallj/event/InputEvent.java @@ -6,5 +6,5 @@ package fr.umlv.java.wallj.event; * @author Adam NAILI */ public interface InputEvent extends Event { - + // void } diff --git a/src/main/java/fr/umlv/java/wallj/event/StageClearedEvent.java b/src/main/java/fr/umlv/java/wallj/event/StageClearedEvent.java new file mode 100644 index 0000000..17e3ea4 --- /dev/null +++ b/src/main/java/fr/umlv/java/wallj/event/StageClearedEvent.java @@ -0,0 +1,10 @@ +package fr.umlv.java.wallj.event; + +/** + * Signals that a stage is cleared. + * + * @author Pacien TRAN-GIRARD + */ +public class StageClearedEvent implements GameEvent { + // void +} -- cgit v1.2.3