diff --git a/src/client/display/GameFrame.java b/src/client/display/GameFrame.java
index 05ad867..45fae75 100644
--- a/src/client/display/GameFrame.java
+++ b/src/client/display/GameFrame.java
@@ -3,6 +3,7 @@
import GUI.SBFrame;
import client.Client;
import client.logic.DrawingPath;
+import client.sound.PlayerSound;
import gameLogic.Pitch;
import gameLogic.PitchField;
import gameLogic.Player;
@@ -292,6 +293,8 @@ public void blitzOrBlock(DrawingPath path, PitchField destination, Player actor)
if(destination.getPlayer() != null) {
SBProtocolParameterArray params;
if (path.getPath().size() > 1) { // is blitz
+ PlayerSound.blitz(actor);
+
params = new SBProtocolParameterArray(SBProtocolMessage.ACTIO_MOVE, (actor.getId() - 1) + "");
for (PitchField field : path.getPath()) {
params.addParameter(new SBProtocolParameter((int) field.getPos().x + ""));
@@ -300,6 +303,8 @@ public void blitzOrBlock(DrawingPath path, PitchField destination, Player actor)
params.addParameter(new SBProtocolParameter((int) destination.getPos().x + ""));
params.addParameter(new SBProtocolParameter((int) destination.getPos().y + ""));
} else { // is block
+ PlayerSound.block(actor);
+
params = new SBProtocolParameterArray(SBProtocolMessage.ACTIO_BLCK, (actor.getId() - 1) + "");
params.addParameter(new SBProtocolParameter((destination.getPlayer().getId() - 1) + ""));
}
@@ -315,6 +320,8 @@ public void blitzOrBlock(DrawingPath path, PitchField destination, Player actor)
public void throwBall(PitchField throwDestination, Player thrower) {
if(throwDestination != null && thrower != null) {
try {
+ PlayerSound.pass(thrower);
+
SBProtocolParameterArray params = new SBProtocolParameterArray(
"THRW",
(thrower.getId() - 1) + "",
diff --git a/src/client/logic/ClientMatch.java b/src/client/logic/ClientMatch.java
index 5870ece..ee03695 100644
--- a/src/client/logic/ClientMatch.java
+++ b/src/client/logic/ClientMatch.java
@@ -608,26 +608,29 @@ private void adjustPlayer(SBProtocolMessage message){
if(playerIndex < 0 || playerIndex >= teams[actingUserIndex].getPlayers().size() || playerPosX < -1 || playerPosX > 25 || playerPosY < -1 || playerPosY > 14){
return;
}
- teams[actingUserIndex].getPlayers().get(playerIndex).setName(message.getParameterContent(3));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetBe(Integer.parseInt(message.getParameterContent(4)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetSt(Integer.parseInt(message.getParameterContent(5)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetGe(Integer.parseInt(message.getParameterContent(6)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetRs(Integer.parseInt(message.getParameterContent(7)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetRemainingBe(Integer.parseInt(message.getParameterContent(8)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetPlayerCondition(PlayerCondition.valueOf(message.getParameterContent(9)));
+ Player player = teams[actingUserIndex].getPlayers().get(playerIndex);
+ player.setName(message.getParameterContent(3));
+ player.invokeSetBe(Integer.parseInt(message.getParameterContent(4)));
+ player.invokeSetSt(Integer.parseInt(message.getParameterContent(5)));
+ player.invokeSetGe(Integer.parseInt(message.getParameterContent(6)));
+ player.invokeSetRs(Integer.parseInt(message.getParameterContent(7)));
+ player.invokeSetRemainingBe(Integer.parseInt(message.getParameterContent(8)));
+ PlayerCondition newCondition = PlayerCondition.valueOf(message.getParameterContent(9));
+ if(player.invokeGetPlayerCondition() != newCondition) // only set new condition if it changed to avoid playing sounds multiple times
+ player.invokeSetPlayerCondition(newCondition);
try{
if(playerPosX == -1 && playerPosY == -1){
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeClearPosition();
+ player.invokeClearPosition();
}else{
- teams[actingUserIndex].getPlayers().get(playerIndex).getPosition().adjustPlayer(null);
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeAdjustPosition(getPitch().getFields()[playerPosX][playerPosY]);
+ player.getPosition().adjustPlayer(null);
+ player.invokeAdjustPosition(getPitch().getFields()[playerPosX][playerPosY]);
}
}catch(NullPointerException e){
getClient().logStackTrace(e);
}
- teams[actingUserIndex].getPlayers().get(playerIndex).getPosition().adjustPlayer(teams[actingUserIndex].getPlayers().get(playerIndex));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetIsHoldingBall(Boolean.parseBoolean(message.getParameterContent(12)));
- teams[actingUserIndex].getPlayers().get(playerIndex).invokeSetRedCard(Boolean.parseBoolean(message.getParameterContent(13)));
+ player.getPosition().adjustPlayer(player);
+ player.invokeSetIsHoldingBall(Boolean.parseBoolean(message.getParameterContent(12)));
+ player.invokeSetRedCard(Boolean.parseBoolean(message.getParameterContent(13)));
}catch(NumberFormatException e){
returnFailureMessage(message, SBProtocolMessage.FAILD_RECEIVED_WRONG_GAME_DATA);
}
diff --git a/src/client/logic/PitchMouseLogic.java b/src/client/logic/PitchMouseLogic.java
index cc281d0..7329750 100644
--- a/src/client/logic/PitchMouseLogic.java
+++ b/src/client/logic/PitchMouseLogic.java
@@ -1,6 +1,7 @@
package client.logic;
import client.display.GameCanvas;
+import client.sound.PlayerSound;
import gameLogic.*;
import gameLogic.rules.RuleThrow;
import util.ResourceManager;
@@ -785,8 +786,10 @@ && isHoveringOwnPlayer()
&& getGameCanvas().canSetUp()
&& !getGameCanvas().hasSetUpTeam()) { // is hovering own player and can set up team
if((!getGameCanvas().getPlayersOnBench().contains(getHoveringPlayer()) || getGamePhase() == 1)
- && getHoveringPlayer() != null && !getHoveringPlayer().getRedCard())
+ && getHoveringPlayer() != null && !getHoveringPlayer().getRedCard()) {
setMovingPlayer(getHoveringPlayer());
+ PlayerSound.pickUp(getHoveringPlayer());
+ }
}
} else if(getGamePhase() >= 3) {
@@ -798,8 +801,10 @@ && getHoveringPlayer() != null && !getHoveringPlayer().getRedCard())
if (e.getButton() == MouseEvent.BUTTON1 && !getGameCanvas().isShiftPressed()) { // left mouse button, move
if(!getGameCanvas().getPlayersOnBench().contains(getHoveringPlayer()) || getGamePhase() == 1)
if(!getGameCanvas().isChoosingSpecialRule())
- if(getHoveringPlayer().invokeGetRemainingBe() > 0)
+ if(getHoveringPlayer().invokeGetRemainingBe() > 0) {
setMovingPlayer(getHoveringPlayer());
+ PlayerSound.pickUp(getHoveringPlayer());
+ }
addPathElement();
} else if (e.getButton() == MouseEvent.BUTTON3 || e.getButton() == MouseEvent.BUTTON2 || getGameCanvas().isShiftPressed()) { // right mouse button throw
if (getHoveringPlayer().isHoldingBall()
diff --git a/src/client/sound/PlayerSound.java b/src/client/sound/PlayerSound.java
new file mode 100644
index 0000000..9587c17
--- /dev/null
+++ b/src/client/sound/PlayerSound.java
@@ -0,0 +1,46 @@
+package client.sound;
+
+import gameLogic.Player;
+
+/**
+ * Class handling the sounds players make
+ */
+public class PlayerSound {
+
+ public static void pickUp(Player player) {
+ SoundManager.play(player.getSoundPickUp());
+ }
+
+ public static void proned(Player player) {
+ SoundManager.play(player.getSoundProned());
+ }
+
+ public static void stunned(Player player) {
+ SoundManager.play(player.getSoundStunned());
+ }
+
+ public static void injured(Player player) {
+ SoundManager.play(player.getSoundInjured());
+ }
+
+ public static void ko(Player player) {
+ SoundManager.play(player.getSoundKO());
+ }
+
+ public static void blitz(Player player) {
+ SoundManager.play(player.getSoundBlitz());
+ }
+
+ public static void block(Player player) {
+ SoundManager.play(player.getSoundBlock());
+ }
+
+ public static void pass(Player player) {
+ SoundManager.play(player.getSoundPass());
+ }
+
+ public static void died(Player player) {
+ SoundManager.play(player.getSoundDied());
+ }
+
+}
diff --git a/src/gameLogic/Player.java b/src/gameLogic/Player.java
index 5cc9bf4..63968d1 100644
--- a/src/gameLogic/Player.java
+++ b/src/gameLogic/Player.java
@@ -5,8 +5,10 @@
import java.util.Vector;
import java.util.logging.Level;
+import javax.sound.sampled.Clip;
import javax.vecmath.*;
+import client.sound.PlayerSound;
import server.logic.User;
import gameLogic.rules.*;
@@ -44,6 +46,20 @@ public class Player {
* The images of the player looking left (spriteL
) and looking right (spriteR
).
*/
private BufferedImage spriteR, spriteL;
+ /**
+ * The sounds of this player:
+ *
soundPickUp
– played when this player is picked up and dragged.soundProned
– played when this player is proned.soundStunned
– played when this player is stunned.soundInjured
– played when this player is injured.soundBlitz
– played when this player blitzes.soundBlock
– played when this player blocks.soundPass
– played when this player passes.soundDied
– played when this player dies.