aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorpacien2018-02-01 20:29:40 +0100
committerpacien2018-02-01 20:29:40 +0100
commit735be27e8802740cf0986bb6d14e720234889aae (patch)
treed3f479d4cf7b3f7082477ce18031b0c4b1f95c52 /src/main/java
parent1a1d90fc6edc85fc3d6440db3a5d582a69a5441d (diff)
downloadwallj-735be27e8802740cf0986bb6d14e720234889aae.tar.gz
Rename events/orders ; Partial impl. of robot event handling
Signed-off-by: pacien <pacien.trangirard@pacien.net>
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/fr/umlv/java/wallj/block/RobotBlock.java25
-rw-r--r--src/main/java/fr/umlv/java/wallj/context/InputHandler.java8
-rw-r--r--src/main/java/fr/umlv/java/wallj/controller/GameStateController.java4
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/AddBombEvent.java21
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/BombSetupEvent.java28
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/BombSetupOrder.java (renamed from src/main/java/fr/umlv/java/wallj/event/DropBombEvent.java)4
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/ConfirmOrder.java (renamed from src/main/java/fr/umlv/java/wallj/event/ConfirmEvent.java)4
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/Event.java11
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/GameOverEvent.java2
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/InputEvent.java2
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/MoveRobotEvent.java22
-rw-r--r--src/main/java/fr/umlv/java/wallj/event/MoveRobotOrder.java28
12 files changed, 97 insertions, 62 deletions
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 45c75da..c011f27 100644
--- a/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java
+++ b/src/main/java/fr/umlv/java/wallj/block/RobotBlock.java
@@ -1,13 +1,19 @@
1package fr.umlv.java.wallj.block; 1package fr.umlv.java.wallj.block;
2 2
3import fr.umlv.java.wallj.board.Board;
4import fr.umlv.java.wallj.board.PathFinder;
3import fr.umlv.java.wallj.board.TileVec2; 5import fr.umlv.java.wallj.board.TileVec2;
4import fr.umlv.java.wallj.context.Context; 6import fr.umlv.java.wallj.context.Context;
5import fr.umlv.java.wallj.context.GraphicsContext; 7import fr.umlv.java.wallj.context.GraphicsContext;
8import fr.umlv.java.wallj.event.BombSetupEvent;
9import fr.umlv.java.wallj.event.BombSetupOrder;
6import fr.umlv.java.wallj.event.Event; 10import fr.umlv.java.wallj.event.Event;
11import fr.umlv.java.wallj.event.MoveRobotOrder;
7import org.jbox2d.common.Vec2; 12import org.jbox2d.common.Vec2;
8import org.jbox2d.dynamics.World; 13import org.jbox2d.dynamics.World;
9 14
10import java.awt.*; 15import java.awt.*;
16import java.time.Duration;
11import java.util.Collections; 17import java.util.Collections;
12import java.util.List; 18import java.util.List;
13 19
@@ -21,6 +27,7 @@ public class RobotBlock extends Block {
21 27
22 private Vec2 pos; 28 private Vec2 pos;
23 private List<TileVec2> path = Collections.emptyList(); 29 private List<TileVec2> path = Collections.emptyList();
30 private PathFinder pathFinder;
24 31
25 RobotBlock(Vec2 pos) { 32 RobotBlock(Vec2 pos) {
26 super(BlockType.ROBOT); 33 super(BlockType.ROBOT);
@@ -39,21 +46,27 @@ public class RobotBlock extends Block {
39 46
40 @Override 47 @Override
41 public List<Event> update(Context context) { 48 public List<Event> update(Context context) {
42 updatePath(context.getEvents()); 49 Event.findFirst(context.getEvents(), MoveRobotOrder.class)
43 if (!path.isEmpty()) move(); 50 .ifPresent(event -> updatePath(context.getGame().getCurrentStage().getBoard(), event.getTarget()));
51
52 if (!path.isEmpty()) move(context.getTimeDelta());
44 paint(context.getGraphicsContext()); 53 paint(context.getGraphicsContext());
45 return setupBomb(context.getEvents()); 54 return setupBomb(context.getEvents());
46 } 55 }
47 56
48 private List<Event> setupBomb(List<Event> events) { 57 private List<Event> setupBomb(List<Event> events) {
49 return Collections.emptyList(); // TODO: return a SetupBombEvent at current location if an order was received 58 return Event.findFirst(events, BombSetupOrder.class)
59 .map(event -> Collections.<Event>singletonList(new BombSetupEvent(TileVec2.of(pos))))
60 .orElse(Collections.emptyList());
50 } 61 }
51 62
52 private void updatePath(List<Event> events) { 63 private void updatePath(Board board, TileVec2 target) {
53 // TODO: update path if received a new target event (using the pathfinder) 64 if (!board.getBlockTypeAt(target).isTraversable()) return;
65 if (pathFinder == null) pathFinder = new PathFinder(board);
66 path = pathFinder.findPath(TileVec2.of(pos), target);
54 } 67 }
55 68
56 private void move() { 69 private void move(Duration timeDelta) {
57 // TODO: follow the current path 70 // TODO: follow the current path
58 } 71 }
59 72
diff --git a/src/main/java/fr/umlv/java/wallj/context/InputHandler.java b/src/main/java/fr/umlv/java/wallj/context/InputHandler.java
index 1a64667..64591df 100644
--- a/src/main/java/fr/umlv/java/wallj/context/InputHandler.java
+++ b/src/main/java/fr/umlv/java/wallj/context/InputHandler.java
@@ -1,8 +1,8 @@
1package fr.umlv.java.wallj.context; 1package fr.umlv.java.wallj.context;
2 2
3import fr.umlv.java.wallj.board.TileVec2; 3import fr.umlv.java.wallj.board.TileVec2;
4import fr.umlv.java.wallj.event.DropBombEvent; 4import fr.umlv.java.wallj.event.BombSetupOrder;
5import fr.umlv.java.wallj.event.MoveRobotEvent; 5import fr.umlv.java.wallj.event.MoveRobotOrder;
6import fr.umlv.zen5.ApplicationContext; 6import fr.umlv.zen5.ApplicationContext;
7import fr.umlv.zen5.Event; 7import fr.umlv.zen5.Event;
8import fr.umlv.zen5.KeyboardKey; 8import fr.umlv.zen5.KeyboardKey;
@@ -43,7 +43,7 @@ public final class InputHandler {
43 if (action == Event.Action.POINTER_DOWN) { 43 if (action == Event.Action.POINTER_DOWN) {
44 Vec2 mouseLocation = new Vec2(location.x, location.y); 44 Vec2 mouseLocation = new Vec2(location.x, location.y);
45 TileVec2 mouseTileLocation = TileVec2.of(mouseLocation); 45 TileVec2 mouseTileLocation = TileVec2.of(mouseLocation);
46 events.add(new MoveRobotEvent(mouseTileLocation)); 46 events.add(new MoveRobotOrder(mouseTileLocation));
47 } 47 }
48 } 48 }
49 KeyboardKey keyboardKey = event.getKey(); 49 KeyboardKey keyboardKey = event.getKey();
@@ -51,7 +51,7 @@ public final class InputHandler {
51 if (action == Event.Action.KEY_PRESSED) { 51 if (action == Event.Action.KEY_PRESSED) {
52 switch (keyboardKey) { 52 switch (keyboardKey) {
53 case SPACE: 53 case SPACE:
54 events.add(new DropBombEvent()); 54 events.add(new BombSetupOrder());
55 break; 55 break;
56 } 56 }
57 } 57 }
diff --git a/src/main/java/fr/umlv/java/wallj/controller/GameStateController.java b/src/main/java/fr/umlv/java/wallj/controller/GameStateController.java
index 2c548f2..c2c28a7 100644
--- a/src/main/java/fr/umlv/java/wallj/controller/GameStateController.java
+++ b/src/main/java/fr/umlv/java/wallj/controller/GameStateController.java
@@ -2,7 +2,7 @@ package fr.umlv.java.wallj.controller;
2 2
3import fr.umlv.java.wallj.context.Context; 3import fr.umlv.java.wallj.context.Context;
4import fr.umlv.java.wallj.context.Game; 4import fr.umlv.java.wallj.context.Game;
5import fr.umlv.java.wallj.event.ConfirmEvent; 5import fr.umlv.java.wallj.event.ConfirmOrder;
6import fr.umlv.java.wallj.event.Event; 6import fr.umlv.java.wallj.event.Event;
7import fr.umlv.java.wallj.event.GameOverEvent; 7import fr.umlv.java.wallj.event.GameOverEvent;
8 8
@@ -13,7 +13,7 @@ public class GameStateController implements Controller {
13 13
14 @Override 14 @Override
15 public List<Event> update(Context context) { 15 public List<Event> update(Context context) {
16 boolean isConfirmEvent = context.getEvents().stream().anyMatch(event -> event instanceof ConfirmEvent); 16 boolean isConfirmEvent = context.getEvents().stream().anyMatch(event -> event instanceof ConfirmOrder);
17 boolean isGameOver = context.getEvents().stream().allMatch(event -> event instanceof GameOverEvent); 17 boolean isGameOver = context.getEvents().stream().allMatch(event -> event instanceof GameOverEvent);
18 Game currentGame = context.getGame(); 18 Game currentGame = context.getGame();
19 LinkedList<Event> events = new LinkedList<>(); 19 LinkedList<Event> events = new LinkedList<>();
diff --git a/src/main/java/fr/umlv/java/wallj/event/AddBombEvent.java b/src/main/java/fr/umlv/java/wallj/event/AddBombEvent.java
deleted file mode 100644
index 10581ff..0000000
--- a/src/main/java/fr/umlv/java/wallj/event/AddBombEvent.java
+++ /dev/null
@@ -1,21 +0,0 @@
1package fr.umlv.java.wallj.event;
2
3import fr.umlv.java.wallj.board.TileVec2;
4
5import java.util.Objects;
6
7/**
8 * Event to put a bomb on the game board
9 *
10 * @author Adam NAILI
11 */
12public final class AddBombEvent implements InputEvent {
13 TileVec2 tileVec2;
14
15 /**
16 * @param tileVec2 a vector with coordinate relative to the tile
17 */
18 public AddBombEvent(TileVec2 tileVec2) {
19 this.tileVec2 = Objects.requireNonNull(tileVec2);
20 }
21}
diff --git a/src/main/java/fr/umlv/java/wallj/event/BombSetupEvent.java b/src/main/java/fr/umlv/java/wallj/event/BombSetupEvent.java
new file mode 100644
index 0000000..2e5cf98
--- /dev/null
+++ b/src/main/java/fr/umlv/java/wallj/event/BombSetupEvent.java
@@ -0,0 +1,28 @@
1package fr.umlv.java.wallj.event;
2
3import fr.umlv.java.wallj.board.TileVec2;
4
5import java.util.Objects;
6
7/**
8 * Bomb setup event.
9 *
10 * @author Pacien TRAN-GIRARD
11 */
12public final class BombSetupEvent implements GameEvent {
13 private final TileVec2 pos;
14
15 /**
16 * @param pos requested setup position
17 */
18 public BombSetupEvent(TileVec2 pos) {
19 this.pos = Objects.requireNonNull(pos);
20 }
21
22 /**
23 * @return the setup position
24 */
25 public TileVec2 getPos() {
26 return pos;