Merge work #7
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package pp.mdga.client.board;
|
||||||
|
|
||||||
|
public enum Rotation {
|
||||||
|
UP,
|
||||||
|
RIGHT,
|
||||||
|
DOWN,
|
||||||
|
LEFT
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user