Skip to content

Commit

Permalink
+ player sounds
Browse files Browse the repository at this point in the history
  • Loading branch information
milanvanzanten committed Jul 2, 2015
1 parent 718d0e1 commit 6c4698e
Show file tree
Hide file tree
Showing 6 changed files with 180 additions and 20 deletions.
7 changes: 7 additions & 0 deletions src/client/display/GameFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 + ""));
Expand All @@ -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) + ""));
}
Expand All @@ -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) + "",
Expand Down
29 changes: 16 additions & 13 deletions src/client/logic/ClientMatch.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
9 changes: 7 additions & 2 deletions src/client/logic/PitchMouseLogic.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package client.logic;

import client.display.GameCanvas;
import client.sound.PlayerSound;
import gameLogic.*;
import gameLogic.rules.RuleThrow;
import util.ResourceManager;
Expand Down Expand Up @@ -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) {
Expand All @@ -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()
Expand Down
46 changes: 46 additions & 0 deletions src/client/sound/PlayerSound.java
Original file line number Diff line number Diff line change
@@ -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());
}

}
71 changes: 70 additions & 1 deletion src/gameLogic/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;

Expand Down Expand Up @@ -44,6 +46,20 @@ public class Player {
* The images of the player looking left (<code>spriteL</code>) and looking right (<code>spriteR</code>).
*/
private BufferedImage spriteR, spriteL;
/**
* The sounds of this player:
* <ul>
* <li><code><b>soundPickUp</b></code> – played when this player is picked up and dragged.</li>
* <li><code><b>soundProned</b></code> – played when this player is proned.</li>
* <li><code><b>soundStunned</b></code> – played when this player is stunned.</li>
* <li><code><b>soundInjured</b></code> – played when this player is injured.</li>
* <li><code><b>soundBlitz</b></code> – played when this player blitzes.</li>
* <li><code><b>soundBlock</b></code> – played when this player blocks.</li>
* <li><code><b>soundPass</b></code> – played when this player passes.</li>
* <li><code><b>soundDied</b></code> – played when this player dies.</li>
* </ul>
*/
private Clip soundPickUp, soundProned, soundStunned, soundInjured, soundKO, soundBlitz, soundBlock, soundPass, soundDied;
/**
* A hash map for scripts to store data in. Is not used by standard players.
*/
Expand Down Expand Up @@ -71,8 +87,22 @@ public Player(String name, TeamManager manager) {
private Player(Player p, Team team) {
this.manager = p.manager;
setName(p.getName());

// images
setSpriteR(p.getSpriteR());
setSpriteL(p.getSpriteL());

// sounds
setSoundPickUp(p.getSoundPickUp());
setSoundProned(p.getSoundProned());
setSoundStunned(p.getSoundStunned());
setSoundInjured(p.getSoundInjured());
setSoundKO(p.getSoundKO());
setSoundBlitz(p.getSoundBlitz());
setSoundBlock(p.getSoundBlock());
setSoundPass(p.getSoundPass());
setSoundDied(p.getSoundDied());

invokeAdjustTeam(team);
invokeSetGe(DEFAULT_GE);
invokeSetRs(DEFAULT_RS);
Expand Down Expand Up @@ -223,6 +253,25 @@ public void invokeSetPlayerCondition(PlayerCondition playerCondition) {
Object playerConditionFromScript = manager.invokeFunction("setPlayerCondition", this, playerCondition);
if(playerConditionFromScript != null) this.playerCondition = (PlayerCondition) playerConditionFromScript;

switch(invokeGetPlayerCondition()) {
case PRONE:
if(playerCondition != PlayerCondition.STUNNED) // don't play sound if player was unstunned
PlayerSound.proned(this);
break;
case STUNNED:
PlayerSound.stunned(this);
break;
case INJURED:
PlayerSound.injured(this);
break;
case KO:
PlayerSound.ko(this);
break;
case DEAD:
PlayerSound.died(this);
break;
}

if(isHoldingBall()){
if(invokeGetPlayerCondition() != PlayerCondition.FINE){
invokeSetIsHoldingBall(false);
Expand Down Expand Up @@ -479,7 +528,27 @@ public void setSpriteL(BufferedImage spriteL) {
this.spriteL = spriteL;
}

public void setId() {
// SOUNDS
public Clip getSoundPickUp() { return soundPickUp; }
public void setSoundPickUp(Clip soundPickUp) { this.soundPickUp = soundPickUp; }
public Clip getSoundProned() { return soundProned; }
public void setSoundProned(Clip soundProned) { this.soundProned = soundProned; }
public Clip getSoundStunned() { return soundStunned; }
public void setSoundStunned(Clip soundStunned) { this.soundStunned = soundStunned; }
public Clip getSoundInjured() { return soundInjured; }
public void setSoundInjured(Clip soundInjured) { this.soundInjured = soundInjured; }
public Clip getSoundKO() { return soundKO; }
public void setSoundKO(Clip soundKO) { this.soundKO = soundKO; }
public Clip getSoundBlitz() { return soundBlitz; }
public void setSoundBlitz(Clip soundBlitz) { this.soundBlitz = soundBlitz; }
public Clip getSoundBlock() { return soundBlock; }
public void setSoundBlock(Clip soundBlock) { this.soundBlock = soundBlock; }
public Clip getSoundPass() { return soundPass; }
public void setSoundPass(Clip soundPass) { this.soundPass = soundPass; }
public Clip getSoundDied() { return soundDied; }
public void setSoundDied(Clip soundDied) { this.soundDied = soundDied; }

public void setId() {
this.id = getTeam().countUpIdCounter();
}

Expand Down
38 changes: 34 additions & 4 deletions src/gameLogic/TeamManager.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gameLogic;

import client.sound.PlayerSound;
import server.Server;
import util.ResourceManager;
import util.SBApplication;
Expand All @@ -9,6 +10,10 @@
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
Expand Down Expand Up @@ -99,6 +104,7 @@ private void setUp(File teamsDir) {
try {

HashMap<String, BufferedImage> teamImages = new HashMap<String, BufferedImage>();
HashMap<String, Clip> teamSounds = new HashMap<String, Clip>();

// handle team files
if(teamsDir != null) {
Expand All @@ -125,11 +131,24 @@ private void setUp(File teamsDir) {
} else if (filename.toLowerCase().endsWith(".png")) { // is image

try {

String imageName = filename.substring(0, filename.length() - ".png".length());
teamImages.put(imageName, ImageIO.read(teamFile));
} catch (IOException e) {
getParent().log(Level.WARNING, "IOException while reading team image " + teamFile.getName() + ".");
}

} catch (IOException e) { getParent().log(Level.WARNING, "IOException while reading team image " + teamFile.getName() + "."); }

} else if (filename.toLowerCase().endsWith(".wav")) { // is sound

try {

String soundName = filename.substring(0, filename.length() - ".wav".length());
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(teamFile));
teamSounds.put(soundName, clip);

} catch(LineUnavailableException e) { getParent().logStackTrace(e);
} catch(UnsupportedAudioFileException e) { getParent().log(Level.WARNING, "Unsupported Audio File " + teamFile.getName() + ".");
} catch(IOException e) { getParent().log(Level.WARNING, "IOException while reading team sound " + teamFile.getName() + "."); }

}
}
Expand All @@ -138,7 +157,7 @@ private void setUp(File teamsDir) {
}
}

// handle player images
// handle player images and sounds
int w = ResourceManager.IMAGE_WIDTH, h = ResourceManager.IMAGE_HEIGHT;
for (Team team : teamBlueprints) {
for (Player player : team.availablePlayers) {
Expand All @@ -157,6 +176,17 @@ private void setUp(File teamsDir) {
player.setSpriteL(imageL);
} else player.setSpriteL(ResourceManager.IMAGE_DEFAULT_PLAYER_L);

// get sounds
player.setSoundPickUp(teamSounds.get(player.getName() + " Pick Up"));
player.setSoundProned(teamSounds.get(player.getName() + " Proned"));
player.setSoundStunned(teamSounds.get(player.getName() + " Stunned"));
player.setSoundInjured(teamSounds.get(player.getName() + " Injured"));
player.setSoundKO(teamSounds.get(player.getName() + " KO"));
player.setSoundBlitz(teamSounds.get(player.getName() + " Blitz"));
player.setSoundBlock(teamSounds.get(player.getName() + " Block"));
player.setSoundPass(teamSounds.get(player.getName() + " Pass"));
player.setSoundDied(teamSounds.get(player.getName() + " Died"));

}
}
} else {
Expand Down

0 comments on commit 6c4698e

Please sign in to comment.