From c95beaeb1436446465cbb726e1ab56e6511e2773 Mon Sep 17 00:00:00 2001 From: Cedric Beck Date: Sun, 17 Nov 2024 23:57:36 +0100 Subject: [PATCH] working on pieceMovement --- .../src/main/java/pp/mdga/client/MdgaApp.java | 19 ++++ .../java/pp/mdga/client/board/BoardAsset.java | 6 +- .../java/pp/mdga/client/board/BoardView.java | 88 ++++++++++++++++--- .../java/pp/mdga/client/board/MapLoader.java | 4 + .../pp/mdga/client/board/NodeControl.java | 6 +- .../pp/mdga/client/board/PieceControl.java | 15 ++++ .../java/pp/mdga/client/board/Rotation.java | 8 ++ .../mdga/client/src/main/resources/map.mdga | 76 ++++++++-------- .../main/java/pp.mdga/server/ServerState.java | 2 +- 9 files changed, 173 insertions(+), 51 deletions(-) create mode 100644 Projekte/mdga/client/src/main/java/pp/mdga/client/board/Rotation.java diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java index e58c5bc3..82c0f397 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java @@ -8,6 +8,11 @@ import com.jme3.system.AppSettings; import pp.mdga.client.board.BoardView; import pp.mdga.client.dialog.DialogView; +import pp.mdga.game.Color; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; public class MdgaApp extends SimpleApplication { private AnimationHandler animationHandler; @@ -43,6 +48,20 @@ public void simpleInitApp() { acousticHandler.playSound(MdgaSound.LOST); acousticHandler.playSound(MdgaSound.VICTORY); + + UUID test0 = UUID.randomUUID(); + UUID test1 = UUID.randomUUID(); + List testList = new ArrayList<>(); + testList.add(test0); + testList.add(test1); + testList.add(UUID.randomUUID()); + testList.add(UUID.randomUUID()); + + boardView.addPlayer(Color.AIRFORCE, testList); + boardView.movePiece(test0, 0); + boardView.moveHomePiece(test1, Color.AIRFORCE, 0); + + } @Override diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardAsset.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardAsset.java index cc52bee7..ce23908e 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardAsset.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardAsset.java @@ -9,15 +9,19 @@ enum BoardAsset { lw, marine, node_home_blue("./node_home/node_home.j3o", "./node_home/node_home_blue_diff.png"), + node_wait_blue("./node_home/node_home.j3o", "./node_home/node_home_blue_diff.png"), node_home_black("./node_home/node_home.j3o", "./node_home/node_home_black_diff.png"), + node_wait_black("./node_home/node_home.j3o", "./node_home/node_home_black_diff.png"), node_home_green("./node_home/node_home.j3o", "./node_home/node_home_green_diff.png"), + node_wait_green("./node_home/node_home.j3o", "./node_home/node_home_green_diff.png"), node_home_yellow("./node_home/node_home.j3o", "./node_home/node_home_yellow_diff.png"), + node_wait_yellow("./node_home/node_home.j3o", "./node_home/node_home_yellow_diff.png"), node_normal, node_start("./node_normal/node_normal.j3o", "./node_normal/node_start_diff.png"), node_bonus("./node_normal/node_normal.j3o", "./node_normal/node_bonus_diff.png"), radar, shieldCard, - ship, + ship(0.8f), smallTent, swapCard, tank, diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardView.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardView.java index 01c9e36d..7fda650f 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardView.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardView.java @@ -11,6 +11,8 @@ import com.jme3.shadow.DirectionalLightShadowRenderer; import pp.mdga.client.MdgaApp; import pp.mdga.game.Color; +import pp.mdga.game.Node; +import pp.mdga.game.Piece; import java.util.*; @@ -24,10 +26,12 @@ public class BoardView { private PileControl drawPile = null; private PileControl discardPile = null; - private ArrayList infield = new ArrayList<>(40); + private ArrayList infield; private Map pieces; - private Map> playerMap; + private Map> colorAssetsMap; + private Map> homeNodesMap; + private Map> waitingNodesMap; public BoardView(MdgaApp app) { assert (app != null) : "app is null"; @@ -35,19 +39,30 @@ public BoardView(MdgaApp app) { this.app = app; this.pieces = new HashMap<>(); - this.playerMap = new HashMap<>(); + this.colorAssetsMap = new HashMap<>(); + this.infield = new ArrayList<>(40); + this.homeNodesMap = new HashMap<>(); + this.waitingNodesMap = new HashMap<>(); initMap(); initCamera(); + + Vector3f previous = new Vector3f(1, 1, 0); // Example vector + Vector3f next = new Vector3f(2, 1, 0); // Example vector + + float angle = getRotationMove(previous, next); + System.out.println((angle)); + + } private void addFigureToPlayerMap(Color col, AssetOnMap assetOnMap) { - List inMap = playerMap.getOrDefault(col, new ArrayList<>()); + List inMap = colorAssetsMap.getOrDefault(col, new ArrayList<>()); inMap.add(assetOnMap); - assert (inMap.size() <= 4) : "to many assets for one player"; + assert (inMap.size() <= 4) : "BoardView: to many assets for " + col; - playerMap.put(col, inMap); + colorAssetsMap.put(col, inMap); } private void initMap() { @@ -61,6 +76,10 @@ private void initMap() { case marine -> addFigureToPlayerMap(assetToColor(BoardAsset.marine), assetOnMap); case node_normal, node_bonus, node_start -> infield.addLast(displayAndControl(assetOnMap, new NodeControl())); + case node_home_black -> addHomeNode(homeNodesMap, Color.AIRFORCE, assetOnMap); + case node_home_blue -> addHomeNode(homeNodesMap, Color.NAVY, assetOnMap); + case node_home_green -> addHomeNode(homeNodesMap, Color.ARMY, assetOnMap); + case node_home_yellow -> addHomeNode(homeNodesMap, Color.CYBER, assetOnMap); default -> displayAsset(assetOnMap); } } @@ -116,12 +135,13 @@ private static Vector3f gridToWorld(int x, int y) { return new Vector3f(GRID_SIZE * x, GRID_SIZE * y, GRID_ELEVATION); } - public void addPlayer(Color color, UUID uuid) { - List playerAssets = playerMap.get(color); + public void addPlayer(Color color, List uuid) { + List playerAssets = colorAssetsMap.get(color); assert (playerAssets != null) : "Assets for Player color are not defined"; + assert (uuid.size() == playerAssets.size()) : "UUID array and playerAssets are not the same size"; - for (AssetOnMap assetOnMap : playerAssets) { - pieces.put(uuid, displayAndControl(assetOnMap, new PieceControl())); + for (int i = 0; i < playerAssets.size(); i++){ + pieces.put(uuid.get(i), displayAndControl(playerAssets.get(i), new PieceControl())); } } @@ -137,4 +157,52 @@ private T displayAndControl(AssetOnMap assetOnMap, T spatial.addControl(control); return control; } + + public void movePiece(UUID uuid, int nodeIndex){ + movePieceToNode(pieces.get(uuid), infield.get(nodeIndex)); + } + + private void movePieceToNode(PieceControl pieceControl, NodeControl nodeControl){ + pieceControl.setLocation(nodeControl.getLocation()); + } + + public void moveHomePiece(UUID uuid, Color color, int index){ + List homeNodes = homeNodesMap.get(color); + assert(homeNodesMap.size() == 4) : "BoardView: HomeNodes for " + color + " are not defined"; + movePieceToNode(pieces.get(uuid), homeNodes.get(index)); + } + + private void addHomeNode(Map> map, Color color, AssetOnMap assetOnMap){ + List homeNodes = map.getOrDefault(color, new ArrayList<>()); + homeNodes.addLast(displayAndControl(assetOnMap, new NodeControl())); + map.put(color, homeNodes); + assert(homeNodes.size() <= 4) : "BoardView: to many homeNodes for " + color; + } + + private float getRotationMove(Vector3f prev, Vector3f next, Rotation rotation){ + Vector3f sub = next.subtract(prev); + if(sub.x != 0 && sub.y != 0){ + + } + else if(sub.x != 0){ + return sub.x > 0 ? + 90 //RIGHT + : + -90; + } + else if(sub.y != 0 ){ + + } + System.out.println(prev.x); + return 0; + } + + private Rotation rotationToEnum(float rot){ + assert(-180 <= rot && rot <= 180) : "BoardView: Invalid rotation"; + if(-45 <= rot && rot < 45) return Rotation.UP; + if(45 <= rot && rot < 135) return Rotation.RIGHT; + if(135 <= rot && rot <= 180 || -180 <= rot && rot < -135) return Rotation.DOWN; + if(-135 <= rot && rot <= -45) return Rotation.LEFT; + return null; + } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java index 2e176d83..53933b4c 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java @@ -70,6 +70,10 @@ private static BoardAsset getLoadedAsset(String assetName) { case "node_home_yellow" -> BoardAsset.node_home_yellow; case "node_home_black" -> BoardAsset.node_home_black; case "node_home_green" -> BoardAsset.node_home_green; + case "node_wait_blue" -> BoardAsset.node_wait_blue; + case "node_wait_yellow" -> BoardAsset.node_wait_yellow; + case "node_wait_black" -> BoardAsset.node_wait_black; + case "node_wait_green" -> BoardAsset.node_wait_green; case "world" -> BoardAsset.world; case "jet" -> BoardAsset.jet; case "big_tent" -> BoardAsset.bigTent; diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/NodeControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/NodeControl.java index f636a9f7..62739017 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/NodeControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/NodeControl.java @@ -1,5 +1,6 @@ package pp.mdga.client.board; +import com.jme3.math.Vector3f; import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.control.AbstractControl; @@ -8,11 +9,14 @@ public class NodeControl extends AbstractControl { @Override protected void controlUpdate(float v) { - } @Override protected void controlRender(RenderManager renderManager, ViewPort viewPort) { } + + public Vector3f getLocation(){ + return this.getSpatial().getLocalTranslation(); + } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/PieceControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/PieceControl.java index 264f8439..7ae76521 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/PieceControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/PieceControl.java @@ -1,10 +1,21 @@ package pp.mdga.client.board; +import com.jme3.math.Vector3f; import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.scene.control.AbstractControl; public class PieceControl extends AbstractControl { + private Rotation rotation; + + public PieceControl(Rotation rotation){ + super(); + this.rotation = rotation; + } + + public Rotation getRotation() { + return rotation; + } @Override protected void controlUpdate(float v) { @@ -15,4 +26,8 @@ protected void controlUpdate(float v) { protected void controlRender(RenderManager renderManager, ViewPort viewPort) { } + + public void setLocation(Vector3f loc){ + this.getSpatial().setLocalTranslation(loc); + } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Rotation.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Rotation.java new file mode 100644 index 00000000..f75d43d7 --- /dev/null +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Rotation.java @@ -0,0 +1,8 @@ +package pp.mdga.client.board; + +public enum Rotation { + UP, + RIGHT, + DOWN, + LEFT +} diff --git a/Projekte/mdga/client/src/main/resources/map.mdga b/Projekte/mdga/client/src/main/resources/map.mdga index cf955999..d3e8d218 100644 --- a/Projekte/mdga/client/src/main/resources/map.mdga +++ b/Projekte/mdga/client/src/main/resources/map.mdga @@ -6,11 +6,11 @@ marine 4,-4 180 marine 5,-4 180 marine 5,-5 180 -#Blue (Marine) Home Node -node_home_blue 4,-5 0 -node_home_blue 4,-4 0 -node_home_blue 5,-4 0 -node_home_blue 5,-5 0 +#Blue (Marine) wait Node +node_wait_blue 4,-5 0 +node_wait_blue 4,-4 0 +node_wait_blue 5,-4 0 +node_wait_blue 5,-5 0 #Lw Pos lw -5,4 0 @@ -18,11 +18,11 @@ lw -4,4 0 lw -4,5 0 lw -5,5 0 -#Black (Lw) Home Node -node_home_black -5,4 0 -node_home_black -4,4 0 -node_home_black -4,5 0 -node_home_black -5,5 0 +#Black (Lw) wait Node +node_wait_black -5,4 0 +node_wait_black -4,4 0 +node_wait_black -4,5 0 +node_wait_black -5,5 0 #Heer Pos heer -4,-5 90 @@ -30,11 +30,11 @@ heer -4,-4 90 heer -5,-4 90 heer -5,-5 90 -#Green (Heer) Home Node -node_home_green -4,-5 0 -node_home_green -4,-4 0 -node_home_green -5,-4 0 -node_home_green -5,-5 0 +#Green (Heer) Wait Node +node_wait_green -4,-5 0 +node_wait_green -4,-4 0 +node_wait_green -5,-4 0 +node_wait_green -5,-5 0 #CIR Pos cir 4,5 -90 @@ -55,11 +55,11 @@ small_tent 8,7 70 tank -1,-10 45 -#Yellow (CIR) Home Node -node_home_yellow 4,5 0 -node_home_yellow 4,4 0 -node_home_yellow 5,4 0 -node_home_yellow 5,5 0 +#Yellow (CIR) wait Node +node_wait_yellow 4,5 0 +node_wait_yellow 4,4 0 +node_wait_yellow 5,4 0 +node_wait_yellow 5,5 0 #Nodes für Map node_start -5,1 0 @@ -105,22 +105,22 @@ node -5,0 0 #Node Home -node_home_green 0,-1 0 -node_home_green 0,-2 0 -node_home_green 0,-3 0 -node_home_green 0,-4 0 - -node_home_yellow 0,1 0 -node_home_yellow 0,2 0 -node_home_yellow 0,3 0 -node_home_yellow 0,4 0 - -node_home_blue 1,0 0 -node_home_blue 2,0 0 -node_home_blue 3,0 0 -node_home_blue 4,0 0 - -node_home_black -1,0 0 -node_home_black -2,0 0 -node_home_black -3,0 0 node_home_black -4,0 0 +node_home_black -3,0 0 +node_home_black -2,0 0 +node_home_black -1,0 0 + +node_home_green 0,-4 0 +node_home_green 0,-3 0 +node_home_green 0,-2 0 +node_home_green 0,-1 0 + +node_home_yellow 0,4 0 +node_home_yellow 0,3 0 +node_home_yellow 0,2 0 +node_home_yellow 0,1 0 + +node_home_blue 4,0 0 +node_home_blue 3,0 0 +node_home_blue 2,0 0 +node_home_blue 1,0 0 diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java index ee022302..3e49b41e 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/server/ServerState.java @@ -5,7 +5,7 @@ import pp.mdga.message.server.PossibleCard; import java.lang.System.Logger; -public abstract class ServerState implements Observer { +public abstract class ServerState implements Observer{ protected static final Logger LOGGER = System.getLogger(ServerState.class.getName()); protected ServerState parent; protected ServerGameLogic logic;