working on pieceMovement

This commit is contained in:
Cedric Beck
2024-11-17 23:57:36 +01:00
parent 9662e1f684
commit c95beaeb14
9 changed files with 173 additions and 51 deletions

View File

@@ -8,6 +8,11 @@
import com.jme3.system.AppSettings; import com.jme3.system.AppSettings;
import pp.mdga.client.board.BoardView; import pp.mdga.client.board.BoardView;
import pp.mdga.client.dialog.DialogView; 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 { public class MdgaApp extends SimpleApplication {
private AnimationHandler animationHandler; private AnimationHandler animationHandler;
@@ -43,6 +48,20 @@ public void simpleInitApp() {
acousticHandler.playSound(MdgaSound.LOST); acousticHandler.playSound(MdgaSound.LOST);
acousticHandler.playSound(MdgaSound.VICTORY); acousticHandler.playSound(MdgaSound.VICTORY);
UUID test0 = UUID.randomUUID();
UUID test1 = UUID.randomUUID();
List<UUID> 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 @Override

View File

@@ -9,15 +9,19 @@ enum BoardAsset {
lw, lw,
marine, marine,
node_home_blue("./node_home/node_home.j3o", "./node_home/node_home_blue_diff.png"), 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_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_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_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_normal,
node_start("./node_normal/node_normal.j3o", "./node_normal/node_start_diff.png"), 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"), node_bonus("./node_normal/node_normal.j3o", "./node_normal/node_bonus_diff.png"),
radar, radar,
shieldCard, shieldCard,
ship, ship(0.8f),
smallTent, smallTent,
swapCard, swapCard,
tank, tank,

View File

@@ -11,6 +11,8 @@
import com.jme3.shadow.DirectionalLightShadowRenderer; import com.jme3.shadow.DirectionalLightShadowRenderer;
import pp.mdga.client.MdgaApp; import pp.mdga.client.MdgaApp;
import pp.mdga.game.Color; import pp.mdga.game.Color;
import pp.mdga.game.Node;
import pp.mdga.game.Piece;
import java.util.*; import java.util.*;
@@ -24,10 +26,12 @@ public class BoardView {
private PileControl drawPile = null; private PileControl drawPile = null;
private PileControl discardPile = null; private PileControl discardPile = null;
private ArrayList<NodeControl> infield = new ArrayList<>(40); private ArrayList<NodeControl> infield;
private Map<UUID, PieceControl> pieces; private Map<UUID, PieceControl> pieces;
private Map<Color, List<AssetOnMap>> playerMap; private Map<Color, List<AssetOnMap>> colorAssetsMap;
private Map<Color, List<NodeControl>> homeNodesMap;
private Map<Color, List<NodeControl>> waitingNodesMap;
public BoardView(MdgaApp app) { public BoardView(MdgaApp app) {
assert (app != null) : "app is null"; assert (app != null) : "app is null";
@@ -35,19 +39,30 @@ public BoardView(MdgaApp app) {
this.app = app; this.app = app;
this.pieces = new HashMap<>(); 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(); initMap();
initCamera(); 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) { private void addFigureToPlayerMap(Color col, AssetOnMap assetOnMap) {
List<AssetOnMap> inMap = playerMap.getOrDefault(col, new ArrayList<>()); List<AssetOnMap> inMap = colorAssetsMap.getOrDefault(col, new ArrayList<>());
inMap.add(assetOnMap); 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() { private void initMap() {
@@ -61,6 +76,10 @@ private void initMap() {
case marine -> addFigureToPlayerMap(assetToColor(BoardAsset.marine), assetOnMap); case marine -> addFigureToPlayerMap(assetToColor(BoardAsset.marine), assetOnMap);
case node_normal, node_bonus, node_start -> case node_normal, node_bonus, node_start ->
infield.addLast(displayAndControl(assetOnMap, new NodeControl())); 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); 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); return new Vector3f(GRID_SIZE * x, GRID_SIZE * y, GRID_ELEVATION);
} }
public void addPlayer(Color color, UUID uuid) { public void addPlayer(Color color, List<UUID> uuid) {
List<AssetOnMap> playerAssets = playerMap.get(color); List<AssetOnMap> playerAssets = colorAssetsMap.get(color);
assert (playerAssets != null) : "Assets for Player color are not defined"; 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) { for (int i = 0; i < playerAssets.size(); i++){
pieces.put(uuid, displayAndControl(assetOnMap, new PieceControl())); pieces.put(uuid.get(i), displayAndControl(playerAssets.get(i), new PieceControl()));
} }
} }
@@ -137,4 +157,52 @@ private <T extends AbstractControl> T displayAndControl(AssetOnMap assetOnMap, T
spatial.addControl(control); spatial.addControl(control);
return 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<NodeControl> 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<Color, List<NodeControl>> map, Color color, AssetOnMap assetOnMap){
List<NodeControl> 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;
}
} }

View File

@@ -70,6 +70,10 @@ private static BoardAsset getLoadedAsset(String assetName) {
case "node_home_yellow" -> BoardAsset.node_home_yellow; case "node_home_yellow" -> BoardAsset.node_home_yellow;
case "node_home_black" -> BoardAsset.node_home_black; case "node_home_black" -> BoardAsset.node_home_black;
case "node_home_green" -> BoardAsset.node_home_green; 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 "world" -> BoardAsset.world;
case "jet" -> BoardAsset.jet; case "jet" -> BoardAsset.jet;
case "big_tent" -> BoardAsset.bigTent; case "big_tent" -> BoardAsset.bigTent;

View File

@@ -1,5 +1,6 @@
package pp.mdga.client.board; package pp.mdga.client.board;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager; import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort; import com.jme3.renderer.ViewPort;
import com.jme3.scene.control.AbstractControl; import com.jme3.scene.control.AbstractControl;
@@ -8,11 +9,14 @@ public class NodeControl extends AbstractControl {
@Override @Override
protected void controlUpdate(float v) { protected void controlUpdate(float v) {
} }
@Override @Override
protected void controlRender(RenderManager renderManager, ViewPort viewPort) { protected void controlRender(RenderManager renderManager, ViewPort viewPort) {
} }
public Vector3f getLocation(){
return this.getSpatial().getLocalTranslation();
}
} }

View File

@@ -1,10 +1,21 @@
package pp.mdga.client.board; package pp.mdga.client.board;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager; import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort; import com.jme3.renderer.ViewPort;
import com.jme3.scene.control.AbstractControl; import com.jme3.scene.control.AbstractControl;
public class PieceControl extends AbstractControl { public class PieceControl extends AbstractControl {
private Rotation rotation;
public PieceControl(Rotation rotation){
super();
this.rotation = rotation;
}
public Rotation getRotation() {
return rotation;
}
@Override @Override
protected void controlUpdate(float v) { protected void controlUpdate(float v) {
@@ -15,4 +26,8 @@ protected void controlUpdate(float v) {
protected void controlRender(RenderManager renderManager, ViewPort viewPort) { protected void controlRender(RenderManager renderManager, ViewPort viewPort) {
} }
public void setLocation(Vector3f loc){
this.getSpatial().setLocalTranslation(loc);
}
} }

View File

@@ -0,0 +1,8 @@
package pp.mdga.client.board;
public enum Rotation {
UP,
RIGHT,
DOWN,
LEFT
}

View File

@@ -6,11 +6,11 @@ marine 4,-4 180
marine 5,-4 180 marine 5,-4 180
marine 5,-5 180 marine 5,-5 180
#Blue (Marine) Home Node #Blue (Marine) wait Node
node_home_blue 4,-5 0 node_wait_blue 4,-5 0
node_home_blue 4,-4 0 node_wait_blue 4,-4 0
node_home_blue 5,-4 0 node_wait_blue 5,-4 0
node_home_blue 5,-5 0 node_wait_blue 5,-5 0
#Lw Pos #Lw Pos
lw -5,4 0 lw -5,4 0
@@ -18,11 +18,11 @@ lw -4,4 0
lw -4,5 0 lw -4,5 0
lw -5,5 0 lw -5,5 0
#Black (Lw) Home Node #Black (Lw) wait Node
node_home_black -5,4 0 node_wait_black -5,4 0
node_home_black -4,4 0 node_wait_black -4,4 0
node_home_black -4,5 0 node_wait_black -4,5 0
node_home_black -5,5 0 node_wait_black -5,5 0
#Heer Pos #Heer Pos
heer -4,-5 90 heer -4,-5 90
@@ -30,11 +30,11 @@ heer -4,-4 90
heer -5,-4 90 heer -5,-4 90
heer -5,-5 90 heer -5,-5 90
#Green (Heer) Home Node #Green (Heer) Wait Node
node_home_green -4,-5 0 node_wait_green -4,-5 0
node_home_green -4,-4 0 node_wait_green -4,-4 0
node_home_green -5,-4 0 node_wait_green -5,-4 0
node_home_green -5,-5 0 node_wait_green -5,-5 0
#CIR Pos #CIR Pos
cir 4,5 -90 cir 4,5 -90
@@ -55,11 +55,11 @@ small_tent 8,7 70
tank -1,-10 45 tank -1,-10 45
#Yellow (CIR) Home Node #Yellow (CIR) wait Node
node_home_yellow 4,5 0 node_wait_yellow 4,5 0
node_home_yellow 4,4 0 node_wait_yellow 4,4 0
node_home_yellow 5,4 0 node_wait_yellow 5,4 0
node_home_yellow 5,5 0 node_wait_yellow 5,5 0
#Nodes für Map #Nodes für Map
node_start -5,1 0 node_start -5,1 0
@@ -105,22 +105,22 @@ node -5,0 0
#Node Home #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 -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

View File

@@ -5,7 +5,7 @@
import pp.mdga.message.server.PossibleCard; import pp.mdga.message.server.PossibleCard;
import java.lang.System.Logger; 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 static final Logger LOGGER = System.getLogger(ServerState.class.getName());
protected ServerState parent; protected ServerState parent;
protected ServerGameLogic logic; protected ServerGameLogic logic;