From 32f49a61817703014e0ef35fdba635fb125376ac Mon Sep 17 00:00:00 2001 From: Cedric Beck Date: Sat, 7 Dec 2024 13:30:30 +0100 Subject: [PATCH] added shellAnimation without shell asset --- .../src/main/java/pp/mdga/client/Asset.java | 8 +- .../pp/mdga/client/InputSynchronizer.java | 8 +- .../mdga/client/NotificationSynchronizer.java | 2 +- .../src/main/java/pp/mdga/client/Util.java | 47 + .../mdga/client/acoustic/AcousticHandler.java | 9 + .../pp/mdga/client/acoustic/MdgaSound.java | 3 + .../pp/mdga/client/acoustic/SoundAsset.java | 6 +- .../mdga/client/animation/ActionControl.java | 18 + .../pp/mdga/client/animation/FadeControl.java | 14 +- .../client/animation/MatrixAnimation.java | 1 - .../pp/mdga/client/animation/MoveControl.java | 74 +- .../mdga/client/animation/ShellAnimation.java | 140 + .../pp/mdga/client/board/BoardHandler.java | 25 +- .../java/pp/mdga/client/board/MapLoader.java | 3 + .../pp/mdga/client/board/TankTopControl.java | 105 + .../main/resources/Images/particle/flame.png | Bin 0 -> 47227 bytes .../resources/Images/particle/vapor_cloud.png | Bin 0 -> 18236 bytes .../client/src/main/resources/Maps/map.mdga | 6 +- .../resources/Models/tank/tank_shoot_bot.obj | 1978 + .../resources/Models/tank/tank_shoot_top.obj | 554 + .../Models/treeBig/big_trees_background.obj | 383078 +++++++++++++++ .../Models/treeBig/treeBig_background.obj | 239409 +++++++++ .../treeSmall/small_trees_background.obj | 146564 ++++++ .../Models/treeSmall/treeSmall_background.obj | 88741 ++++ .../resources/Models/world/world_diff.png | Bin 11030971 -> 13865674 bytes .../resources/Models/world/world_diff_old.png | Bin 0 -> 11030971 bytes .../Models/world/world_export_newTex.obj | 18858 + .../src/main/resources/Sounds/matrix.wav | Bin 0 -> 597458 bytes .../src/main/resources/Sounds/tank_shoot.ogg | Bin 0 -> 106263 bytes .../main/resources/Sounds/turret_rotate.ogg | Bin 0 -> 107100 bytes 30 files changed, 879576 insertions(+), 75 deletions(-) create mode 100644 Projekte/mdga/client/src/main/java/pp/mdga/client/Util.java create mode 100644 Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ActionControl.java create mode 100644 Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ShellAnimation.java create mode 100644 Projekte/mdga/client/src/main/java/pp/mdga/client/board/TankTopControl.java create mode 100644 Projekte/mdga/client/src/main/resources/Images/particle/flame.png create mode 100644 Projekte/mdga/client/src/main/resources/Images/particle/vapor_cloud.png create mode 100644 Projekte/mdga/client/src/main/resources/Models/tank/tank_shoot_bot.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/tank/tank_shoot_top.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/treeBig/big_trees_background.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/treeBig/treeBig_background.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/treeSmall/small_trees_background.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/treeSmall/treeSmall_background.obj create mode 100644 Projekte/mdga/client/src/main/resources/Models/world/world_diff_old.png create mode 100644 Projekte/mdga/client/src/main/resources/Models/world/world_export_newTex.obj create mode 100644 Projekte/mdga/client/src/main/resources/Sounds/matrix.wav create mode 100644 Projekte/mdga/client/src/main/resources/Sounds/tank_shoot.ogg create mode 100644 Projekte/mdga/client/src/main/resources/Sounds/turret_rotate.ogg diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java index a24d9d1c..0ce1bcfd 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java @@ -28,7 +28,7 @@ public enum Asset { ship(0.8f), smallTent, tank, - world(1.2f), + world("Models/world/world_export_newTex.obj", "Models/world/world_diff.png",1.2f), shieldRing("Models/shieldRing/shieldRing.j3o", null), treeSmall(1.2f), treeBig(1.2f), @@ -38,7 +38,11 @@ public enum Asset { swapSymbol("Models/swapCard/swapSymbol.j3o", "Models/swapCard/swapCard_diff.png"), shieldCard, shieldSymbol("Models/shieldCard/shieldSymbol.j3o", "Models/shieldCard/shieldCard_diff.png"), - dice + dice, + tankShoot("Models/tank/tank_shoot_bot.obj", "Models/tank/tank_diff.png"), + tankShootTop("Models/tank/tank_shoot_top.obj", "Models/tank/tank_diff.png"), + treesSmallBackground("Models/treeSmall/small_trees_background.obj", "Models/treeSmall/treeSmall_diff.png", 1.2f), + treesBigBackground("Models/treeBig/big_trees_background.obj", "Models/treeBig/treeBig_diff.png", 1.2f) ; private final String modelPath; 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 85af5ae3..2d53db04 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 @@ -156,10 +156,14 @@ else if(boardSelect != null) { p = UUID.randomUUID(); gameView.getBoardHandler().addPlayer(Color.AIRFORCE,List.of(p,UUID.randomUUID(),UUID.randomUUID(),UUID.randomUUID())); gameView.getBoardHandler().movePieceStartAnim(p,0); - gameView.getBoardHandler().movePieceAnim(p,0, 8); +// gameView.getBoardHandler().movePieceAnim(p,0, 8); } else { // gameView.getBoardHandler().throwBombAnim(p); - gameView.getBoardHandler().throwPiece(p,Color.CYBER); + gameView.getBoardHandler().throwPiece(p,Color.ARMY); +// gameView.getBoardHandler().movePieceAnim(p,0,20); +// gameView.getBoardHandler().throwPiece(p,Color.CYBER); +// gameView.getBoardHandler().throwPiece(p,Color.AIRFORCE); + //gameView.getBoardHandler().movePieceStartAnim(p,0); } 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 8553dbdc..0baad3a8 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 @@ -138,7 +138,7 @@ private void handleGame(Notification notification) { } guiHandler.hideText(); } else if (notification instanceof ThrowPieceNotification n) { - boardHandler.throwBombAnim(n.getPieceId()); + boardHandler.throwPiece(n.getPieceId(), n.getThrowColor()); } else if (notification instanceof NoShieldNotification n) { boardHandler.unshieldPiece(n.getPieceId()); } else if (notification instanceof PlayCardNotification n) { diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/Util.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/Util.java new file mode 100644 index 00000000..606c4beb --- /dev/null +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/Util.java @@ -0,0 +1,47 @@ +package pp.mdga.client; + +import com.jme3.math.Vector3f; + +public class Util { + private Util(){} + + /** + * Performs linear interpolation between two values. + * + * @param start The starting value. + * @param end The ending value. + * @param t A parameter between 0 and 1 representing the interpolation progress. + * @return The interpolated value. + */ + public static float linInt(float start, float end, float t) { + return start + t * (end - start); + } + + /** + * Performs quadratic interpolation between three points. + * + * @param p1 The initial point. + * @param p2 The middle point. + * @param p3 The final point. + * @param t The interpolation parameter (0 <= t <= 1). + * @return The interpolated point. + */ + public static Vector3f quadInt(Vector3f p1, Vector3f p2, Vector3f p3, float t) { + // Quadratic interpolation: (1-t)^2 * p1 + 2 * (1-t) * t * p2 + t^2 * p3 + float oneMinusT = 1 - t; + return p1.mult(oneMinusT * oneMinusT) + .add(p2.mult(2 * oneMinusT * t)) + .add(p3.mult(t * t)); + } + + /** + * A smooth ease-in-out function for interpolation. + * It accelerates and decelerates the interpolation for a smoother effect. + * + * @param x The interpolation parameter (0 <= x <= 1). + * @return The adjusted interpolation value. + */ + public static float easeInOut(float x){ + return x < 0.5 ? 4 * x * x * x : (float) (1 - Math.pow(-2 * x + 2, 3) / 2); + } +} diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/AcousticHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/AcousticHandler.java index fae8f487..8ff67526 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/AcousticHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/AcousticHandler.java @@ -123,6 +123,15 @@ public void playSound(MdgaSound sound) { case BONUS: assets.add(new SoundAssetDelayVolume(SoundAsset.BONUS, 1.0f, 0.0f)); break; + case TURRET_ROTATE: + assets.add(new SoundAssetDelayVolume(SoundAsset.TURRET_ROTATE, 0.7f, 0f)); + break; + case TANK_SHOOT: + assets.add(new SoundAssetDelayVolume(SoundAsset.TANK_SHOOT, 0.7f, 0f)); + break; + case TANK_EXPLOSION: + assets.add(new SoundAssetDelayVolume(SoundAsset.EXPLOSION_1, 1.0f, 0f)); + break; default: break; } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/MdgaSound.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/MdgaSound.java index 857954ad..9471e4f5 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/MdgaSound.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/MdgaSound.java @@ -35,4 +35,7 @@ public enum MdgaSound { EXPLOSION, LOSE, BONUS, + TURRET_ROTATE, + TANK_SHOOT, + TANK_EXPLOSION } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/SoundAsset.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/SoundAsset.java index 71e4f20a..c9c6b56f 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/SoundAsset.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/acoustic/SoundAsset.java @@ -35,7 +35,11 @@ enum SoundAsset { UI90("ui90.ogg"), BONUS("bonus.ogg"), LOSE("lose.ogg"), - CONNECTED("connected.wav"); + CONNECTED("connected.wav"), + TURRET_ROTATE("turret_rotate.ogg"), + TANK_SHOOT("tank_shoot.ogg") + ; + private final String path; diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ActionControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ActionControl.java new file mode 100644 index 00000000..eb741e9e --- /dev/null +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ActionControl.java @@ -0,0 +1,18 @@ +package pp.mdga.client.animation; + +import pp.mdga.client.InitControl; + +public class ActionControl extends InitControl { + private final Runnable runnable; + + public ActionControl(Runnable runnable){ + this.runnable = runnable; + } + + + + protected void action(){ + if(runnable == null) throw new RuntimeException("runnable is null"); + else runnable.run(); + } +} diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/FadeControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/FadeControl.java index c2a3c5ac..6ff58bae 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/FadeControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/FadeControl.java @@ -6,6 +6,8 @@ import com.jme3.math.ColorRGBA; import pp.mdga.client.InitControl; +import static pp.mdga.client.Util.linInt; + public class FadeControl extends InitControl { private float duration; // Duration of the fade effect private float timeElapsed = 0; @@ -69,16 +71,4 @@ protected void controlUpdate(float tpf) { } else throw new RuntimeException("Material is null"); } else throw new RuntimeException("Spatial is not instance of Geometry"); } - - /** - * Performs linear interpolation between two values. - * - * @param start The starting value. - * @param end The ending value. - * @param t A parameter between 0 and 1 representing the interpolation progress. - * @return The interpolated value. - */ - private float linInt(float start, float end, float t) { - return start + t * (end - start); - } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MatrixAnimation.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MatrixAnimation.java index ecc2d9a1..decde97f 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MatrixAnimation.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MatrixAnimation.java @@ -39,7 +39,6 @@ public MatrixAnimation(MdgaApp app, float duration, Vector3f radarPos, Runnable @Override protected void initSpatial() { state = MatrixState.RADAR_ON; - System.out.println("RADAR ON"); timeElapsed = 0; init = true; radar(); diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MoveControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MoveControl.java index 8aea4efc..5dacacbd 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MoveControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/MoveControl.java @@ -1,7 +1,8 @@ package pp.mdga.client.animation; import com.jme3.math.Vector3f; -import pp.mdga.client.InitControl; + +import static pp.mdga.client.Util.*; /** * A control that smoothly moves a spatial from an initial position to an end position @@ -12,16 +13,16 @@ * an ease-in-out curve to create a smooth start and stop effect. *

*/ -public class MoveControl extends InitControl { +public class MoveControl extends ActionControl { private boolean moving; private final Vector3f initPos; private final Vector3f endPos; private final Vector3f middlePos; - private final static float HEIGHT = 2; - private final static float MOVE_SPEED = 1f; - private float progress = 0; - private final Runnable actionAfter; + private final float height; + private final float duration; + private float timer = 0; + private boolean easing; /** * Creates a new MoveControl with specified initial and end positions, and an action to run after the movement. @@ -32,15 +33,22 @@ public class MoveControl extends InitControl { * @param actionAfter A Runnable that will be executed after the movement finishes. */ public MoveControl(Vector3f initPos, Vector3f endPos, Runnable actionAfter){ + this(initPos, endPos, actionAfter, 2, 1, true); + } + + public MoveControl(Vector3f initPos, Vector3f endPos, Runnable actionAfter, float height, float duration, boolean easing){ + super(actionAfter); moving = false; this.initPos = initPos; this.endPos = endPos; + this.height = height; + this.duration = duration; + this.easing = easing; middlePos = new Vector3f( - (initPos.x + endPos.x) / 2, - (initPos.y + endPos.y) / 2, - HEIGHT + (initPos.x + endPos.x) / 2, + (initPos.y + endPos.y) / 2, + height ); - this.actionAfter = actionAfter; } /** @@ -50,7 +58,7 @@ public MoveControl(Vector3f initPos, Vector3f endPos, Runnable actionAfter){ @Override protected void initSpatial() { moving = true; - progress = 0; + timer = 0; } /** @@ -63,10 +71,16 @@ protected void initSpatial() { @Override protected void controlUpdate(float tpf) { if(!moving) return; - progress += tpf * MOVE_SPEED; - if(progress > 1) progress = 1; - spatial.setLocalTranslation(quadInt(initPos,middlePos,endPos, easeInOut(progress))); - if(progress == 1) end(); + timer += tpf; + + float t = timer / duration; + if (t >= 1) t = 1; + + float interpolated = easing ? easeInOut(t) : t; + + spatial.setLocalTranslation(quadInt(initPos,middlePos,endPos, interpolated)); + + if(t >= 1) end(); } /** @@ -75,35 +89,11 @@ protected void controlUpdate(float tpf) { */ private void end(){ moving = false; - actionAfter.run(); spatial.removeControl(this); + action(); } - /** - * Performs quadratic interpolation between three points. - * - * @param p1 The initial point. - * @param p2 The middle point. - * @param p3 The final point. - * @param t The interpolation parameter (0 <= t <= 1). - * @return The interpolated point. - */ - private Vector3f quadInt(Vector3f p1, Vector3f p2, Vector3f p3, float t) { - // Quadratic interpolation: (1-t)^2 * p1 + 2 * (1-t) * t * p2 + t^2 * p3 - float oneMinusT = 1 - t; - return p1.mult(oneMinusT * oneMinusT) - .add(p2.mult(2 * oneMinusT * t)) - .add(p3.mult(t * t)); - } - /** - * A smooth ease-in-out function for interpolation. - * It accelerates and decelerates the interpolation for a smoother effect. - * - * @param x The interpolation parameter (0 <= x <= 1). - * @return The adjusted interpolation value. - */ - private float easeInOut(float x){ - return x < 0.5 ? 4 * x * x * x : (float) (1 - Math.pow(-2 * x + 2, 3) / 2); - } + + } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ShellAnimation.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ShellAnimation.java new file mode 100644 index 00000000..ea51b285 --- /dev/null +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/animation/ShellAnimation.java @@ -0,0 +1,140 @@ +package pp.mdga.client.animation; + +import com.jme3.effect.ParticleEmitter; +import com.jme3.effect.ParticleMesh; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import pp.mdga.client.InitControl; +import pp.mdga.client.MdgaApp; +import pp.mdga.client.acoustic.MdgaSound; +import pp.mdga.client.board.TankTopControl; + +import java.util.Timer; +import java.util.TimerTask; + +import static com.jme3.material.Materials.UNSHADED; + +public class ShellAnimation extends ActionControl { + private static final float FLYING_DURATION = 1.25f; + private static final float FLYING_HEIGHT = 12f; + private TankTopControl tankTopControl; + private MdgaApp app; + + public ShellAnimation(TankTopControl tankTopControl, MdgaApp app, Runnable actionAfter){ + super(actionAfter); + this.tankTopControl = tankTopControl; + this.app = app; + } + + @Override + protected void initSpatial() { + tankTopControl.rotate(spatial.getLocalTranslation(), this::shoot); + app.getAcousticHandler().playSound(MdgaSound.TURRET_ROTATE); + } + + private Vector3f getShootPos(){ + Vector3f localOffset = new Vector3f(0, -5.4f, 2.9f); + Quaternion turretRotation = tankTopControl.getSpatial().getLocalRotation(); + Vector3f transformedOffset = turretRotation.mult(localOffset); + return tankTopControl.getSpatial().getLocalTranslation().add(transformedOffset); + } + + private void shoot(){ + app.getAcousticHandler().playSound(MdgaSound.TANK_SHOOT); + Vector3f shootPos = getShootPos(); + createEffect( + shootPos, + "Images/particle/flame.png", + 2, 2, + 1, 3, + 1f, + 0.3f, 0.7f, + new ColorRGBA(1f, 0.8f, 0.4f, 0.5f), + new ColorRGBA(1f, 0f, 0f, 0f) + ); + createEffect( + shootPos, + "Images/particle/vapor_cloud.png", + 3, 3, + 0.3f, 0.8f, + 10, + 0.1f, 0.35f, + new ColorRGBA(0.5f,0.5f,0.5f,0.5f), + ColorRGBA.Black + ); + + Geometry test = new Geometry("test", new Box(0.25f,0.25f,0.25f)); + test.setMaterial(new Material(app.getAssetManager(), UNSHADED)); + test.addControl(new MoveControl(shootPos, spatial.getLocalTranslation(), + ()->{ + app.getRootNode().detachChild(test); + hitExplosion(); + }, FLYING_HEIGHT, FLYING_DURATION, false)); + app.getRootNode().attachChild(test); + } + + private void hitExplosion(){ + app.getAcousticHandler().playSound(MdgaSound.TANK_EXPLOSION); + createEffect( + spatial.getLocalTranslation().setZ(1), + "Images/particle/flame.png", + 2, 2, + 1, 5, + 2f, + 0.3f, 0.7f, + new ColorRGBA(1f, 0.8f, 0.4f, 0.5f), + new ColorRGBA(1f, 0f, 0f, 0f) + ); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + action(); + } + }, 800); + } + + private void createEffect(Vector3f shootPos, + String image, + int x, int y, + float startSize, float endSize, + float velocity, + float lowLife, float highLife, + ColorRGBA start, ColorRGBA end){ + // Create a particle emitter for the explosion + ParticleEmitter explosionEmitter = new ParticleEmitter("Explosion", ParticleMesh.Type.Triangle, 100); + Material explosionMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Particle.j3md"); + explosionMat.setTexture("Texture", app.getAssetManager().loadTexture(image)); + explosionEmitter.setMaterial(explosionMat); + + // Particle properties + explosionEmitter.setImagesX(x); // Columns in the texture + explosionEmitter.setImagesY(y); // Rows in the texture + explosionEmitter.setSelectRandomImage(true); // Randomize images for variety + + explosionEmitter.setStartColor(start); // Bright yellowish orange + explosionEmitter.setEndColor(end); // Fade to transparent red + + explosionEmitter.setStartSize(startSize); // Initial size + explosionEmitter.setEndSize(endSize); // Final size + explosionEmitter.setLowLife(lowLife); // Minimum lifetime of particles + explosionEmitter.setHighLife(highLife); // Maximum lifetime of particles + explosionEmitter.setGravity(0, 0, 1); // Gravity to pull particles down + explosionEmitter.getParticleInfluencer().setInitialVelocity(new Vector3f(0, 0, velocity)); + explosionEmitter.getParticleInfluencer().setVelocityVariation(1f); // Adds randomness to the initial velocity + explosionEmitter.setFacingVelocity(true); // Particles face their velocity direction + explosionEmitter.setLocalTranslation(shootPos); + explosionEmitter.setParticlesPerSec(0); + explosionEmitter.emitAllParticles(); + app.getRootNode().attachChild(explosionEmitter); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + app.getRootNode().detachChild(explosionEmitter); + } + }, 1000); + } +} \ No newline at end of file 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 68414d00..1b426665 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 @@ -13,10 +13,7 @@ import pp.mdga.client.Asset; import pp.mdga.client.MdgaApp; import pp.mdga.client.acoustic.MdgaSound; -import pp.mdga.client.animation.FadeControl; -import pp.mdga.client.animation.MatrixAnimation; -import pp.mdga.client.animation.MoveControl; -import pp.mdga.client.animation.JetAnimation; +import pp.mdga.client.animation.*; import pp.mdga.client.gui.DiceControl; import pp.mdga.game.Color; @@ -62,6 +59,8 @@ public class BoardHandler { private DiceControl diceControl; //Radar Position for Matrix animation private Vector3f radarPos; + //TankTop for shellAnimation + private TankTopControl tankTop; /** * Creates a new BoardHandler. @@ -155,12 +154,18 @@ private void initMap() { case node_wait_green -> addHomeNode(waitingNodesMap, Color.ARMY, assetOnMap); case node_wait_yellow -> addHomeNode(waitingNodesMap, Color.CYBER, assetOnMap); case radar -> addRadar(assetOnMap); + case tankShoot -> addTankShoot(assetOnMap); default -> displayAsset(assetOnMap); } } } + private void addTankShoot(AssetOnMap assetOnMap) { + displayAsset(assetOnMap); + tankTop = displayAndControl(new AssetOnMap(Asset.tankShootTop, assetOnMap.x(), assetOnMap.y(), assetOnMap.rot()), new TankTopControl()); + } + private void addRadar(AssetOnMap assetOnMap) { radarPos = gridToWorld(assetOnMap.x(), assetOnMap.y()); displayAsset(assetOnMap); @@ -768,8 +773,9 @@ private void throwBomb(UUID uuid) { } private void throwMatrix(UUID uuid) { + //app.getAcousticHandler().playSound(MdgaSound.MATRIX); Spatial piece = pieces.get(uuid).getSpatial(); - piece.addControl(new MatrixAnimation(app, 1, radarPos,()->{ + piece.addControl(new MatrixAnimation(app, 1, radarPos,()-> { piece.addControl(new FadeControl(1,1,0, () -> { throwPiece(uuid); @@ -777,8 +783,6 @@ private void throwMatrix(UUID uuid) { } )); })); - - } private void throwMissle(UUID uuid) { @@ -786,12 +790,7 @@ private void throwMissle(UUID uuid) { } private void throwShell(UUID uuid) { - - } - - - public void throwBombAnim(UUID uuid){ - + pieces.get(uuid).getSpatial().addControl(new ShellAnimation(tankTop, app, ()-> throwPieceAnim(uuid))); } /** diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java index 76b286da..fe994855 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/MapLoader.java @@ -109,6 +109,9 @@ private static Asset getLoadedAsset(String assetName) { case "tank" -> Asset.tank; case "treeSmall" -> Asset.treeSmall; case "treeBig" -> Asset.treeBig; + case "tank_shoot" -> Asset.tankShoot; + case "treesBigBackground" -> Asset.treesBigBackground; + case "treesSmallBackground" -> Asset.treesSmallBackground; default -> throw new IllegalStateException("Unexpected value: " + assetName); }; } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/TankTopControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/TankTopControl.java new file mode 100644 index 00000000..d6dbb128 --- /dev/null +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/TankTopControl.java @@ -0,0 +1,105 @@ +package pp.mdga.client.board; + +import com.jme3.math.FastMath; +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; +import pp.mdga.client.InitControl; + +import static pp.mdga.client.Util.linInt; + +public class TankTopControl extends InitControl { + + private float timer = 0; // Time elapsed + private final static float DURATION = 1.5f; // Total rotation duration in seconds + private boolean rotating = false; // Flag to track if rotation is active + private float startAngle = 0; + private float endAngle = 0; + private Runnable actionAfter = null; + + @Override + protected void controlUpdate(float tpf) { + if (!rotating) return; + + // Update the timer + timer += tpf; + + // Calculate interpolation factor (0 to 1) + float t = timer / DURATION; + + if (t >= 1) t = 1; + + float curAngle = linInt(startAngle, endAngle, t); + + // Interpolate the rotation + Quaternion interpolatedRotation = new Quaternion(); + interpolatedRotation.fromAngleAxis((float) Math.toRadians(curAngle), Vector3f.UNIT_Z); + + // Apply the interpolated rotation to the spatial + spatial.setLocalRotation(interpolatedRotation); + + if(t >= 1){ + rotating = false; + if(actionAfter != null) actionAfter.run(); + } + } + + public void rotate(Vector3f enemyPos, Runnable actionAfter) { + if (spatial == null) throw new RuntimeException("spatial is null"); + + startAngle = getOwnAngle(); + endAngle = getEnemyAngle(enemyPos); + + // Adjust endAngle to ensure the shortest path + float deltaAngle = endAngle - startAngle; + if (deltaAngle > 180) { + endAngle -= 360; // Rotate counterclockwise + } else if (deltaAngle < -180) { + endAngle += 360; // Rotate clockwise + } + + timer = 0; + rotating = true; + this.actionAfter = actionAfter; // Store the action to execute after rotation + } + + private float getEnemyAngle(Vector3f enemyPos){ + // Direction to the enemy in the XY plane + Vector3f direction = enemyPos.subtract(spatial.getLocalTranslation()); + direction.z = 0; // Project to XY plane + direction.normalizeLocal(); + + Vector3f reference = Vector3f.UNIT_Y.mult(-1); + + // Calculate the angle between the direction vector and the reference vector + float angle = FastMath.acos(reference.dot(direction)); + + // Determine rotation direction using the cross product + Vector3f cross = reference.cross(direction); + if (cross.z < 0) { + angle = -angle; + } + + return (float) Math.toDegrees(angle); // Return the absolute angle in degrees + } + + private float getOwnAngle() { + // Tank's forward direction in the XY plane + Vector3f forward = spatial.getLocalRotation().mult(Vector3f.UNIT_Y); + forward.z = 0; // Project to XY plane + forward.normalizeLocal(); + + // Reference vector: Positive X-axis + Vector3f reference = Vector3f.UNIT_Y; + + // Calculate the angle between the forward vector and the reference vector + float angle = FastMath.acos(reference.dot(forward)); + + // Determine rotation direction using the cross product + Vector3f cross = reference.cross(forward); + if (cross.z < 0) { // For Z-up, check the Z component of the cross product + angle = -angle; + } + + return (float) Math.toDegrees(angle); // Return the absolute angle in radians + } +} diff --git a/Projekte/mdga/client/src/main/resources/Images/particle/flame.png b/Projekte/mdga/client/src/main/resources/Images/particle/flame.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a31f7921bfde3e5aa0c4e513002f4d34fd8d1d GIT binary patch literal 47227 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%0DU&F}h`@Kfvg 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