aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorpacien2018-02-01 15:47:44 +0100
committerpacien2018-02-01 15:47:44 +0100
commita1942c8cfebd7c850e2cc3ecf94aa6dd8039409f (patch)
treec7acf0fbb6a37725072ba210f622abab9fc17ee3 /src/main/java
parent48902d6696e40cb100c86fa83b131b4b7a016f52 (diff)
downloadwallj-a1942c8cfebd7c850e2cc3ecf94aa6dd8039409f.tar.gz
Add stage controller and Updateable interface
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/Block.java4
-rw-r--r--src/main/java/fr/umlv/java/wallj/block/Stage.java41
-rw-r--r--src/main/java/fr/umlv/java/wallj/context/Game.java5
-rw-r--r--src/main/java/fr/umlv/java/wallj/context/Updateable.java28
-rw-r--r--src/main/java/fr/umlv/java/wallj/controller/Controller.java12
-rw-r--r--src/main/java/fr/umlv/java/wallj/controller/StagePhysicsController.java34
6 files changed, 102 insertions, 22 deletions
diff --git a/src/main/java/fr/umlv/java/wallj/block/Block.java b/src/main/java/fr/umlv/java/wallj/block/Block.java
index d3c349e..ba299b4 100644
--- a/src/main/java/fr/umlv/java/wallj/block/Block.java
+++ b/src/main/java/fr/umlv/java/wallj/block/Block.java
@@ -2,6 +2,7 @@ package fr.umlv.java.wallj.block;
2 2
3import fr.umlv.java.wallj.board.TileVec2; 3import fr.umlv.java.wallj.board.TileVec2;
4import fr.umlv.java.wallj.context.Context; 4import fr.umlv.java.wallj.context.Context;
5import fr.umlv.java.wallj.context.Updateable;
5import fr.umlv.java.wallj.controller.BlockController; 6import fr.umlv.java.wallj.controller.BlockController;
6import fr.umlv.java.wallj.controller.Controller; 7import fr.umlv.java.wallj.controller.Controller;
7import fr.umlv.java.wallj.event.Event; 8import fr.umlv.java.wallj.event.Event;
@@ -15,7 +16,7 @@ import java.util.stream.Collectors;
15 * 16 *
16 * @author Pacien TRAN-GIRARD 17 * @author Pacien TRAN-GIRARD
17 */ 18 */
18public abstract class Block { 19public abstract class Block implements Updateable {
19 20
20 private final BlockType type; 21 private final BlockType type;
21 private List<Controller> controllers; 22 private List<Controller> controllers;
@@ -66,6 +67,7 @@ public abstract class Block {
66 * @param ctx execution context 67 * @param ctx execution context
67 * @return list of generated events 68 * @return list of generated events
68 */ 69 */
70 @Override
69 public List<Event> update(Context ctx) { 71 public List<Event> update(Context ctx) {
70 return controllers.stream() 72 return controllers.stream()
71 .flatMap(controller -> controller.update(ctx).stream()) 73 .flatMap(controller -> controller.update(ctx).stream())
diff --git a/src/main/java/fr/umlv/java/wallj/block/Stage.java b/src/main/java/fr/umlv/java/wallj/block/Stage.java
index d34af97..cbb75e5 100644
--- a/src/main/java/fr/umlv/java/wallj/block/Stage.java
+++ b/src/main/java/fr/umlv/java/wallj/block/Stage.java
@@ -1,42 +1,59 @@
1package fr.umlv.java.wallj.block; 1package fr.umlv.java.wallj.block;
2 2
3import fr.umlv.java.wallj.board.Board; 3import fr.umlv.java.wallj.board.Board;
4import fr.umlv.java.wallj.board.BoardConverter;
4import fr.umlv.java.wallj.context.Context; 5import fr.umlv.java.wallj.context.Context;
6import fr.umlv.java.wallj.context.Updateable;
7import fr.umlv.java.wallj.controller.Controller;
8import fr.umlv.java.wallj.controller.StagePhysicsController;
5import fr.umlv.java.wallj.event.Event; 9import fr.umlv.java.wallj.event.Event;
10import org.jbox2d.common.Vec2;
11import org.jbox2d.dynamics.World;
6 12
13import java.util.Arrays;
14import java.util.Collections;
7import java.util.List; 15import java.util.List;
8import java.util.Objects; 16import java.util.Objects;
9 17
10/** 18/**
11 * @author 19 * @author Pacien TRAN-GIRARD
12 */ 20 */
13public class Stage { 21public class Stage implements Updateable {
14 //TODO Class Stage 22 private final List<Controller> controllers = Collections.singletonList(new StagePhysicsController(this));
15 private final Board currentBoard; 23 private final World world = new World(new Vec2());
24
25 private final Board board;
26 private final List<Block> blocks;
16 27
17 public Stage(Board board) { 28 public Stage(Board board) {
18 currentBoard = Objects.requireNonNull(board); 29 this.board = Objects.requireNonNull(board);
30 this.blocks = BoardConverter.boardToWorld(board);
31 }
32
33 public World getWorld() {
34 return world;
19 } 35 }
20 36
21 /** 37 /**
22 * @return the current board of the game 38 * @return the current board of the game
23 */ 39 */
24 public Board getCurrentBoard() { 40 public Board getBoard() {
25 return currentBoard; 41 return board;
42 }
43
44 public boolean isCleared() {
45 // TODO
46 return false;
26 } 47 }
27 48
28 /** 49 /**
29 * @param context the current context 50 * @param context the current context
30 * @return a list of new events to perform 51 * @return a list of new events to perform
31 */ 52 */
53 @Override
32 public List<Event> update(Context context) { 54 public List<Event> update(Context context) {
33 //TODO 55 //TODO
34 return null; 56 return null;
35 } 57 }
36 58
37 public boolean isCleared() {
38 // TODO
39 return false;
40 }
41
42} 59}
diff --git a/src/main/java/fr/umlv/java/wallj/context/Game.java b/src/main/java/fr/umlv/java/wallj/context/Game.java
index 6bc63ae..182f121 100644
--- a/src/main/java/fr/umlv/java/wallj/context/Game.java
+++ b/src/main/java/fr/umlv/java/wallj/context/Game.java
@@ -13,7 +13,7 @@ import java.util.*;
13 * 13 *
14 * @author Adam NAILI 14 * @author Adam NAILI
15 */ 15 */
16public final class Game { 16public final class Game implements Updateable {
17 private Stage currentStage; 17 private Stage currentStage;
18 private final List<Controller> controllers; 18 private final List<Controller> controllers;
19 private int indexBoard; 19 private int indexBoard;
@@ -75,13 +75,14 @@ public final class Game {
75 } 75 }
76 76
77 public void retryStage() { 77 public void retryStage() {
78 currentStage = new Stage(currentStage.getCurrentBoard()); 78 currentStage = new Stage(currentStage.getBoard());
79 } 79 }
80 80
81 /** 81 /**
82 * @param context the current context 82 * @param context the current context
83 * @return a list of new events 83 * @return a list of new events
84 */ 84 */
85 @Override
85 public List<Event> update(Context context) { 86 public List<Event> update(Context context) {
86 LinkedList<Event> events = new LinkedList<>(); 87 LinkedList<Event> events = new LinkedList<>();
87 for (Controller controller : controllers) { 88 for (Controller controller : controllers) {
diff --git a/src/main/java/fr/umlv/java/wallj/context/Updateable.java b/src/main/java/fr/umlv/java/wallj/context/Updateable.java
new file mode 100644
index 0000000..468fe2c
--- /dev/null
+++ b/src/main/java/fr/umlv/java/wallj/context/Updateable.java
@@ -0,0 +1,28 @@
1package fr.umlv.java.wallj.context;
2
3import fr.umlv.java.wallj.event.Event;
4
5import java.util.List;
6import java.util.stream.Collectors;
7
8/**
9 * @author Pacien TRAN-GIRARD
10 */
11public interface Updateable {
12 /**
13 * @param context an update context
14 * @return a list of generated events
15 */
16 List<Event> update(Context context);
17
18 /**
19 * @param updateables list of updateables
20 * @param context an update context
21 * @return a list of collected generated events
22 */
23 static List<Event> updateAll(List<Updateable> updateables, Context context) {
24 return updateables.stream()
25 .flatMap(u -> u.update(context).stream())
26 .collect(Collectors.toList());
27 }
28}
diff --git a/src/main/java/fr/umlv/java/wallj/controller/Controller.java b/src/main/java/fr/umlv/java/wallj/controller/Controller.java
index a40fb36..e975bcc 100644
--- a/src/main/java/fr/umlv/java/wallj/controller/Controller.java
+++ b/src/main/java/fr/umlv/java/wallj/controller/Controller.java
@@ -1,13 +1,11 @@
1package fr.umlv.java.wallj.controller; 1package fr.umlv.java.wallj.controller;
2 2
3import fr.umlv.java.wallj.context.Context; 3import fr.umlv.java.wallj.context.Updateable;
4import fr.umlv.java.wallj.event.Event;
5
6import java.util.List;
7 4
8/** 5/**
9 * @author 6 * @author Pacien TRAN-GIRARD
10 */ 7 */
11public interface Controller { 8@FunctionalInterface
12 List<Event> update(Context context); 9public interface Controller extends Updateable {
10
13} 11}
diff --git a/src/main/java/fr/umlv/java/wallj/controller/StagePhysicsController.java b/src/main/java/fr/umlv/java/wallj/controller/StagePhysicsController.java
new file mode 100644
index 0000000..0846584
--- /dev/null
+++ b/src/main/java/fr/umlv/java/wallj/controller/StagePhysicsController.java
@@ -0,0 +1,34 @@
1package fr.umlv.java.wallj.controller;
2
3import fr.umlv.java.wallj.block.Stage;
4import fr.umlv.java.wallj.context.Context;
5import fr.umlv.j