diff --git a/OpenRA.Game/Sound/Sound.cs b/OpenRA.Game/Sound/Sound.cs index 7223a7831d..58cbe1870b 100644 --- a/OpenRA.Game/Sound/Sound.cs +++ b/OpenRA.Game/Sound/Sound.cs @@ -129,9 +129,14 @@ namespace OpenRA soundEngine.StopAllSounds(); } - public void EndLoop(ISound sound) + public void SetLooped(ISound sound, bool looped) { - soundEngine.SetSoundLooping(false, sound); + soundEngine.SetSoundLooping(looped, sound); + } + + public void SetPosition(ISound sound, WPos position) + { + soundEngine.SetSoundPosition(sound, position); } public void MuteAudio() diff --git a/OpenRA.Game/Sound/SoundDevice.cs b/OpenRA.Game/Sound/SoundDevice.cs index 4f0c5bc6dd..6f1ba86f18 100644 --- a/OpenRA.Game/Sound/SoundDevice.cs +++ b/OpenRA.Game/Sound/SoundDevice.cs @@ -29,6 +29,7 @@ namespace OpenRA void SetListenerPosition(WPos position); void SetSoundVolume(float volume, ISound music, ISound video); void SetSoundLooping(bool looping, ISound sound); + void SetSoundPosition(ISound sound, WPos position); } public class SoundDevice diff --git a/OpenRA.Platforms.Default/DummySoundEngine.cs b/OpenRA.Platforms.Default/DummySoundEngine.cs index 09643942e6..70b3c2499b 100644 --- a/OpenRA.Platforms.Default/DummySoundEngine.cs +++ b/OpenRA.Platforms.Default/DummySoundEngine.cs @@ -57,6 +57,7 @@ namespace OpenRA.Platforms.Default public void StopAllSounds() { } public void SetListenerPosition(WPos position) { } public void SetSoundLooping(bool looping, ISound sound) { } + public void SetSoundPosition(ISound sound, WPos position) { } public void Dispose() { } } diff --git a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs index 8db8eb89b0..712e12eadd 100644 --- a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs +++ b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs @@ -350,6 +350,11 @@ namespace OpenRA.Platforms.Default ((OpenAlSound)sound)?.SetLooping(looping); } + public void SetSoundPosition(ISound sound, WPos position) + { + ((OpenAlSound)sound)?.SetPosition(position); + } + ~OpenAlSoundEngine() { Dispose(false);