From 113202278ff930ef30d3d9dfe04d6d3b967f6525 Mon Sep 17 00:00:00 2001 From: Johannes Schmelz Date: Wed, 16 Oct 2024 20:33:15 +0200 Subject: [PATCH] added shell animation --- .../pp/battleship/client/gui/MapView.java | 2 +- .../client/gui/MapViewSynchronizer.java | 29 ++++ .../client/gui/SeaSynchronizer.java | 23 ++++ .../battleship/client/gui/Shell2DControl.java | 49 +++++++ .../battleship/client/gui/ShellControl.java | 50 +++++++ .../battleship/server/BattleshipServer.java | 3 + .../src/main/resources/Models/Shell/shell.j3o | Bin 0 -> 155221 bytes .../resources/Models/Shell/shell_color.png | Bin 0 -> 44224 bytes .../battleship/game/client/BattleState.java | 39 +----- .../battleship/game/client/ShootingState.java | 114 ++++++++++++++++ .../game/server/ServerGameLogic.java | 110 ++++++++------- .../battleship/game/server/ServerState.java | 5 + .../battleship/game/singlemode/Copycat.java | 6 + .../game/singlemode/RobotClient.java | 3 + .../client/AnimationFinishedMessage.java | 24 ++++ .../message/client/ClientInterpreter.java | 8 ++ .../main/java/pp/battleship/model/Shell.java | 125 ++++++++++++++++++ .../java/pp/battleship/model/ShipMap.java | 9 ++ .../java/pp/battleship/model/Visitor.java | 8 ++ .../java/pp/battleship/model/VoidVisitor.java | 6 + .../pp/battleship/notification/Sound.java | 6 +- .../battleship/server/BattleshipServer.java | 3 + 22 files changed, 541 insertions(+), 81 deletions(-) create mode 100644 Projekte/battleship/client/src/main/java/pp/battleship/client/gui/Shell2DControl.java create mode 100644 Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShellControl.java create mode 100644 Projekte/battleship/client/src/main/resources/Models/Shell/shell.j3o create mode 100644 Projekte/battleship/client/src/main/resources/Models/Shell/shell_color.png create mode 100644 Projekte/battleship/model/src/main/java/pp/battleship/game/client/ShootingState.java create mode 100644 Projekte/battleship/model/src/main/java/pp/battleship/message/client/AnimationFinishedMessage.java create mode 100644 Projekte/battleship/model/src/main/java/pp/battleship/model/Shell.java diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java index bd16c83..81f348b 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java @@ -28,7 +28,7 @@ import pp.util.Position; * and interaction between the model and the view. */ class MapView { - private static final float FIELD_SIZE = 40f; + public static final float FIELD_SIZE = 40f; private static final float GRID_LINE_WIDTH = 2f; private static final float BACKGROUND_DEPTH = -4f; private static final float GRID_DEPTH = -1f; diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java index a6075fd..684dab9 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java @@ -7,14 +7,23 @@ package pp.battleship.client.gui; +import com.jme3.material.Material; +import com.jme3.material.RenderState; +import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.scene.Geometry; import com.jme3.scene.Node; import com.jme3.scene.Spatial; +import com.jme3.scene.shape.Sphere; + import pp.battleship.model.Battleship; +import pp.battleship.model.Shell; import pp.battleship.model.Shot; import pp.util.Position; +import static com.jme3.material.Materials.UNSHADED; + + /** * Synchronizes the visual representation of the ship map with the game model. * It handles the rendering of ships and shots on the map view, updating the view @@ -122,4 +131,24 @@ class MapViewSynchronizer extends ShipMapSynchronizer { private Geometry shipLine(float x1, float y1, float x2, float y2, ColorRGBA color) { return view.getApp().getDraw().makeFatLine(x1, y1, x2, y2, SHIP_DEPTH, color, SHIP_LINE_WIDTH); } + + /** + * Creates and returns a Spatial representation of the given {@code Shell} object + * for 2D visualization in the game. The shell is represented as a circle. + * + * @param shell The {@code Shell} object to be visualized. + * @return A {@code Spatial} object representing the shell on the map. + */ + @Override + public Spatial visit(Shell shell) { + final ColorRGBA color = ColorRGBA.Black; + Geometry ellipse = new Geometry("ellipse", new Sphere(50, 50, MapView.FIELD_SIZE / 2 * 0.8f)); + Material mat = new Material(view.getApp().getAssetManager(), UNSHADED); //NON-NLS + mat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); + mat.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off); + mat.setColor("Color", color); + ellipse.setMaterial(mat); + ellipse.addControl(new Shell2DControl(view, shell)); + return ellipse; + } } diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java index d330c74..f1736e8 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java @@ -20,6 +20,7 @@ import com.jme3.scene.shape.Cylinder; import pp.battleship.client.BattleshipApp; import pp.battleship.model.Battleship; import pp.battleship.model.Rotation; +import pp.battleship.model.Shell; import pp.battleship.model.ShipMap; import pp.battleship.model.Shot; @@ -39,6 +40,7 @@ class SeaSynchronizer extends ShipMapSynchronizer { private static final String BOAT_SMALL_MODEL = "Models/BoatSmall/12219_boat_v2_L2.j3o"; //NON-NLS private static final String CV_MODEL = "Models/CV/CV.j3o"; //NON-NLS private static final String BATTLE_MODEL = "Models/Battle/Battle.j3o"; //NON-NLS + private static final String LIGHTING = "Common/MatDefs/Light/Lighting.j3md"; private static final String COLOR = "Color"; //NON-NLS private static final String SHIP = "ship"; //NON-NLS private static final String SHOT = "shot"; //NON-NLS @@ -352,4 +354,25 @@ class SeaSynchronizer extends ShipMapSynchronizer { case UP -> PI; }; } + + /** + * Creates and returns a 3D model representation of the given {@code Shell} object + * for visualization in the game. + * + * @param shell The {@code Shell} object to be visualized. + * @return A {@code Spatial} object representing the 3D model of the shell. + */ + @Override + public Spatial visit(Shell shell) { + final Spatial model = app.getAssetManager().loadModel("Models/Shell/shell.j3o"); + model.setLocalScale(.05f); + model.setShadowMode(ShadowMode.CastAndReceive); + Material mat = new Material(app.getAssetManager(), LIGHTING); + mat.setTexture("DiffuseMap", app.getAssetManager().loadTexture("Models/Shell/shell_color.png")); + mat.setReceivesShadows(true); + model.setMaterial(mat); + + model.addControl(new ShellControl(shell)); + return model; + } } diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/Shell2DControl.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/Shell2DControl.java new file mode 100644 index 0000000..93ae2ad --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/Shell2DControl.java @@ -0,0 +1,49 @@ +package pp.battleship.client.gui; + +import com.jme3.math.Vector3f; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.ViewPort; +import com.jme3.scene.control.AbstractControl; +import pp.battleship.model.Shell; +import pp.util.Position; + +/** + * Controls the 2D representation of a {@code Shell} in the game, updating its position + * based on the shell's current state in the game model. The {@code Shell2DControl} class + * is responsible for translating the shell's 3D position to a 2D view position within + * the game's map view. + */ +public class Shell2DControl extends AbstractControl { + private final Shell shell; + private final MapView view; + + /** + * Constructs a new {@code Shell2DControl} to manage the 2D visualization of the given {@code Shell}. + * + * @param view The {@code MapView} used to get information about the map to display. + * @param shell The {@code Shell} being visualized. + */ + public Shell2DControl(MapView view, Shell shell){ + this.shell = shell; + this.view = view; + } + + /** + * Updates the position of the shell's 2D representation based on the shell's current + * 3D position in the game model. The position is mapped from model space to view space + * coordinates and translated to the appropriate location within the {@code MapView}. + * + * @param tpf Time per frame, representing the time elapsed since the last frame. + */ + @Override + protected void controlUpdate(float tpf) { + Vector3f shellPos = shell.getPosition(); + Position viewPos = view.modelToView(shellPos.x, shellPos.z); + spatial.setLocalTranslation(viewPos.getX() + MapView.FIELD_SIZE / 2, viewPos.getY() + MapView.FIELD_SIZE / 2, 0); + } + + @Override + protected void controlRender(RenderManager rm, ViewPort vp) { + // No rendering-specific behavior required for this control + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShellControl.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShellControl.java new file mode 100644 index 0000000..a551f6a --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShellControl.java @@ -0,0 +1,50 @@ +package pp.battleship.client.gui; + +import com.jme3.math.Vector3f; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.ViewPort; +import com.jme3.scene.control.AbstractControl; +import pp.battleship.model.Shell; + +import static pp.util.FloatMath.PI; + +/** + * Controls the 3D representation of a {@code Shell} in the game, updating its position + * and rotation based on the shell's current state in the game model. The {@code ShellControl} + * class ensures that the spatial associated with the shell is positioned and oriented correctly + * within the world. + */ +public class ShellControl extends AbstractControl { + private final Shell shell; + + /** + * Constructs a new {@code ShellControl} to manage the 3D visualization of the given {@code Shell}. + * + * @param shell The {@code Shell} being visualized and controlled. + */ + public ShellControl(Shell shell){ + super(); + this.shell = shell; + } + + /** + * Updates the 3D position and rotation of the shell based on its current state. + * Converts map coordinates to world coordinates and applies the shell's orientation. + * + * @param tpf Time per frame, representing the elapsed time since the last update. + */ + @Override + protected void controlUpdate(float tpf) { + Vector3f pos = shell.getPosition(); + Vector3f fixed = new Vector3f(pos.z + 0.5f, pos.y, pos.x + 0.5f); + fixed.setY(pos.y); + spatial.setLocalTranslation(fixed); + spatial.setLocalRotation(shell.getRotation()); + spatial.rotate(PI/2,0,0); + } + + @Override + protected void controlRender(RenderManager rm, ViewPort vp) { + // No rendering-specific behavior required for this control + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/server/BattleshipServer.java b/Projekte/battleship/client/src/main/java/pp/battleship/server/BattleshipServer.java index 1ad0a2e..d10a5d9 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/server/BattleshipServer.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/server/BattleshipServer.java @@ -18,6 +18,7 @@ import pp.battleship.BattleshipConfig; import pp.battleship.game.server.Player; import pp.battleship.game.server.ServerGameLogic; import pp.battleship.game.server.ServerSender; +import pp.battleship.message.client.AnimationFinishedMessage; import pp.battleship.message.client.ClientMessage; import pp.battleship.message.client.MapMessage; import pp.battleship.message.client.ShootMessage; @@ -115,6 +116,7 @@ public class BattleshipServer implements MessageListener, Conn Serializer.registerClass(MapMessage.class); Serializer.registerClass(ShootMessage.class); Serializer.registerClass(EffectMessage.class); + Serializer.registerClass(AnimationFinishedMessage.class); Serializer.registerClass(Battleship.class); Serializer.registerClass(IntPoint.class); Serializer.registerClass(Shot.class); @@ -123,6 +125,7 @@ public class BattleshipServer implements MessageListener, Conn private void registerListeners() { myServer.addMessageListener(this, MapMessage.class); myServer.addMessageListener(this, ShootMessage.class); + myServer.addMessageListener(this, AnimationFinishedMessage.class); myServer.addConnectionListener(this); } diff --git a/Projekte/battleship/client/src/main/resources/Models/Shell/shell.j3o b/Projekte/battleship/client/src/main/resources/Models/Shell/shell.j3o new file mode 100644 index 0000000000000000000000000000000000000000..66a97a15b6aa5e4faf770e97953386d2d4b6d77b GIT binary patch literal 155221 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

!<`;qv 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 DO>g0~ literal 0 HcmV?d00001 diff --git a/Projekte/battleship/client/src/main/resources/Models/Shell/shell_color.png b/Projekte/battleship/client/src/main/resources/Models/Shell/shell_color.png new file mode 100644 index 0000000000000000000000000000000000000000..885f84b7e124d6d160a8f6b38be6d4e541fc608c GIT binary patch literal 44224 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 OUsaW~6iekTp8Y>wWK*C3 literal 0 HcmV?d00001 diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java index 99df8d0..ec6785b 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java @@ -10,6 +10,7 @@ package pp.battleship.game.client; import pp.battleship.message.client.ShootMessage; import pp.battleship.message.server.EffectMessage; import pp.battleship.model.IntPoint; +import pp.battleship.model.Shell; import pp.battleship.model.ShipMap; import pp.battleship.notification.Sound; @@ -53,16 +54,13 @@ class BattleState extends ClientState { @Override public void receivedEffect(EffectMessage msg) { ClientGameLogic.LOGGER.log(Level.INFO, "report effect: {0}", msg); //NON-NLS - playSound(msg); + myTurn = msg.isMyTurn(); logic.setInfoText(msg.getInfoTextKey()); - affectedMap(msg).add(msg.getShot()); - if (destroyedOpponentShip(msg)) - logic.getOpponentMap().add(msg.getDestroyedShip()); - if (msg.isGameOver()) { - msg.getRemainingOpponentShips().forEach(logic.getOpponentMap()::add); - logic.setState(new GameOverState(logic)); - } + Shell shell = new Shell(msg.getShot()); + affectedMap(msg).add(shell); + logic.playSound(Sound.SHELL_FLYING); + logic.setState(new ShootingState(logic, shell, myTurn, msg)); } /** @@ -74,29 +72,4 @@ class BattleState extends ClientState { private ShipMap affectedMap(EffectMessage msg) { return msg.isOwnShot() ? logic.getOpponentMap() : logic.getOwnMap(); } - - /** - * Checks if the opponent's ship was destroyed by the player's shot. - * - * @param msg the effect message received from the server - * @return true if the shot destroyed an opponent's ship, false otherwise - */ - private boolean destroyedOpponentShip(EffectMessage msg) { - return msg.getDestroyedShip() != null && msg.isOwnShot(); - } - - /** - * Plays a sound based on the outcome of the shot. Different sounds are played for a miss, hit, - * or destruction of a ship. - * - * @param msg the effect message containing the result of the shot - */ - private void playSound(EffectMessage msg) { - if (!msg.getShot().isHit()) - logic.playSound(Sound.SPLASH); - else if (msg.getDestroyedShip() == null) - logic.playSound(Sound.EXPLOSION); - else - logic.playSound(Sound.DESTROYED_SHIP); - } } diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ShootingState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ShootingState.java new file mode 100644 index 0000000..75312b2 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ShootingState.java @@ -0,0 +1,114 @@ +package pp.battleship.game.client; + +import pp.battleship.message.client.AnimationFinishedMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.Shell; +import pp.battleship.model.ShipMap; +import pp.battleship.notification.Sound; + +/** + * Represents the shooting state of the game where a shell is fired at the opponent. + */ +public class ShootingState extends ClientState { + private float shootValue; + private final static float SHELL_SPEED = 0.3f; + private final Shell shell; + private final boolean myTurn; + private final EffectMessage msg; + + /** + * Constructs a shooting state with the specified game logic. + * + * @param logic the game logic + * @param shell the shell being shot + * @param myTurn indicates if it is the player's turn + * @param msg the effect message associated with the shooting action + */ + public ShootingState(ClientGameLogic logic, Shell shell, boolean myTurn, EffectMessage msg) { + super(logic); + this.msg = msg; + this.myTurn = myTurn; + this.shell = shell; + this.shootValue = 0; + shell.move(shootValue); + } + + @Override + public boolean showBattle() { + return true; + } + + /** + * Updates the shooting state by moving the shell based on the elapsed time. + * + * @param delta the time in seconds since the last update + */ + @Override + void update(float delta) { + super.update(delta); + if (shootValue > 1) { + endState(); + } + else { + shootValue += delta * SHELL_SPEED; + shell.move(shootValue); + } + } + + /** + * Ends the shooting state and processes the effects of the shot. + */ + private void endState() { + playSound(msg); + affectedMap(msg).add(msg.getShot()); + affectedMap(msg).remove(shell); + + if (destroyedOpponentShip(msg)) + logic.getOpponentMap().add(msg.getDestroyedShip()); + if (msg.isGameOver()) { + for (Battleship ship : msg.getRemainingOpponentShips()) { + logic.getOpponentMap().add(ship); + } + logic.setState(new GameOverState(logic)); + return; + } + logic.send(new AnimationFinishedMessage()); + logic.setState(new BattleState(logic, myTurn)); + } + + /** + * Checks if an opponent's ship was destroyed by the shot. + * + * @param msg the effect message containing the shot details + * @return true if an opponent's ship was destroyed, false otherwise + */ + private boolean destroyedOpponentShip(EffectMessage msg) { + return msg.getDestroyedShip() != null && msg.isOwnShot(); + } + + /** + * Retrieves the affected map based on whether the shot was owned by the player or the opponent. + * + * @param msg the effect message containing shot details + * @return the ShipMap that was affected by the shot + */ + private ShipMap affectedMap(EffectMessage msg) { + return msg.isOwnShot() ? logic.getOpponentMap() : logic.getOwnMap(); + } + + /** + * Plays a sound based on the outcome of the shot. Different sounds are played for a miss, hit, + * or destruction of a ship. + * + * @param msg the effect message containing the result of the shot + */ + private void playSound(EffectMessage msg) { + if (!msg.getShot().isHit()) + logic.playSound(Sound.SPLASH); + else if (msg.getDestroyedShip() == null) + logic.playSound(Sound.EXPLOSION); + else + logic.playSound(Sound.DESTROYED_SHIP); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java index b2c6dfc..9f36179 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java @@ -8,8 +8,8 @@ package pp.battleship.game.server; import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.AnimationFinishedMessage; import pp.battleship.message.client.ClientInterpreter; -import pp.battleship.message.client.ClientMessage; import pp.battleship.message.client.MapMessage; import pp.battleship.message.client.ShootMessage; import pp.battleship.message.server.EffectMessage; @@ -39,6 +39,7 @@ public class ServerGameLogic implements ClientInterpreter { private final ServerSender serverSender; private Player activePlayer; private ServerState state = ServerState.WAIT; + private Set waitPlayers = new HashSet<>(); /** * Constructs a ServerGameLogic with the specified sender and configuration. @@ -135,7 +136,6 @@ public class ServerGameLogic implements ClientInterpreter { /** * Handles the reception of a MapMessage. - * Also tests if Map is in correct format * * @param msg the received MapMessage * @param from the ID of the sender client @@ -144,59 +144,74 @@ public class ServerGameLogic implements ClientInterpreter { public void received(MapMessage msg, int from) { if (state != ServerState.SET_UP) LOGGER.log(Level.ERROR, "playerReady not allowed in {0}", state); //NON-NLS - - Player cp = getPlayerById(from); - List ships = msg.getShips(); - - if (!validateShips(ships)) { - LOGGER.log(Level.ERROR, "Invalid ship placement by player {0}", from); - send(cp, null ); - return; + else { + if (checkMap(msg.getShips())) { + playerReady(getPlayerById(from), msg.getShips()); + } + else { + LOGGER.log(Level.WARNING, "Invalid Map sent from player {0}", from); //NON-NLS + send(players.get(from), new GameDetails(config)); + } } - - playerReady(cp, ships); } - /** - * Validates a list of ships. - * Validates the list, that no ships are out of bounds or overlap with each other - * - * @param ships list of ships to validate - * @return {@code true} if all ships positions are valid, {@code false} otherwise + * Handles the reception of a AnimationFinishedMessage. + * + * @param msg the received MapMessage + * @param from the ID of the sender client */ - private boolean validateShips(List ships) { - Set occupiedPoints = new HashSet<>(); - - for (Battleship ship : ships) { - if (!isWithinBounds(ship)) { - return false; + @Override + public void received(AnimationFinishedMessage msg, int from) { + if (state != ServerState.ANIMATION) { + LOGGER.log(Level.ERROR, "animation finished not allowed in {0}", state); + } + else { + LOGGER.log(Level.DEBUG, "anim received from {0}", getPlayerById(from)); + Player player = getPlayerById(from); + if (!waitPlayers.add(player)) { + LOGGER.log(Level.ERROR, "{0} already sent animation finished", player); //NON-NLS + return; } - - for (int x = ship.getMinX(); x <= ship.getMaxX(); x++) { - for (int y = ship.getMinY(); y <= ship.getMaxY(); y++) { - IntPoint point = new IntPoint(x, y); - if (!occupiedPoints.add(point)) { - return false; - } - } + if (waitPlayers.size() == 2) { + waitPlayers = new HashSet<>(); + setState(ServerState.BATTLE); + } + } + } + + /** + * Validates the placement of battleships on the map. + * Ensures that: + *

    + *
  • The number of ships matches the configuration.
  • + *
  • Ships are within the map's boundaries.
  • + *
  • Ships do not overlap.
  • + *
+ * + * @param ships the list of {@link Battleship} objects to validate + * @return {@code true} if all ships are placed correctly; {@code false} otherwise + */ + private boolean checkMap(List ships) { + int numShips = config.getShipNums().values().stream().mapToInt(Integer::intValue).sum(); + if (numShips != ships.size()) return false; + + List occupied = new ArrayList<>(); + + for (Battleship battleship : ships) { + int x = battleship.getX(); + int y = battleship.getY(); + for (int i = 0; i < battleship.getLength(); i++) { + if (x >= 0 && x < config.getMapWidth() && y >= 0 && y < config.getMapHeight() && !occupied.contains(new IntPoint(x, y))) { + occupied.add(new IntPoint(x, y)); + x += battleship.getRot().dx(); + y += battleship.getRot().dy(); + } + else return false; } } - return true; } - - - /** - * Test if a ship is inside the map - * @param ship the ship to validate - * @return {@code true} if a ship is within bounds, {@code false} otherwise - */ - private boolean isWithinBounds(Battleship ship) { - return ship.getMinX() >= 0 && ship.getMaxX() < config.getMapWidth() && - ship.getMinY() >= 0 && ship.getMaxY() < config.getMapHeight(); - } - /** * Handles the reception of a ShootMessage. @@ -208,8 +223,11 @@ public class ServerGameLogic implements ClientInterpreter { public void received(ShootMessage msg, int from) { if (state != ServerState.BATTLE) LOGGER.log(Level.ERROR, "shoot not allowed in {0}", state); //NON-NLS - else + else{ + setState(ServerState.ANIMATION); shoot(getPlayerById(from), msg.getPosition()); + } + } /** diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java index 507aa7a..52f11e4 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java @@ -26,6 +26,11 @@ enum ServerState { */ BATTLE, + /** + * The server is waiting for all clients to finish the shoot animation. + */ + ANIMATION, + /** * The game has ended because all the ships of one player have been destroyed. */ diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java index f6e89be..c5185f4 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java @@ -7,6 +7,7 @@ package pp.battleship.game.singlemode; +import pp.battleship.message.client.AnimationFinishedMessage; import pp.battleship.message.client.ClientInterpreter; import pp.battleship.message.client.ClientMessage; import pp.battleship.message.client.MapMessage; @@ -63,6 +64,11 @@ class Copycat implements ClientInterpreter { copiedMessage = new MapMessage(msg.getShips().stream().map(Copycat::copy).toList()); } + @Override + public void received(AnimationFinishedMessage msg, int from) { + copiedMessage = msg; + } + /** * Creates a copy of the provided {@link Battleship}. * diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java index d7831a7..405a1d9 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java @@ -1,6 +1,7 @@ package pp.battleship.game.singlemode; import pp.battleship.game.client.BattleshipClient; +import pp.battleship.message.client.AnimationFinishedMessage; import pp.battleship.message.client.MapMessage; import pp.battleship.message.client.ShootMessage; import pp.battleship.message.server.EffectMessage; @@ -71,6 +72,7 @@ class RobotClient implements ServerInterpreter { * Makes the RobotClient take a shot by sending a ShootMessage with the target position. */ private void robotShot() { + connection.sendRobotMessage(new ShootMessage(getShotPosition())); } @@ -121,6 +123,7 @@ class RobotClient implements ServerInterpreter { @Override public void received(EffectMessage msg) { LOGGER.log(Level.INFO, "Received EffectMessage: {0}", msg); //NON-NLS + connection.sendRobotMessage(new AnimationFinishedMessage()); if (msg.isMyTurn()) shoot(); } diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/AnimationFinishedMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/AnimationFinishedMessage.java new file mode 100644 index 0000000..51cfb49 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/AnimationFinishedMessage.java @@ -0,0 +1,24 @@ +package pp.battleship.message.client; + +import com.jme3.network.serializing.Serializable; + +/** + * Represents a message indicating that an animation has finished on the client side. + */ +@Serializable +public class AnimationFinishedMessage extends ClientMessage { + public AnimationFinishedMessage() { + super(); + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + * @param from the connection ID from which the message was received + */ + @Override + public void accept(ClientInterpreter interpreter, int from) { + interpreter.received(this, from); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java index 6a50c1d..f1b332b 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java @@ -26,4 +26,12 @@ public interface ClientInterpreter { * @param from the connection ID from which the message was received */ void received(MapMessage msg, int from); + + /** + * Processes a received AnimationFinishedMessage. + * + * @param msg the MapMessage to be processed + * @param from the connection ID from which the message was received + */ + void received(AnimationFinishedMessage msg, int from); } diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Shell.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Shell.java new file mode 100644 index 0000000..6888cfe --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Shell.java @@ -0,0 +1,125 @@ +package pp.battleship.model; + +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; + +/** + * The {@code Shell} class represents a projectile fired by a ship in the Battleship game. + * It models the position and rotation of the projectile and allows for its movement along + * a Bezier curve. + */ +public class Shell implements Item { + /** + * Initial position of the shell + */ + private final static Vector3f INIT_POS = new Vector3f(-3, 7, -3); + /** + * The overshot difference vector used to get a shallower flight path + */ + private final static Vector3f OVER_SHOT_DIFF = new Vector3f(-1, -1, -1); + // Target shot position + private final Vector3f shotPosition; + // Position on top of shotPosition used for Bezier curve + private final Vector3f overShotPosition; + // Current position of the shell + private Vector3f position; + // Current rotation of the shell + private final Quaternion rotation; + + /** + * Constructs a new {@code Shell} object using the given {@code Shot} target. + * The initial position, target position, and overshot position are calculated. + * + * @param shot The target {@code Shot} object containing the destination coordinates. + */ + public Shell(Shot shot) { + this.shotPosition = new Vector3f(shot.getX(), 0, shot.getY()); + this.overShotPosition = new Vector3f(shotPosition.x, INIT_POS.y, shotPosition.z).add(OVER_SHOT_DIFF); + this.position = INIT_POS; + this.rotation = new Quaternion(); + } + + /** + * Gets the current position of the shell. + * + * @return The current position as a {@code Vector3f}. + */ + public Vector3f getPosition() { + return this.position; + } + + /** + * Gets the current rotation of the shell. + * + * @return The current rotation as a {@code Quaternion}. + */ + public Quaternion getRotation() { + return this.rotation; + } + + /** + * Moves the shell along a Bezier curve based on the given time factor {@code t}. + * The position and rotation of the shell are updated. + * + * @param t The time factor between 0 and 1, representing the progress of the shell's flight. + */ + public void move(float t) { + if (t > 1f) t = 1f; + Vector3f newPosition = bezInt(INIT_POS, overShotPosition, shotPosition, t); + updateRotation(position, newPosition); + this.position = newPosition; + } + + /** + * Performs a quadratic Bezier interpolation between three points based on the time factor {@code t}. + * + * @param p1 The start position. + * @param p2 The overshot position. + * @param p3 The target position. + * @param t The time factor for interpolation. + * @return The interpolated position as a {@code Vector3f}. + */ + private Vector3f bezInt(Vector3f p1, Vector3f p2, Vector3f p3, float t) { + Vector3f inA = linInt(p1, p2, t); + Vector3f inB = linInt(p2, p3, t); + return linInt(inA, inB, t); + } + + /** + * Performs linear interpolation between two points {@code p1} and {@code p2} based on the time factor {@code t}. + * + * @param p1 The start position. + * @param p2 The end position. + * @param t The time factor for interpolation. + * @return The interpolated position as a {@code Vector3f}. + */ + private Vector3f linInt(Vector3f p1, Vector3f p2, float t) { + float x = p1.getX() + t * (p2.getX() - p1.getX()); + float y = p1.getY() + t * (p2.getY() - p1.getY()); + float z = p1.getZ() + t * (p2.getZ() - p1.getZ()); + return new Vector3f(x, y, z); + } + + /** + * Updates the rotation of the shell to face the new position along its flight path. + * + * @param oldPos The previous position of the shell. + * @param newPos The new position of the shell. + */ + private void updateRotation(Vector3f oldPos, Vector3f newPos) { + Vector3f direction = newPos.subtract(oldPos).normalize(); + if (direction.lengthSquared() > 0) { + this.rotation.lookAt(direction, Vector3f.UNIT_Y); + } + } + + @Override + public T accept(Visitor visitor) { + return visitor.visit(this); + } + + @Override + public void accept(VoidVisitor visitor) { + visitor.visit(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java index 5a16278..773e7ff 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java @@ -78,6 +78,15 @@ public class ShipMap { addItem(ship); } + /** + * Registers a shot on the map and triggers an item addition event. + * + * @param shell the shell to be registered on the map + */ + public void add(Shell shell) { + addItem(shell); + } + /** * Registers a shot on the map, updates the state of the affected ship (if any), * and triggers an item addition event. diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java index f490451..b8e1954 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java @@ -28,4 +28,12 @@ public interface Visitor { * @return the result of visiting the Battleship element */ T visit(Battleship ship); + + /** + * Visits a Shell element + * + * @param shell the Shell element to visit + * @return the result of visitung the Battleship element + */ + T visit(Shell shell); } diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java index 871c063..24c78b4 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java @@ -25,4 +25,10 @@ public interface VoidVisitor { * @param ship the Battleship element to visit */ void visit(Battleship ship); + + /** + * Visits a Shell element + * @param shell the Shell element to visit + */ + void visit(Shell shell); } diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java index d82ab69..933c1d4 100644 --- a/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java @@ -22,5 +22,9 @@ public enum Sound { /** * Sound of a ship being destroyed. */ - DESTROYED_SHIP + DESTROYED_SHIP, + /** + * Sound of a shell flying + */ + SHELL_FLYING } diff --git a/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java b/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java index 1ad0a2e..d10a5d9 100644 --- a/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java +++ b/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java @@ -18,6 +18,7 @@ import pp.battleship.BattleshipConfig; import pp.battleship.game.server.Player; import pp.battleship.game.server.ServerGameLogic; import pp.battleship.game.server.ServerSender; +import pp.battleship.message.client.AnimationFinishedMessage; import pp.battleship.message.client.ClientMessage; import pp.battleship.message.client.MapMessage; import pp.battleship.message.client.ShootMessage; @@ -115,6 +116,7 @@ public class BattleshipServer implements MessageListener, Conn Serializer.registerClass(MapMessage.class); Serializer.registerClass(ShootMessage.class); Serializer.registerClass(EffectMessage.class); + Serializer.registerClass(AnimationFinishedMessage.class); Serializer.registerClass(Battleship.class); Serializer.registerClass(IntPoint.class); Serializer.registerClass(Shot.class); @@ -123,6 +125,7 @@ public class BattleshipServer implements MessageListener, Conn private void registerListeners() { myServer.addMessageListener(this, MapMessage.class); myServer.addMessageListener(this, ShootMessage.class); + myServer.addMessageListener(this, AnimationFinishedMessage.class); myServer.addConnectionListener(this); }