package de.fau.cs.mad.fly.sound;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.Disposable;
import de.fau.cs.mad.fly.profile.PlayerProfileManager;
import de.fau.cs.mad.fly.settings.ISetting;
import de.fau.cs.mad.fly.settings.SettingManager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Created by tschaei on 29.09.14.
*/
public class AudioManager implements Disposable {
public static enum Sounds { CRASH, GATE_PASSED, PICKUP };
private final String CRASH_SOUND = "sounds/crash.wav";
private final String GATE_PASSED_SOUND = "sounds/gatepassed.wav";
private final String PICKUP = "sounds/pickup.wav";
private Map<Sounds, Playable> soundMap = new HashMap<Sounds, Playable>();
float volume = 1.0f;
public AudioManager() {
soundMap.put(Sounds.CRASH, create(CRASH_SOUND, 1.0f, false, Types.Sound));
soundMap.put(Sounds.GATE_PASSED, create(GATE_PASSED_SOUND, 1.0f, false, Types.Sound));
soundMap.put(Sounds.PICKUP, create(PICKUP, 1.0f, false, Types.Sound));
}
public Playable get(Sounds sound) {
return soundMap.get(sound);
}
public Playback play(Sounds sound) {
return get(sound).play();
}
public Playback playSound(Sounds sound) {
return play(sound);
}
public Collection<Playable> allSounds() {
return soundMap.values();
}
@Override
public void dispose() {
for(Map.Entry<Sounds, Playable> entry : soundMap.entrySet())
entry.getValue().dispose();
}
private static enum Types { Sound, Music };
private Playable create(FileHandle fileHandle, float defaultVolume, boolean defaultLooping, Types type) {
switch( type ) {
case Music:
return new MusicPlayable(Gdx.audio.newMusic(fileHandle), defaultVolume, defaultLooping, this);
default:
return new SoundPlayable(Gdx.audio.newSound(fileHandle), defaultVolume, defaultLooping, this);
}
}
private Playable create(String file, float defaultVolume, boolean defaultLooping, Types type) {
return create(Gdx.files.internal(file), defaultVolume, defaultLooping, type);
}
public void use(final SettingManager settings) {
volume = settings.getFloat(SettingManager.MASTER_VOLUME);
SettingManager.SettingListener listener = new SettingManager.SettingListener() {
@Override
public void settingChanged(String id, Object value) {
volume = settings.getFloat(SettingManager.MASTER_VOLUME);
}
};
settings.addListener(SettingManager.MASTER_VOLUME, listener);
}
public void mute() {
volume = 0.0f;
}
public void unmute() {
volume = 1.0f;
}
}