Merge work #7
@@ -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<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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<NodeControl> infield = new ArrayList<>(40);
|
||||
private ArrayList<NodeControl> infield;
|
||||
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) {
|
||||
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<AssetOnMap> inMap = playerMap.getOrDefault(col, new ArrayList<>());
|
||||
List<AssetOnMap> 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<AssetOnMap> playerAssets = playerMap.get(color);
|
||||
public void addPlayer(Color color, List<UUID> uuid) {
|
||||
List<AssetOnMap> 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 extends AbstractControl> 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<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_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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,-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
|
||||
|
||||
Reference in New Issue
Block a user