added pausing and seeking for sounds, and music tracking, and volume levels

This commit is contained in:
Alli
2009-12-23 20:45:51 +13:00
parent 11698e97c7
commit b81fbca280

View File

@@ -9,6 +9,11 @@ namespace OpenRa.Game
{ {
static ISoundEngine soundEngine; static ISoundEngine soundEngine;
static Cache<string, ISoundSource> sounds; static Cache<string, ISoundSource> sounds;
static ISound music;
//TODO: read these from somewhere?
static float soundVolume;
static float musicVolume;
static ISoundSource LoadSound(string filename) static ISoundSource LoadSound(string filename)
{ {
@@ -27,6 +32,9 @@ namespace OpenRa.Game
{ {
soundEngine = new ISoundEngine(); soundEngine = new ISoundEngine();
sounds = new Cache<string, ISoundSource>(LoadSound); sounds = new Cache<string, ISoundSource>(LoadSound);
music = null;
soundVolume = soundEngine.SoundVolume;
musicVolume = soundEngine.SoundVolume;
} }
public static void Play(string name) public static void Play(string name)
@@ -35,7 +43,42 @@ namespace OpenRa.Game
// todo: positioning // todo: positioning
soundEngine.Play2D(sound, false /* loop */, false, false); soundEngine.Play2D(sound, false /* loop */, false, false);
} }
public static void PlayMusic(string name)
{
var sound = sounds[name];
music = soundEngine.Play2D(sound, true /* loop */, false, false);
music.Volume = musicVolume;
}
public static void Pause(bool doPause)
{
soundEngine.SetAllSoundsPaused(doPause);
}
public static void setVolume(float vol)
{
soundVolume = vol;
soundEngine.SoundVolume = vol;
}
public static void setMusicVolume(float vol)
{
musicVolume = vol;
if (music != null)
music.Volume = vol;
}
public static void seekMusic(uint delta)
{
if (music != null)
{
music.PlayPosition += delta;
if (music.PlayPosition < 0 || music.PlayPosition > music.PlayLength)
music.PlayPosition = 0;
}
}
public static void PlayVoice(string phrase, Actor voicedUnit) public static void PlayVoice(string phrase, Actor voicedUnit)
{ {
if (voicedUnit == null) return; if (voicedUnit == null) return;