package games.strategy.sound;
import java.util.Collection;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.framework.LocalPlayers;
/**
* A sound channel allowing sounds normally played on the server (for example: in a delegate, such as a the move
* delegate) to also be played
* on clients.
*/
public class DefaultSoundChannel implements ISound {
private final LocalPlayers localPlayers;
public DefaultSoundChannel(final LocalPlayers localPlayers) {
this.localPlayers = localPlayers;
}
@Override
public void playSoundForAll(final String clipName, final PlayerID playerID) {
ClipPlayer.play(clipName, playerID);
}
@Override
public void playSoundToPlayers(final String clipName,
final Collection<PlayerID> playersToSendTo, final Collection<PlayerID> butNotThesePlayers,
final boolean includeObservers) {
if (playersToSendTo == null || playersToSendTo.isEmpty()) {
return;
}
if (butNotThesePlayers != null) {
for (final PlayerID p : butNotThesePlayers) {
if (localPlayers.playing(p)) {
return;
}
}
}
boolean isPlaying = false;
for (final PlayerID p : playersToSendTo) {
if (localPlayers.playing(p)) {
isPlaying = true;
break;
}
}
if (includeObservers && localPlayers.getLocalPlayers().isEmpty()) {
isPlaying = true;
}
if (isPlaying) {
ClipPlayer.play(clipName);
}
}
}