Merge work #7

Merged
fkoppe merged 31 commits from dev/client_koppe into dev/client 2024-11-20 13:50:01 +01:00
9 changed files with 173 additions and 51 deletions
Showing only changes of commit c95beaeb14 - Show all commits

View File

@@ -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

View File

@@ -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,

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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);
}
}

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,-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