Implemented background sounds, bells and music
This commit is contained in:
parent
635c758669
commit
1042c331c2
@ -2,10 +2,14 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Random;
|
||||||
import javafx.scene.media.*;
|
import javafx.scene.media.*;
|
||||||
|
|
||||||
|
|
||||||
public class Sound {
|
public class Sound {
|
||||||
|
|
||||||
|
static final double defaultvolume = 0.7;
|
||||||
|
|
||||||
static URL backgroundSoundsURL = Sound.class.getResource("sounds/tracknoise.wav");
|
static URL backgroundSoundsURL = Sound.class.getResource("sounds/tracknoise.wav");
|
||||||
static AudioClip backgroundSounds = new AudioClip(backgroundSoundsURL.toString());
|
static AudioClip backgroundSounds = new AudioClip(backgroundSoundsURL.toString());
|
||||||
static boolean playingBackgroundSounds = false;
|
static boolean playingBackgroundSounds = false;
|
||||||
@ -46,15 +50,15 @@ public class Sound {
|
|||||||
static URL voteforhumanURL = Sound.class.getResource("sounds/voteforhuman.wav");
|
static URL voteforhumanURL = Sound.class.getResource("sounds/voteforhuman.wav");
|
||||||
static AudioClip voteforhuman = new AudioClip(voteforhumanURL.toString());
|
static AudioClip voteforhuman = new AudioClip(voteforhumanURL.toString());
|
||||||
|
|
||||||
|
static Random random = new Random();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
//startPlayingBackgroundSounds();
|
startPlayingBackgroundSounds();
|
||||||
|
|
||||||
ghost();
|
ghost();
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -66,37 +70,66 @@ public class Sound {
|
|||||||
public static void startPlayingBackgroundSounds() {
|
public static void startPlayingBackgroundSounds() {
|
||||||
playingBackgroundSounds = true;
|
playingBackgroundSounds = true;
|
||||||
backgroundSounds.setCycleCount(AudioClip.INDEFINITE);
|
backgroundSounds.setCycleCount(AudioClip.INDEFINITE);
|
||||||
backgroundSounds.play();
|
backgroundSounds.play(defaultvolume, 0.0, 1.0, 0.0, 6 );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bell() {
|
public static void bell() {
|
||||||
bell.play();
|
bell.play(defaultvolume - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startDaynoises() {
|
public static void startDaynoises() {
|
||||||
daynoises.setCycleCount(AudioClip.INDEFINITE);
|
daynoises.setCycleCount(AudioClip.INDEFINITE);
|
||||||
daynoises.play();
|
daynoises.play(defaultvolume - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void stopDaynoises() {
|
public static void stopDaynoises() {
|
||||||
daynoises.stop();
|
daynoises.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void startNightnoises() {
|
||||||
|
nightnoises.setCycleCount(AudioClip.INDEFINITE);
|
||||||
|
nightnoises.play(defaultvolume - 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stopNightnoises() {
|
||||||
|
nightnoises.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void gameoverghosts() { gameoverghosts.play(defaultvolume); }
|
||||||
|
|
||||||
|
public static void gameoverhumans() { gameoverhumans.play(defaultvolume); }
|
||||||
|
|
||||||
|
public static void musicday() {
|
||||||
|
musicday.play(defaultvolume);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stopmusicday() {
|
||||||
|
//todo: gentle fade out
|
||||||
|
musicday.stop();
|
||||||
|
}
|
||||||
|
|
||||||
public static void ghost() {
|
public static void ghost() {
|
||||||
double playbackspeed = (Math.random() / 5.0) + 0.9;
|
double playbackspeed = (Math.random() / 5.0) + 0.9;
|
||||||
System.out.println(playbackspeed);
|
int ghostsoundnr = random.nextInt(4) + 1;
|
||||||
ghost01.play(0.5, 0.0, playbackspeed, 0.0, 5);
|
System.out.println(ghostsoundnr);
|
||||||
|
AudioClip ghost;
|
||||||
|
switch (ghostsoundnr) {
|
||||||
|
case 1:
|
||||||
|
ghost = ghost01;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ghost = ghost02;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ghost = ghost03;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ghost = ghost04;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ghost.play(defaultvolume, 0.0, playbackspeed, 0.0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game;
|
|||||||
|
|
||||||
import static javafx.scene.AccessibleRole.PARENT;
|
import static javafx.scene.AccessibleRole.PARENT;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.Sound;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.Sprites;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.Sprites;
|
||||||
@ -36,6 +37,9 @@ public class GameController implements Initializable {
|
|||||||
|
|
||||||
public static final Logger LOGGER = LogManager.getLogger(GameController.class);
|
public static final Logger LOGGER = LogManager.getLogger(GameController.class);
|
||||||
public static final BudaLogConfig l = new BudaLogConfig(LOGGER);
|
public static final BudaLogConfig l = new BudaLogConfig(LOGGER);
|
||||||
|
static boolean justRangBell = false; //used to track if the bell has been rung recently
|
||||||
|
static final int minimumBellTime = 1000; //minimal time that has to pass between bells, in ms
|
||||||
|
static boolean playingDayNoises = true; //true if playing day noises, false if playing night noises
|
||||||
|
|
||||||
private static ClientModel client;
|
private static ClientModel client;
|
||||||
|
|
||||||
@ -135,8 +139,20 @@ public class GameController implements Initializable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
try{
|
try{
|
||||||
if(gameStateModel.getDayClone()) {
|
if(gameStateModel.getDayClone()) {
|
||||||
|
if (!playingDayNoises) {
|
||||||
|
Sound.startDaynoises();
|
||||||
|
Sound.musicday();
|
||||||
|
Sound.stopNightnoises();
|
||||||
|
playingDayNoises = true;
|
||||||
|
}
|
||||||
Sprites.updateDayRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
Sprites.updateDayRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
||||||
} else {
|
} else {
|
||||||
|
if (playingDayNoises) {
|
||||||
|
Sound.startNightnoises();
|
||||||
|
Sound.stopmusicday();
|
||||||
|
Sound.stopDaynoises();
|
||||||
|
playingDayNoises = false;
|
||||||
|
}
|
||||||
Sprites.updateNightRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
Sprites.updateNightRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
||||||
}
|
}
|
||||||
/*room0ImageView.setImage(Sprites.getARoom(0));
|
/*room0ImageView.setImage(Sprites.getARoom(0));
|
||||||
@ -518,6 +534,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[0]) {
|
if(!gameStateModel.getKickedOff()[0]) {
|
||||||
Animation bell = new BellAnimation(noiseImage5, bells);
|
Animation bell = new BellAnimation(noiseImage5, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -539,6 +556,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[1]) {
|
if(!gameStateModel.getKickedOff()[1]) {
|
||||||
Animation bell = new BellAnimation(noiseImage4, bells);
|
Animation bell = new BellAnimation(noiseImage4, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -559,6 +577,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[2]) {
|
if(!gameStateModel.getKickedOff()[2]) {
|
||||||
Animation bell = new BellAnimation(noiseImage3, bells);
|
Animation bell = new BellAnimation(noiseImage3, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -579,6 +598,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[3]) {
|
if(!gameStateModel.getKickedOff()[3]) {
|
||||||
Animation bell = new BellAnimation(noiseImage2, bells);
|
Animation bell = new BellAnimation(noiseImage2, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -599,6 +619,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[4]) {
|
if(!gameStateModel.getKickedOff()[4]) {
|
||||||
Animation bell = new BellAnimation(noiseImage1, bells);
|
Animation bell = new BellAnimation(noiseImage1, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -619,6 +640,7 @@ public class GameController implements Initializable {
|
|||||||
if(!gameStateModel.getKickedOff()[5]) {
|
if(!gameStateModel.getKickedOff()[5]) {
|
||||||
Animation bell = new BellAnimation(noiseImage0, bells);
|
Animation bell = new BellAnimation(noiseImage0, bells);
|
||||||
bell.play();
|
bell.play();
|
||||||
|
ringBellSound();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -658,4 +680,32 @@ public class GameController implements Initializable {
|
|||||||
noiseButton.toFront();
|
noiseButton.toFront();
|
||||||
ChatApp.setGameController(this);
|
ChatApp.setGameController(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plays bell sound, but only if it hasn't been played recently, to avoid artefacts due to
|
||||||
|
* overlapping sounds
|
||||||
|
*/
|
||||||
|
public static void ringBellSound() {
|
||||||
|
if (!justRangBell) {
|
||||||
|
justRangBell = true;
|
||||||
|
Sound.bell();
|
||||||
|
try {
|
||||||
|
System.out.println(justRangBell);
|
||||||
|
Thread.sleep(minimumBellTime);
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Thread.sleep(minimumBellTime);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
justRangBell = false;
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user