diff --git a/Projekte/mdga/client/hs_err_pid112363.log b/Projekte/mdga/client/hs_err_pid112363.log new file mode 100644 index 00000000..7e7c369f --- /dev/null +++ b/Projekte/mdga/client/hs_err_pid112363.log @@ -0,0 +1,32 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x000076fb04e70b48, pid=112363, tid=112397 +# +# JRE version: OpenJDK Runtime Environment Temurin-20.0.2+9 (20.0.2+9) (build 20.0.2+9) +# Java VM: OpenJDK 64-Bit Server VM Temurin-20.0.2+9 (20.0.2+9, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) +# Problematic frame: +# C [libLLVM.so.18.1+0x1070b48] llvm::EVT::isExtendedVector() const+0x8 +# +# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" (or dumping to /home/cedric/ProgProjekt/Gruppe-01/Projekte/mdga/client/core.112363) +# +# If you would like to submit a bug report, please visit: +# https://github.com/adoptium/adoptium-support/issues +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + +--------------- S U M M A R Y ------------ + +Command Line: -Ddebugger.agent.enable.coroutines=true -Djava.util.logging.config.file=logging.properties -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=127.0.0.1:37129 -javaagent:/usr/share/idea/plugins/java/lib/rt/debugger-agent.jar -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea pp.mdga.client.MdgaApp + +Host: AMD Ryzen 5 8640HS w/ Radeon 760M Graphics, 12 cores, 14G, Manjaro Linux +Time: Fri Nov 29 22:02:46 2024 CET elapsed time: 26.893420 seconds (0d 0h 0m 26s) + +--------------- T H R E A D --------------- + +Current thread (0x000076fbec5e6dd0): JavaThread "jME3 Main" [_thread_in_native, id=112397, stack(0x000076fbd00fe000,0x000076fbd01fe000)] + +Stack: [0x000076fbd00fe000,0x000076fbd01fe000], sp=0x000076fbd01f4ef8, free space=987k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libLLVM.so.18.1+0x1070b48] llvm::EVT::isExtendedVector() const+0x8 \ No newline at end of file diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java index a33c6dd4..fe2b1d01 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java @@ -96,10 +96,6 @@ else if(boardSelect != null) { } if(name.equals("Test") &&isPressed){ if(app.getView() instanceof GameView gameView){ - gameView.getGuiHandler().test2(); - -// gameView.getGuiHandler().showDice(); -// gameView.getBoardHandler().showDice(Color.AIRFORCE); } } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java index c68eb86d..331fc088 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java @@ -82,13 +82,14 @@ private void handleGame(Notification notification) { } else if (notification instanceof DiceNowNotification) { guiHandler.showDice(); } else if (notification instanceof DicingNotification n) { - //TODO - } else if (notification instanceof DrawCardNotification n) { //TODO ??? + } else if (notification instanceof DrawCardNotification n) { + guiHandler.drawCard(n.getColor()); } else if (notification instanceof HomeMoveNotification home) { boardHandler.moveHomePiece(home.getPieceId(), home.getHomeIndex()); + guiHandler.hideText(); } else if (notification instanceof InterruptNotification) { - //TODO + //TODO ??? } else if (notification instanceof MovePieceNotification n) { if(n.isMoveStart()) { //StartMove @@ -111,11 +112,16 @@ private void handleGame(Notification notification) { } } else if (notification instanceof PlayerInGameNotification n) { boardHandler.addPlayer(n.getColor(),n.getPiecesList()); - guiHandler.addPlayer(n.getColor(),n.getName(), gameView.getOwnColor() == n.getColor()); + guiHandler.addPlayer(n.getColor(),n.getName()); } else if (notification instanceof ResumeNotification) { } else if (notification instanceof RollDiceNotification n) { - guiHandler.rollDice(n.getEyes()); - //TODO multiplicator + if(n.getColor() == gameView.getOwnColor()){ + guiHandler.rollDice(n.getEyes(), n.isTurbo() ? n.getMultiplier() : -1); + } + else { + if (n.isTurbo()) guiHandler.showRolledDiceMult(n.getEyes(), n.getMultiplier(), n.getColor()); + else guiHandler.showRolledDice(n.getEyes(), n.getColor()); + } } else if (notification instanceof SelectableCardsNotification n) { guiHandler.setSelectableCards(n.getCards()); } else if (notification instanceof ShieldActiveNotification n) { @@ -126,12 +132,17 @@ private void handleGame(Notification notification) { app.enter(MdgaState.MAIN); } else if (notification instanceof SwapPieceNotification n) { boardHandler.swapPieces(n.getFirstPiece(), n.getSecondPiece()); + guiHandler.swap(); } else if (notification instanceof WaitMoveNotification) { - //TODO disable all hover, highlight, etc + //TODO ??? } else if (notification instanceof SelectableMoveNotification n) { boardHandler.outlineMove(n.getPieces(), n.getMoveIndexe(), n.getHomeMoves()); } else if (notification instanceof SelectableSwapNotification n) { boardHandler.outlineSwap(n.getOwnPieces(), n.getEnemyPieces()); + } else if (notification instanceof SelectableShieldNotification n) { + boardHandler.outlineShield(n.getOwnPieces()); + } else if (notification instanceof TurboActiveNotification){ + guiHandler.turbo(); } else { throw new RuntimeException("notification not expected: " + notification.toString()); } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java index ccb6b03b..3f9d215e 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java @@ -431,6 +431,21 @@ public void outlineSwap(List ownPieces, List enemyPieces){ } } + public void outlineShield(List pieces){ + selectableOwnPieces.clear(); + selectableEnemyPieces.clear(); + selectedOwnPiece = null; + selectedEnemyPiece = null; + + for (UUID uuid : pieces){ + PieceControl p = this.pieces.get(uuid); + p.highlight(false); + p.setHoverable(true); + p.setSelectable(true); + selectableOwnPieces.add(p); + } + } + //called from inputSynchronizer when a piece is selectable public void pieceSelect(PieceControl pieceSelected) { boolean isSelected = pieceSelected.isSelected(); diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/ActionTextHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/ActionTextHandler.java index 9662df82..e27686c1 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/ActionTextHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/ActionTextHandler.java @@ -120,6 +120,9 @@ private ColorRGBA playerColorToColorRGBA(Color color){ }; } + public void hide(){ + root.detachAllChildren(); + } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java index 3ce97ba9..81df1da7 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java @@ -54,9 +54,9 @@ public void shutdown() { cardLayer = null; } - public void rollDice(int rollNum) { + public void rollDice(int rollNum, Runnable actionAfter) { if (!(1 <= rollNum && rollNum <= 6)) throw new RuntimeException("rollNum is not in the range [1,6]"); - diceControl.rollDice(rollNum); + diceControl.rollDice(rollNum, actionAfter); } public void showDice() { diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/DiceControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/DiceControl.java index 538e840a..1be03347 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/DiceControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/DiceControl.java @@ -23,7 +23,7 @@ public class DiceControl extends AbstractControl { private final Vector3f angularVelocity = new Vector3f(); private float deceleration = 0.5f; private float timeElapsed = 0.0f; - private float rollDuration = 0.0001f; + private float rollDuration = 1f; private static final int ANGULAR_MIN = 5; private static final int ANGULAR_MAX = 15; private static final int ANGULAR_SPIN = 10; @@ -31,6 +31,7 @@ public class DiceControl extends AbstractControl { private boolean slerp = false; private boolean spin = false; private final AssetManager assetManager; + private Runnable actionAfter; public DiceControl(AssetManager assetManager){ this.assetManager = assetManager; @@ -60,13 +61,14 @@ protected void controlUpdate(float tpf) { if (timeElapsed > 1.0f) timeElapsed = 1.0f; Quaternion interpolated = spatial.getLocalRotation().clone(); - interpolated.nlerp(targetRotation, lerp(timeElapsed)); + interpolated.slerp(targetRotation, timeElapsed); spatial.setLocalRotation(interpolated); // Stop rolling once duration is complete if (timeElapsed >= 1.0f) { isRolling = false; slerp = false; + actionAfter.run(); } } }else if(spin){ @@ -90,11 +92,11 @@ protected void controlRender(RenderManager rm, ViewPort vp) { } - public void rollDice(int diceNum) { + public void rollDice(int diceNum, Runnable actionAfter) { if (isRolling) return; spin = false; slerp = false; - + this.actionAfter = actionAfter; angularVelocity.set( FastMath.nextRandomInt(ANGULAR_MIN,ANGULAR_MAX), FastMath.nextRandomInt(ANGULAR_MIN,ANGULAR_MAX), diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java index bd3b54e2..75de9cb7 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java @@ -31,8 +31,23 @@ public void shutdown() { cardLayerHandler.shutdown(); } - public void rollDice(int rollNum) { - cardLayerHandler.rollDice(rollNum); + public void rollDice(int rollNum, int mult) { + cardLayerHandler.rollDice(rollNum, ()->{ + if(mult == -1) actionTextHandler.ownDice(rollNum); + else actionTextHandler.ownDiceMult(rollNum, mult); + hideDice(); + //TODO send Model finished + }); + } + + public void showRolledDiceMult(int rollNum, int mult, Color color) { + String name = playerNameHandler.getName(color); + if(mult == -1) actionTextHandler.diceNum(rollNum, name, color); + else actionTextHandler.diceNumMult(rollNum, mult, name, color); + } + + public void showRolledDice(int rollNum, Color color) { + actionTextHandler.diceNum(rollNum, playerNameHandler.getName(color), color); } public void showDice() { @@ -67,8 +82,8 @@ public Node getCardLayerRootNode(){ return cardLayerHandler.getCardLayer().getRootNode(); } - public void addPlayer(Color color, String name, boolean own) { - playerNameHandler.addPlayer(color, name, own); + public void addPlayer(Color color, String name) { + playerNameHandler.addPlayer(color, name, color == ownColor); } public void setActivePlayer(Color color) { @@ -78,14 +93,6 @@ public void setActivePlayer(Color color) { else actionTextHandler.activePlayer(playerNameHandler.getName(color), color); } - public void test() { - cardLayerHandler.test(); - } - - public void test2() { - actionTextHandler.drawCardOwn(Color.NAVY); - } - public void shield(){ cardLayerHandler.shield(); } @@ -97,4 +104,15 @@ public void swap(){ public void turbo(){ cardLayerHandler.turbo(); } + + public void hideText(){ + actionTextHandler.hide(); + } + + public void drawCard(Color color) { + if (ownColor == color) actionTextHandler.drawCardOwn(color); + else actionTextHandler.drawCard(playerNameHandler.getName(color), color); + } + + } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler_old.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler_old.java.old similarity index 100% rename from Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler_old.java rename to Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler_old.java.old diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java index af49bcc2..8eafc91f 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java @@ -32,9 +32,6 @@ public GameView(MdgaApp app) { this.boardHandler = new BoardHandler(app, fpp); app.getViewPort().addProcessor(fpp); - - - FrameBuffer backFrameBuffer = new FrameBuffer(app.getCamera().getWidth(), app.getCamera().getHeight(), 1); Texture2D backTexture = new Texture2D(app.getCamera().getWidth(), app.getCamera().getHeight(), Image.Format.RGBA8); backFrameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); @@ -54,22 +51,6 @@ public void onEnter() { boardHandler.init(); guiHandler.init(); continueButton.show(); - - - -// boardHandler.addPlayer(Color.AIRFORCE, test); -// boardHandler.movePieceStart(player0, 0); -// boardHandler.enableHover(player0); -// boardHandler.enableHover(player1); -// boardHandler.highlight(player0, true); - - - -// boardHandler.outline(player0, true); - -// boardHandler.outline(10); - - guiHandler.test(); } @Override diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/notification/DrawCardNotification.java b/Projekte/mdga/model/src/main/java/pp.mdga/notification/DrawCardNotification.java index 2de500c0..44484bc4 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/notification/DrawCardNotification.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/notification/DrawCardNotification.java @@ -15,7 +15,7 @@ public class DrawCardNotification extends Notification { * @param color the color of the player who drew the card * @param card the card that was drawn */ - DrawCardNotification(Color color, BonusCard card) { + DrawCardNotification(Color color) { this.color = color; this.card = card; } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/notification/RollDiceNotification.java b/Projekte/mdga/model/src/main/java/pp.mdga/notification/RollDiceNotification.java index b6bd27c3..f807711e 100644 --- a/Projekte/mdga/model/src/main/java/pp.mdga/notification/RollDiceNotification.java +++ b/Projekte/mdga/model/src/main/java/pp.mdga/notification/RollDiceNotification.java @@ -3,24 +3,32 @@ import pp.mdga.game.Color; /** - * Notification that a die has been rolled. + * Notification that a dice has been rolled. */ public class RollDiceNotification extends Notification{ private Color color; private int eyes; - private int moveNumber; + private boolean turbo; + private int multiplier; /** * Constructor. * @param color the color of the player that rolled the die. * @param eyes the number of eyes that were rolled. - * @param moveNumber the number of the move that was made. */ - RollDiceNotification(Color color, int eyes, int moveNumber) { + RollDiceNotification(Color color, int eyes) { this.color = color; this.eyes = eyes; - this.moveNumber = moveNumber; + this.multiplier = -1; + this.turbo = false; + } + + RollDiceNotification(Color color, int eyes, boolean turbo, int multiplier) { + this.color = color; + this.eyes = eyes; + this.multiplier = multiplier; + this.turbo = turbo; } /** @@ -39,11 +47,11 @@ public int getEyes() { return eyes; } - /** - * Get the number of the move that was made. - * @return the number of the move that was made. - */ - public int getMoveNumber() { - return moveNumber; + public int getMultiplier() { + return multiplier; + } + + public boolean isTurbo() { + return turbo; } } diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/notification/SelectableShieldNotification.java b/Projekte/mdga/model/src/main/java/pp.mdga/notification/SelectableShieldNotification.java new file mode 100644 index 00000000..470f50a5 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp.mdga/notification/SelectableShieldNotification.java @@ -0,0 +1,34 @@ +package pp.mdga.notification; + +import java.util.List; +import java.util.UUID; + +/** + * Notification for selecting pieces for swapcard. + */ +public class SelectableShieldNotification extends Notification{ + + /** + * List of UUIDs representing the player's own pieces available for selection. + */ + private final List ownPieces; + + + /** + * Constructs a notification for selecting pieces for swapcard. + * + * @param ownPieces the list of the player's own pieces + */ + public SelectableShieldNotification(List ownPieces) { + this.ownPieces = ownPieces; + } + + /** + * Gets the list of the player's own pieces available for selection. + * + * @return a list of UUIDs representing the player's own pieces + */ + public List getOwnPieces() { + return ownPieces; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp.mdga/notification/TurboActiveNotification.java b/Projekte/mdga/model/src/main/java/pp.mdga/notification/TurboActiveNotification.java new file mode 100644 index 00000000..890f2451 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp.mdga/notification/TurboActiveNotification.java @@ -0,0 +1,4 @@ +package pp.mdga.notification; + +public class TurboActiveNotification extends Notification{ +}