Merge pull request #9394 from pchote/unstatic-sound

Unstatic the Sound class.
This commit is contained in:
RoosterDragon
2015-09-20 22:58:00 +01:00
85 changed files with 235 additions and 215 deletions

View File

@@ -42,6 +42,7 @@ namespace OpenRA
public static MersenneTwister CosmeticRandom = new MersenneTwister(); // not synced public static MersenneTwister CosmeticRandom = new MersenneTwister(); // not synced
public static Renderer Renderer; public static Renderer Renderer;
public static Sound Sound;
public static bool HasInputFocus = false; public static bool HasInputFocus = false;
public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true) public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true)
@@ -234,7 +235,7 @@ namespace OpenRA
} }
} }
Sound.Create(Settings.Server.Dedicated ? "Null" : Settings.Sound.Engine); Sound = new Sound(Settings.Server.Dedicated ? "Null" : Settings.Sound.Engine);
Console.WriteLine("Available mods:"); Console.WriteLine("Available mods:");
foreach (var mod in ModMetadata.AllMods) foreach (var mod in ModMetadata.AllMods)
@@ -671,6 +672,7 @@ namespace OpenRA
worldRenderer.Dispose(); worldRenderer.Dispose();
ModData.Dispose(); ModData.Dispose();
ChromeProvider.Deinitialize(); ChromeProvider.Deinitialize();
Sound.Dispose();
Renderer.Dispose(); Renderer.Dispose();
OnQuit(); OnQuit();

View File

@@ -20,16 +20,16 @@ using OpenRA.Traits;
namespace OpenRA namespace OpenRA
{ {
public static class Sound public sealed class Sound : IDisposable
{ {
static ISoundEngine soundEngine; readonly ISoundEngine soundEngine;
static Cache<string, ISoundSource> sounds; Cache<string, ISoundSource> sounds;
static ISoundSource rawSource; ISoundSource rawSource;
static ISound music; ISound music;
static ISound video; ISound video;
static MusicInfo currentMusic; MusicInfo currentMusic;
public static void Create(string engineName) public Sound(string engineName)
{ {
var enginePath = Platform.ResolvePath(".", "OpenRA.Platforms." + engineName + ".dll"); var enginePath = Platform.ResolvePath(".", "OpenRA.Platforms." + engineName + ".dll");
soundEngine = CreateDevice(Assembly.LoadFile(enginePath)); soundEngine = CreateDevice(Assembly.LoadFile(enginePath));
@@ -46,7 +46,7 @@ namespace OpenRA
throw new InvalidOperationException("Platform DLL is missing PlatformAttribute to tell us what type to use!"); throw new InvalidOperationException("Platform DLL is missing PlatformAttribute to tell us what type to use!");
} }
static ISoundSource LoadSound(string filename) ISoundSource LoadSound(string filename)
{ {
if (!GlobalFileSystem.Exists(filename)) if (!GlobalFileSystem.Exists(filename))
{ {
@@ -62,17 +62,17 @@ namespace OpenRA
return LoadSoundRaw(AudLoader.LoadSound(s), 1, 16, 22050); return LoadSoundRaw(AudLoader.LoadSound(s), 1, 16, 22050);
} }
static ISoundSource LoadWave(WavLoader wave) ISoundSource LoadWave(WavLoader wave)
{ {
return soundEngine.AddSoundSourceFromMemory(wave.RawOutput, wave.Channels, wave.BitsPerSample, wave.SampleRate); return soundEngine.AddSoundSourceFromMemory(wave.RawOutput, wave.Channels, wave.BitsPerSample, wave.SampleRate);
} }
static ISoundSource LoadSoundRaw(byte[] rawData, int channels, int sampleBits, int sampleRate) ISoundSource LoadSoundRaw(byte[] rawData, int channels, int sampleBits, int sampleRate)
{ {
return soundEngine.AddSoundSourceFromMemory(rawData, channels, sampleBits, sampleRate); return soundEngine.AddSoundSourceFromMemory(rawData, channels, sampleBits, sampleRate);
} }
public static void Initialize() public void Initialize()
{ {
sounds = new Cache<string, ISoundSource>(LoadSound); sounds = new Cache<string, ISoundSource>(LoadSound);
music = null; music = null;
@@ -80,7 +80,7 @@ namespace OpenRA
video = null; video = null;
} }
public static SoundDevice[] AvailableDevices() public SoundDevice[] AvailableDevices()
{ {
var defaultDevices = new[] var defaultDevices = new[]
{ {
@@ -91,12 +91,12 @@ namespace OpenRA
return defaultDevices.Concat(soundEngine.AvailableDevices()).ToArray(); return defaultDevices.Concat(soundEngine.AvailableDevices()).ToArray();
} }
public static void SetListenerPosition(WPos position) public void SetListenerPosition(WPos position)
{ {
soundEngine.SetListenerPosition(position); soundEngine.SetListenerPosition(position);
} }
static ISound Play(Player player, string name, bool headRelative, WPos pos, float volumeModifier = 1f, bool loop = false) ISound Play(Player player, string name, bool headRelative, WPos pos, float volumeModifier = 1f, bool loop = false)
{ {
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
return null; return null;
@@ -108,45 +108,45 @@ namespace OpenRA
InternalSoundVolume * volumeModifier, true); InternalSoundVolume * volumeModifier, true);
} }
public static void StopAudio() public void StopAudio()
{ {
soundEngine.StopAllSounds(); soundEngine.StopAllSounds();
} }
public static ISound Play(string name) { return Play(null, name, true, WPos.Zero, 1f); } public ISound Play(string name) { return Play(null, name, true, WPos.Zero, 1f); }
public static ISound Play(string name, WPos pos) { return Play(null, name, false, pos, 1f); } public ISound Play(string name, WPos pos) { return Play(null, name, false, pos, 1f); }
public static ISound Play(string name, float volumeModifier) { return Play(null, name, true, WPos.Zero, volumeModifier); } public ISound Play(string name, float volumeModifier) { return Play(null, name, true, WPos.Zero, volumeModifier); }
public static ISound Play(string name, WPos pos, float volumeModifier) { return Play(null, name, false, pos, volumeModifier); } public ISound Play(string name, WPos pos, float volumeModifier) { return Play(null, name, false, pos, volumeModifier); }
public static ISound PlayToPlayer(Player player, string name) { return Play(player, name, true, WPos.Zero, 1f); } public ISound PlayToPlayer(Player player, string name) { return Play(player, name, true, WPos.Zero, 1f); }
public static ISound PlayToPlayer(Player player, string name, WPos pos) { return Play(player, name, false, pos, 1f); } public ISound PlayToPlayer(Player player, string name, WPos pos) { return Play(player, name, false, pos, 1f); }
public static ISound PlayLooped(string name) { return PlayLooped(name, WPos.Zero); } public ISound PlayLooped(string name) { return PlayLooped(name, WPos.Zero); }
public static ISound PlayLooped(string name, WPos pos) { return Play(null, name, true, pos, 1f, true); } public ISound PlayLooped(string name, WPos pos) { return Play(null, name, true, pos, 1f, true); }
public static void PlayVideo(byte[] raw, int channels, int sampleBits, int sampleRate) public void PlayVideo(byte[] raw, int channels, int sampleBits, int sampleRate)
{ {
rawSource = LoadSoundRaw(raw, channels, sampleBits, sampleRate); rawSource = LoadSoundRaw(raw, channels, sampleBits, sampleRate);
video = soundEngine.Play2D(rawSource, false, true, WPos.Zero, InternalSoundVolume, false); video = soundEngine.Play2D(rawSource, false, true, WPos.Zero, InternalSoundVolume, false);
} }
public static void PlayVideo() public void PlayVideo()
{ {
if (video != null) if (video != null)
soundEngine.PauseSound(video, false); soundEngine.PauseSound(video, false);
} }
public static void PauseVideo() public void PauseVideo()
{ {
if (video != null) if (video != null)
soundEngine.PauseSound(video, true); soundEngine.PauseSound(video, true);
} }
public static void StopVideo() public void StopVideo()
{ {
if (video != null) if (video != null)
soundEngine.StopSound(video); soundEngine.StopSound(video);
} }
public static void Tick() public void Tick()
{ {
// Song finished // Song finished
if (MusicPlaying && !music.Playing) if (MusicPlaying && !music.Playing)
@@ -156,16 +156,16 @@ namespace OpenRA
} }
} }
static Action onMusicComplete; Action onMusicComplete;
public static bool MusicPlaying { get; private set; } public bool MusicPlaying { get; private set; }
public static MusicInfo CurrentMusic { get { return currentMusic; } } public MusicInfo CurrentMusic { get { return currentMusic; } }
public static void PlayMusic(MusicInfo m) public void PlayMusic(MusicInfo m)
{ {
PlayMusicThen(m, () => { }); PlayMusicThen(m, () => { });
} }
public static void PlayMusicThen(MusicInfo m, Action then) public void PlayMusicThen(MusicInfo m, Action then)
{ {
if (m == null || !m.Exists) if (m == null || !m.Exists)
return; return;
@@ -190,7 +190,7 @@ namespace OpenRA
MusicPlaying = true; MusicPlaying = true;
} }
public static void PlayMusic() public void PlayMusic()
{ {
if (music == null) if (music == null)
return; return;
@@ -199,13 +199,13 @@ namespace OpenRA
soundEngine.PauseSound(music, false); soundEngine.PauseSound(music, false);
} }
public static void StopSound(ISound sound) public void StopSound(ISound sound)
{ {
if (sound != null) if (sound != null)
soundEngine.StopSound(sound); soundEngine.StopSound(sound);
} }
public static void StopMusic() public void StopMusic()
{ {
if (music != null) if (music != null)
soundEngine.StopSound(music); soundEngine.StopSound(music);
@@ -214,7 +214,7 @@ namespace OpenRA
currentMusic = null; currentMusic = null;
} }
public static void PauseMusic() public void PauseMusic()
{ {
if (music == null) if (music == null)
return; return;
@@ -223,14 +223,14 @@ namespace OpenRA
soundEngine.PauseSound(music, true); soundEngine.PauseSound(music, true);
} }
public static float GlobalVolume public float GlobalVolume
{ {
get { return soundEngine.Volume; } get { return soundEngine.Volume; }
set { soundEngine.Volume = value; } set { soundEngine.Volume = value; }
} }
static float soundVolumeModifier = 1.0f; float soundVolumeModifier = 1.0f;
public static float SoundVolumeModifier public float SoundVolumeModifier
{ {
get get
{ {
@@ -244,8 +244,8 @@ namespace OpenRA
} }
} }
static float InternalSoundVolume { get { return SoundVolume * soundVolumeModifier; } } float InternalSoundVolume { get { return SoundVolume * soundVolumeModifier; } }
public static float SoundVolume public float SoundVolume
{ {
get get
{ {
@@ -259,7 +259,7 @@ namespace OpenRA
} }
} }
public static float MusicVolume public float MusicVolume
{ {
get get
{ {
@@ -274,7 +274,7 @@ namespace OpenRA
} }
} }
public static float VideoVolume public float VideoVolume
{ {
get get
{ {
@@ -289,18 +289,18 @@ namespace OpenRA
} }
} }
public static float MusicSeekPosition public float MusicSeekPosition
{ {
get { return music != null ? music.SeekPosition : 0; } get { return music != null ? music.SeekPosition : 0; }
} }
public static float VideoSeekPosition public float VideoSeekPosition
{ {
get { return video != null ? video.SeekPosition : 0; } get { return video != null ? video.SeekPosition : 0; }
} }
// Returns true if played successfully // Returns true if played successfully
public static bool PlayPredefined(Ruleset ruleset, Player p, Actor voicedActor, string type, string definition, string variant, public bool PlayPredefined(Ruleset ruleset, Player p, Actor voicedActor, string type, string definition, string variant,
bool relative, WPos pos, float volumeModifier, bool attenuateVolume) bool relative, WPos pos, float volumeModifier, bool attenuateVolume)
{ {
if (ruleset == null) if (ruleset == null)
@@ -358,7 +358,7 @@ namespace OpenRA
return true; return true;
} }
public static bool PlayNotification(Ruleset rules, Player player, string type, string notification, string variant) public bool PlayNotification(Ruleset rules, Player player, string type, string notification, string variant)
{ {
if (rules == null) if (rules == null)
throw new ArgumentNullException("rules"); throw new ArgumentNullException("rules");
@@ -368,5 +368,10 @@ namespace OpenRA
return PlayPredefined(rules, player, null, type.ToLowerInvariant(), notification, variant, true, WPos.Zero, 1f, false); return PlayPredefined(rules, player, null, type.ToLowerInvariant(), notification, variant, true, WPos.Zero, 1f, false);
} }
public void Dispose()
{
soundEngine.Dispose();
}
} }
} }

View File

@@ -12,7 +12,7 @@ using System;
namespace OpenRA namespace OpenRA
{ {
public interface ISoundEngine public interface ISoundEngine : IDisposable
{ {
SoundDevice[] AvailableDevices(); SoundDevice[] AvailableDevices();
ISoundSource AddSoundSourceFromMemory(byte[] data, int channels, int sampleBits, int sampleRate); ISoundSource AddSoundSourceFromMemory(byte[] data, int channels, int sampleBits, int sampleRate);

View File

@@ -145,7 +145,7 @@ namespace OpenRA.Traits
{ {
if (Resources > 0.8 * ResourceCapacity) if (Resources > 0.8 * ResourceCapacity)
{ {
Sound.PlayNotification(self.World.Map.Rules, owner, "Speech", "SilosNeeded", owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, owner, "Speech", "SilosNeeded", owner.Faction.InternalName);
AlertSilo = true; AlertSilo = true;
} }
else else
@@ -187,14 +187,14 @@ namespace OpenRA.Traits
public void PlayCashTickUp(Actor self) public void PlayCashTickUp(Actor self)
{ {
if (Game.Settings.Sound.CashTicks) if (Game.Settings.Sound.CashTicks)
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickUp", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickUp", self.Owner.Faction.InternalName);
} }
public void PlayCashTickDown(Actor self) public void PlayCashTickDown(Actor self)
{ {
if (Game.Settings.Sound.CashTicks && nextCashTickTime == 0) if (Game.Settings.Sound.CashTicks && nextCashTickTime == 0)
{ {
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickDown", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "CashTickDown", self.Owner.Faction.InternalName);
nextCashTickTime = 2; nextCashTickTime = 2;
} }
} }

View File

@@ -164,7 +164,7 @@ namespace OpenRA
if (!p.Stances.ContainsKey(q)) if (!p.Stances.ContainsKey(q))
p.Stances[q] = Stance.Neutral; p.Stances[q] = Stance.Neutral;
Sound.SoundVolumeModifier = 1.0f; Game.Sound.SoundVolumeModifier = 1.0f;
gameInfo = new GameInformation gameInfo = new GameInformation
{ {
@@ -369,8 +369,8 @@ namespace OpenRA
frameEndActions.Clear(); frameEndActions.Clear();
Sound.StopAudio(); Game.Sound.StopAudio();
Sound.StopVideo(); Game.Sound.StopVideo();
// Dispose newer actors first, and the world actor last // Dispose newer actors first, and the world actor last
foreach (var a in actors.Values.Reverse()) foreach (var a in actors.Values.Reverse())

View File

@@ -74,7 +74,7 @@ namespace OpenRA.Mods.Cnc.Traits
cargo.Delivered(self); cargo.Delivered(self);
self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit, factionVariant)); self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit, factionVariant));
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.ReadyAudio, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.ReadyAudio, self.Owner.Faction.InternalName);
})); }));
actor.QueueActivity(new Fly(actor, Target.FromCell(w, endPos))); actor.QueueActivity(new Fly(actor, Target.FromCell(w, endPos)));

View File

@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Cnc.Traits
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
Sound.Play(Info.LaunchSound, self.World.Map.CenterOfCell(order.TargetLocation)); Game.Sound.Play(Info.LaunchSound, self.World.Map.CenterOfCell(order.TargetLocation));
w.Add(new IonCannon(self.Owner, info.Weapon, w, order.TargetLocation, info.Effect, info.EffectPalette, info.WeaponDelay)); w.Add(new IonCannon(self.Owner, info.Weapon, w, order.TargetLocation, info.Effect, info.EffectPalette, info.WeaponDelay));
if (info.CameraActor == null) if (info.CameraActor == null)

View File

@@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Activities
if (!playedSound && helicopter.Info.TakeoffSound != null && self.IsAtGroundLevel()) if (!playedSound && helicopter.Info.TakeoffSound != null && self.IsAtGroundLevel())
{ {
Sound.Play(helicopter.Info.TakeoffSound); Game.Sound.Play(helicopter.Info.TakeoffSound);
playedSound = true; playedSound = true;
} }

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.Common.Activities
if (!playedSound && helicopter.Info.LandingSound != null && !self.IsAtGroundLevel()) if (!playedSound && helicopter.Info.LandingSound != null && !self.IsAtGroundLevel())
{ {
Sound.Play(helicopter.Info.LandingSound); Game.Sound.Play(helicopter.Info.LandingSound);
playedSound = true; playedSound = true;
} }

View File

@@ -63,7 +63,7 @@ namespace OpenRA.Mods.Common.Activities
var sound = pool.Info.RearmSound; var sound = pool.Info.RearmSound;
if (sound != null) if (sound != null)
Sound.Play(sound, self.CenterPosition); Game.Sound.Play(sound, self.CenterPosition);
ammoPoolsReloadTimes[pool] = pool.Info.ReloadTicks; ammoPoolsReloadTimes[pool] = pool.Info.ReloadTicks;
} }

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Activities
if (health.DamageState == DamageState.Undamaged) if (health.DamageState == DamageState.Undamaged)
{ {
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.FinishRepairingNotification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.FinishRepairingNotification, self.Owner.Faction.InternalName);
return NextActivity; return NextActivity;
} }
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Activities
if (!played) if (!played)
{ {
played = true; played = true;
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.StartRepairingNotification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.StartRepairingNotification, self.Owner.Faction.InternalName);
} }
if (!self.Owner.PlayerActor.Trait<PlayerResources>().TakeCash(cost)) if (!self.Owner.PlayerActor.Trait<PlayerResources>().TakeCash(cost))

View File

@@ -50,9 +50,9 @@ namespace OpenRA.Mods.Common.Activities
self.Dispose(); self.Dispose();
foreach (var s in Sounds) foreach (var s in Sounds)
Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition);
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Notification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Notification, self.Owner.Faction.InternalName);
var init = new TypeDictionary var init = new TypeDictionary
{ {

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Effects
pos = launchPos; pos = launchPos;
var weaponRules = firedBy.World.Map.Rules.Weapons[weapon.ToLowerInvariant()]; var weaponRules = firedBy.World.Map.Rules.Weapons[weapon.ToLowerInvariant()];
if (weaponRules.Report != null && weaponRules.Report.Any()) if (weaponRules.Report != null && weaponRules.Report.Any())
Sound.Play(weaponRules.Report.Random(firedBy.World.SharedRandom), pos); Game.Sound.Play(weaponRules.Report.Random(firedBy.World.SharedRandom), pos);
if (skipAscent) if (skipAscent)
ticks = turn; ticks = turn;

View File

@@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Orders
orderType = "PlacePlug"; orderType = "PlacePlug";
if (!AcceptsPlug(topLeft, plugInfo)) if (!AcceptsPlug(topLeft, plugInfo))
{ {
Sound.PlayNotification(world.Map.Rules, producer.Owner, "Speech", "BuildingCannotPlaceAudio", producer.Owner.Faction.InternalName); Game.Sound.PlayNotification(world.Map.Rules, producer.Owner, "Speech", "BuildingCannotPlaceAudio", producer.Owner.Faction.InternalName);
yield break; yield break;
} }
} }
@@ -96,7 +96,7 @@ namespace OpenRA.Mods.Common.Orders
if (!world.CanPlaceBuilding(building, buildingInfo, topLeft, null) if (!world.CanPlaceBuilding(building, buildingInfo, topLeft, null)
|| !buildingInfo.IsCloseEnoughToBase(world, producer.Owner, building, topLeft)) || !buildingInfo.IsCloseEnoughToBase(world, producer.Owner, building, topLeft))
{ {
Sound.PlayNotification(world.Map.Rules, producer.Owner, "Speech", "BuildingCannotPlaceAudio", producer.Owner.Faction.InternalName); Game.Sound.PlayNotification(world.Map.Rules, producer.Owner, "Speech", "BuildingCannotPlaceAudio", producer.Owner.Faction.InternalName);
yield break; yield break;
} }

View File

@@ -39,19 +39,19 @@ namespace OpenRA.Mods.Common.Scripting
[Desc("Play an announcer voice listed in notifications.yaml")] [Desc("Play an announcer voice listed in notifications.yaml")]
public void PlaySpeechNotification(Player player, string notification) public void PlaySpeechNotification(Player player, string notification)
{ {
Sound.PlayNotification(world.Map.Rules, player, "Speech", notification, player != null ? player.Faction.InternalName : null); Game.Sound.PlayNotification(world.Map.Rules, player, "Speech", notification, player != null ? player.Faction.InternalName : null);
} }
[Desc("Play a sound listed in notifications.yaml")] [Desc("Play a sound listed in notifications.yaml")]
public void PlaySoundNotification(Player player, string notification) public void PlaySoundNotification(Player player, string notification)
{ {
Sound.PlayNotification(world.Map.Rules, player, "Sounds", notification, player != null ? player.Faction.InternalName : null); Game.Sound.PlayNotification(world.Map.Rules, player, "Sounds", notification, player != null ? player.Faction.InternalName : null);
} }
[Desc("Play a sound file")] [Desc("Play a sound file")]
public void PlaySound(string file) public void PlaySound(string file)
{ {
Sound.Play(file); Game.Sound.Play(file);
} }
Action onComplete; Action onComplete;

View File

@@ -37,23 +37,23 @@ namespace OpenRA.Mods.Common.Scripting
w.SetPauseState(true); w.SetPauseState(true);
// Mute world sounds // Mute world sounds
var oldModifier = Sound.SoundVolumeModifier; var oldModifier = Game.Sound.SoundVolumeModifier;
// TODO: this also modifies vqa audio // TODO: this also modifies vqa audio
// Sound.SoundVolumeModifier = 0f; // Game.Sound.SoundVolumeModifier = 0f;
// Stop music while fmv plays // Stop music while fmv plays
var music = Sound.MusicPlaying; var music = Game.Sound.MusicPlaying;
if (music) if (music)
Sound.PauseMusic(); Game.Sound.PauseMusic();
player.PlayThen(() => player.PlayThen(() =>
{ {
if (music) if (music)
Sound.PlayMusic(); Game.Sound.PlayMusic();
Ui.CloseWindow(); Ui.CloseWindow();
Sound.SoundVolumeModifier = oldModifier; Game.Sound.SoundVolumeModifier = oldModifier;
w.SetPauseState(false); w.SetPauseState(false);
onComplete(); onComplete();
}); });

View File

@@ -187,7 +187,7 @@ namespace OpenRA.Mods.Common.Traits
self.World.Add(projectile); self.World.Add(projectile);
if (args.Weapon.Report != null && args.Weapon.Report.Any()) if (args.Weapon.Report != null && args.Weapon.Report.Any())
Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); Game.Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition);
} }
}); });

View File

@@ -105,7 +105,7 @@ namespace OpenRA.Mods.Common.Traits
notify.Charging(self, target); notify.Charging(self, target);
if (!string.IsNullOrEmpty(attack.info.ChargeAudio)) if (!string.IsNullOrEmpty(attack.info.ChargeAudio))
Sound.Play(attack.info.ChargeAudio, self.CenterPosition); Game.Sound.Play(attack.info.ChargeAudio, self.CenterPosition);
return Util.SequenceActivities(new Wait(attack.info.InitialChargeDelay), new ChargeFire(attack, target), this); return Util.SequenceActivities(new Wait(attack.info.InitialChargeDelay), new ChargeFire(attack, target), this);
} }

View File

@@ -204,7 +204,7 @@ namespace OpenRA.Mods.Common.Traits
public void BeforeTransform(Actor self) public void BeforeTransform(Actor self)
{ {
foreach (var s in Info.UndeploySounds) foreach (var s in Info.UndeploySounds)
Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition);
} }
public void OnTransform(Actor self) { } public void OnTransform(Actor self) { }

View File

@@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits
isPrimary = true; isPrimary = true;
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", "PrimaryBuildingSelected", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", "PrimaryBuildingSelected", self.Owner.Faction.InternalName);
} }
} }
} }

View File

@@ -73,7 +73,7 @@ namespace OpenRA.Mods.Common.Traits
if (!Repairers.Remove(player) && Repairers.Count < Info.RepairBonuses.Length) if (!Repairers.Remove(player) && Repairers.Count < Info.RepairBonuses.Length)
{ {
Repairers.Add(player); Repairers.Add(player);
Sound.PlayNotification(self.World.Map.Rules, player, "Speech", "Repairing", player.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, player, "Speech", "Repairing", player.Faction.InternalName);
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.Common.Traits
return; return;
var faction = info.NewOwnerVoice ? newOwner.Faction.InternalName : oldOwner.Faction.InternalName; var faction = info.NewOwnerVoice ? newOwner.Faction.InternalName : oldOwner.Faction.InternalName;
Sound.PlayNotification(self.World.Map.Rules, captor.World.LocalPlayer, "Speech", info.Notification, faction); Game.Sound.PlayNotification(self.World.Map.Rules, captor.World.LocalPlayer, "Speech", info.Notification, faction);
} }
} }
} }

View File

@@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Traits
{ {
if (Cloaked) if (Cloaked)
{ {
Sound.Play(Info.UncloakSound, self.CenterPosition); Game.Sound.Play(Info.UncloakSound, self.CenterPosition);
if (upgradeManager != null) if (upgradeManager != null)
foreach (var u in Info.WhileCloakedUpgrades) foreach (var u in Info.WhileCloakedUpgrades)
upgradeManager.RevokeUpgrade(self, u, this); upgradeManager.RevokeUpgrade(self, u, this);
@@ -131,7 +131,7 @@ namespace OpenRA.Mods.Common.Traits
if (remainingTime > 0 && !IsTraitDisabled && !damageDisabled && --remainingTime <= 0) if (remainingTime > 0 && !IsTraitDisabled && !damageDisabled && --remainingTime <= 0)
{ {
Sound.Play(Info.CloakSound, self.CenterPosition); Game.Sound.Play(Info.CloakSound, self.CenterPosition);
if (upgradeManager != null) if (upgradeManager != null)
foreach (var u in Info.WhileCloakedUpgrades) foreach (var u in Info.WhileCloakedUpgrades)
upgradeManager.GrantUpgrade(self, u, this); upgradeManager.GrantUpgrade(self, u, this);

View File

@@ -72,7 +72,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual void Activate(Actor collector) public virtual void Activate(Actor collector)
{ {
Sound.PlayToPlayer(collector.Owner, info.Notification); Game.Sound.PlayToPlayer(collector.Owner, info.Notification);
if (info.Effect != null) if (info.Effect != null)
collector.World.AddFrameEndTask(w => w.Add(new CrateEffect(collector, info.Effect, info.Palette))); collector.World.AddFrameEndTask(w => w.Add(new CrateEffect(collector, info.Effect, info.Palette)));

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Common.Traits
public void OnCrush(Actor crusher) public void OnCrush(Actor crusher)
{ {
Sound.Play(info.CrushSound, crusher.CenterPosition); Game.Sound.Play(info.CrushSound, crusher.CenterPosition);
var wda = self.TraitsImplementing<WithDeathAnimation>() var wda = self.TraitsImplementing<WithDeathAnimation>()
.FirstOrDefault(s => s.Info.CrushedSequence != null); .FirstOrDefault(s => s.Info.CrushedSequence != null);
if (wda != null) if (wda != null)

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Traits
w.Add(pilot); w.Add(pilot);
pilot.QueueActivity(new Parachute(pilot, cp)); pilot.QueueActivity(new Parachute(pilot, cp));
}); });
Sound.Play(info.ChuteSound, cp); Game.Sound.Play(info.ChuteSound, cp);
} }
else else
{ {

View File

@@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Traits
var weapon = e.Attacker.World.Map.Rules.Weapons[weaponName.ToLowerInvariant()]; var weapon = e.Attacker.World.Map.Rules.Weapons[weaponName.ToLowerInvariant()];
if (weapon.Report != null && weapon.Report.Any()) if (weapon.Report != null && weapon.Report.Any())
Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); Game.Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition);
// Use .FromPos since this actor is killed. Cannot use Target.FromActor // Use .FromPos since this actor is killed. Cannot use Target.FromActor
weapon.Impact(Target.FromPos(self.CenterPosition), e.Attacker, Enumerable.Empty<int>()); weapon.Impact(Target.FromPos(self.CenterPosition), e.Attacker, Enumerable.Empty<int>());

View File

@@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits
if (!silent) if (!silent)
{ {
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "LevelUp", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "LevelUp", self.Owner.Faction.InternalName);
self.World.AddFrameEndTask(w => w.Add(new CrateEffect(self, "levelup", info.LevelUpPalette))); self.World.AddFrameEndTask(w => w.Add(new CrateEffect(self, "levelup", info.LevelUpPalette)));
} }
} }

View File

@@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Traits
w.Add(a); w.Add(a);
a.QueueActivity(new Parachute(a, self.CenterPosition)); a.QueueActivity(new Parachute(a, self.CenterPosition));
}); });
Sound.Play(info.ChuteSound, self.CenterPosition); Game.Sound.Play(info.ChuteSound, self.CenterPosition);
} }
static bool IsSuitableCell(Actor actorToDrop, CPos p) static bool IsSuitableCell(Actor actorToDrop, CPos p)

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Mods.Common.Traits
var terrain = self.World.Map.GetTerrainInfo(self.Location); var terrain = self.World.Map.GetTerrainInfo(self.Location);
var sound = terrain.IsWater ? info.WaterImpactSound : info.GroundImpactSound; var sound = terrain.IsWater ? info.WaterImpactSound : info.GroundImpactSound;
Sound.Play(sound, self.CenterPosition); Game.Sound.Play(sound, self.CenterPosition);
var sequence = terrain.IsWater ? info.WaterCorpseSequence : info.GroundCorpseSequence; var sequence = terrain.IsWater ? info.WaterCorpseSequence : info.GroundCorpseSequence;
var palette = terrain.IsWater ? info.WaterCorpsePalette : info.GroundCorpsePalette; var palette = terrain.IsWater ? info.WaterCorpsePalette : info.GroundCorpsePalette;

View File

@@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Traits
if (self.World.WorldTick - lastAttackTime > info.NotifyInterval * 25) if (self.World.WorldTick - lastAttackTime > info.NotifyInterval * 25)
{ {
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.Notification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.Notification, self.Owner.Faction.InternalName);
if (radarPings != null) if (radarPings != null)
radarPings.Add(() => self.Owner == self.World.LocalPlayer, self.CenterPosition, info.RadarPingColor, info.RadarPingDuration); radarPings.Add(() => self.Owner == self.World.LocalPlayer, self.CenterPosition, info.RadarPingColor, info.RadarPingDuration);

View File

@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits
Game.RunAfterDelay(info.NotificationDelay, () => Game.RunAfterDelay(info.NotificationDelay, () =>
{ {
if (Game.IsCurrentWorld(player.World)) if (Game.IsCurrentWorld(player.World))
Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Lose", player.Faction.InternalName); Game.Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Lose", player.Faction.InternalName);
}); });
} }
} }
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits
Game.Debug("{0} is victorious.", player.PlayerName); Game.Debug("{0} is victorious.", player.PlayerName);
if (player == player.World.LocalPlayer) if (player == player.World.LocalPlayer)
Game.RunAfterDelay(info.NotificationDelay, () => Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Faction.InternalName)); Game.RunAfterDelay(info.NotificationDelay, () => Game.Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Faction.InternalName));
} }
public void OnObjectiveAdded(Player player, int id) { } public void OnObjectiveAdded(Player player, int id) { }

View File

@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Traits
if (self.World.WorldTick - lastAttackTime > info.NotifyInterval * 25) if (self.World.WorldTick - lastAttackTime > info.NotifyInterval * 25)
{ {
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.Notification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.Notification, self.Owner.Faction.InternalName);
if (radarPings != null) if (radarPings != null)
radarPings.Add(() => self.Owner == self.World.LocalPlayer, self.CenterPosition, info.RadarPingColor, info.RadarPingDuration); radarPings.Add(() => self.Owner == self.World.LocalPlayer, self.CenterPosition, info.RadarPingColor, info.RadarPingDuration);

View File

@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits
self.World.Add(playerBeacon); self.World.Add(playerBeacon);
if (self.Owner.IsAlliedWith(self.World.RenderPlayer)) if (self.Owner.IsAlliedWith(self.World.RenderPlayer))
Sound.PlayNotification(self.World.Map.Rules, null, info.NotificationType, info.Notification, Game.Sound.PlayNotification(self.World.Map.Rules, null, info.NotificationType, info.Notification,
self.World.RenderPlayer != null ? self.World.RenderPlayer.Faction.InternalName : null); self.World.RenderPlayer != null ? self.World.RenderPlayer.Faction.InternalName : null);
if (radarPings != null) if (radarPings != null)

View File

@@ -95,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits
if (playSounds) if (playSounds)
foreach (var s in buildingInfo.BuildSounds) foreach (var s in buildingInfo.BuildSounds)
Sound.PlayToPlayer(order.Player, s, building.CenterPosition); Game.Sound.PlayToPlayer(order.Player, s, building.CenterPosition);
playSounds = false; playSounds = false;
} }
@@ -119,7 +119,7 @@ namespace OpenRA.Mods.Common.Traits
pluggable.EnablePlug(host, plugInfo.Type); pluggable.EnablePlug(host, plugInfo.Type);
foreach (var s in buildingInfo.BuildSounds) foreach (var s in buildingInfo.BuildSounds)
Sound.PlayToPlayer(order.Player, s, host.CenterPosition); Game.Sound.PlayToPlayer(order.Player, s, host.CenterPosition);
} }
else else
{ {
@@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Traits
}); });
foreach (var s in buildingInfo.BuildSounds) foreach (var s in buildingInfo.BuildSounds)
Sound.PlayToPlayer(order.Player, s, building.CenterPosition); Game.Sound.PlayToPlayer(order.Player, s, building.CenterPosition);
} }
if (producer.Actor != null) if (producer.Actor != null)
@@ -155,7 +155,7 @@ namespace OpenRA.Mods.Common.Traits
if (GetNumBuildables(self.Owner) > prevItems) if (GetNumBuildables(self.Owner) > prevItems)
w.Add(new DelayedAction(info.NewOptionsNotificationDelay, w.Add(new DelayedAction(info.NewOptionsNotificationDelay,
() => Sound.PlayNotification(self.World.Map.Rules, order.Player, "Speech", info.NewOptionsNotification, order.Player.Faction.InternalName))); () => Game.Sound.PlayNotification(self.World.Map.Rules, order.Player, "Speech", info.NewOptionsNotification, order.Player.Faction.InternalName)));
}); });
} }

View File

@@ -245,11 +245,12 @@ namespace OpenRA.Mods.Common.Traits
if (!Enabled) if (!Enabled)
return; return;
var rules = self.World.Map.Rules;
switch (order.OrderString) switch (order.OrderString)
{ {
case "StartProduction": case "StartProduction":
{ {
var unit = self.World.Map.Rules.Actors[order.TargetString]; var unit = rules.Actors[order.TargetString];
var bi = unit.TraitInfo<BuildableInfo>(); var bi = unit.TraitInfo<BuildableInfo>();
if (!bi.Queue.Contains(Info.Type)) if (!bi.Queue.Contains(Info.Type))
return; /* Not built by this queue */ return; /* Not built by this queue */
@@ -281,13 +282,13 @@ namespace OpenRA.Mods.Common.Traits
var isBuilding = unit.HasTraitInfo<BuildingInfo>(); var isBuilding = unit.HasTraitInfo<BuildingInfo>();
if (isBuilding && !hasPlayedSound) if (isBuilding && !hasPlayedSound)
hasPlayedSound = Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.ReadyAudio, self.Owner.Faction.InternalName); hasPlayedSound = Game.Sound.PlayNotification(rules, self.Owner, "Speech", Info.ReadyAudio, self.Owner.Faction.InternalName);
else if (!isBuilding) else if (!isBuilding)
{ {
if (BuildUnit(order.TargetString)) if (BuildUnit(order.TargetString))
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.ReadyAudio, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(rules, self.Owner, "Speech", Info.ReadyAudio, self.Owner.Faction.InternalName);
else if (!hasPlayedSound && time > 0) else if (!hasPlayedSound && time > 0)
hasPlayedSound = Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.BlockedAudio, self.Owner.Faction.InternalName); hasPlayedSound = Game.Sound.PlayNotification(rules, self.Owner, "Speech", Info.BlockedAudio, self.Owner.Faction.InternalName);
} }
}))); })));
} }

View File

@@ -112,7 +112,7 @@ namespace OpenRA.Mods.Common.Traits
Game.RunAfterDelay(info.NotificationDelay, () => Game.RunAfterDelay(info.NotificationDelay, () =>
{ {
if (Game.IsCurrentWorld(player.World)) if (Game.IsCurrentWorld(player.World))
Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Lose", player.Faction.InternalName); Game.Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Lose", player.Faction.InternalName);
}); });
} }
} }
@@ -122,7 +122,7 @@ namespace OpenRA.Mods.Common.Traits
Game.Debug("{0} is victorious.", player.PlayerName); Game.Debug("{0} is victorious.", player.PlayerName);
if (player == player.World.LocalPlayer) if (player == player.World.LocalPlayer)
Game.RunAfterDelay(info.NotificationDelay, () => Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Faction.InternalName)); Game.RunAfterDelay(info.NotificationDelay, () => Game.Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Faction.InternalName));
} }
public void OnObjectiveAdded(Player player, int id) { } public void OnObjectiveAdded(Player player, int id) { }

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits
if (!IsTraitDisabled && order.OrderString == "PowerDown") if (!IsTraitDisabled && order.OrderString == "PowerDown")
{ {
disabled = !disabled; disabled = !disabled;
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", disabled ? "EnablePower" : "DisablePower", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", disabled ? "EnablePower" : "DisablePower", self.Owner.Faction.InternalName);
power.UpdateActor(self); power.UpdateActor(self);
if (disabled) if (disabled)
@@ -68,7 +68,7 @@ namespace OpenRA.Mods.Common.Traits
if (!disabled || !Info.CancelWhenDisabled) if (!disabled || !Info.CancelWhenDisabled)
return; return;
disabled = false; disabled = false;
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "EnablePower", self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Sounds", "EnablePower", self.Owner.Faction.InternalName);
power.UpdateActor(self); power.UpdateActor(self);
} }
} }

View File

@@ -112,7 +112,7 @@ namespace OpenRA.Mods.Common.Traits
if (--nextPowerAdviceTime <= 0) if (--nextPowerAdviceTime <= 0)
{ {
if (lowPower) if (lowPower)
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.SpeechNotification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.SpeechNotification, self.Owner.Faction.InternalName);
nextPowerAdviceTime = info.AdviceInterval; nextPowerAdviceTime = info.AdviceInterval;
} }

View File

@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Traits
self.CancelActivity(); self.CancelActivity();
foreach (var s in info.SellSounds) foreach (var s in info.SellSounds)
Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition);
foreach (var ns in self.TraitsImplementing<INotifySold>()) foreach (var ns in self.TraitsImplementing<INotifySold>())
ns.Selling(self); ns.Selling(self);

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Traits
public void Killed(Actor self, AttackInfo e) public void Killed(Actor self, AttackInfo e)
{ {
var player = info.NotifyAll ? self.World.LocalPlayer : self.Owner; var player = info.NotifyAll ? self.World.LocalPlayer : self.Owner;
Sound.PlayNotification(self.World.Map.Rules, player, "Speech", info.Notification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, player, "Speech", info.Notification, self.Owner.Faction.InternalName);
} }
} }
} }

View File

@@ -26,9 +26,9 @@ namespace OpenRA.Mods.Common.Traits
public AmbientSound(Actor self, AmbientSoundInfo info) public AmbientSound(Actor self, AmbientSoundInfo info)
{ {
if (self.Info.HasTraitInfo<IOccupySpaceInfo>()) if (self.Info.HasTraitInfo<IOccupySpaceInfo>())
Sound.PlayLooped(info.SoundFile, self.CenterPosition); Game.Sound.PlayLooped(info.SoundFile, self.CenterPosition);
else else
Sound.PlayLooped(info.SoundFile); Game.Sound.PlayLooped(info.SoundFile);
} }
} }
} }

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.Common.Traits
// Audio notification // Audio notification
if (discoverer != null && !string.IsNullOrEmpty(Info.Notification)) if (discoverer != null && !string.IsNullOrEmpty(Info.Notification))
Sound.PlayNotification(self.World.Map.Rules, discoverer, "Speech", Info.Notification, discoverer.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, discoverer, "Speech", Info.Notification, discoverer.Faction.InternalName);
// Radar notificaion // Radar notificaion
if (Info.PingRadar && radarPings.Value != null) if (Info.PingRadar && radarPings.Value != null)

View File

@@ -40,12 +40,12 @@ namespace OpenRA.Mods.Common.Traits
if (e.DamageState == DamageState.Dead) if (e.DamageState == DamageState.Dead)
{ {
var sound = info.DestroyedSounds.RandomOrDefault(rand); var sound = info.DestroyedSounds.RandomOrDefault(rand);
Sound.Play(sound, self.CenterPosition); Game.Sound.Play(sound, self.CenterPosition);
} }
else if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy) else if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy)
{ {
var sound = info.DamagedSounds.RandomOrDefault(rand); var sound = info.DamagedSounds.RandomOrDefault(rand);
Sound.Play(sound, self.CenterPosition); Game.Sound.Play(sound, self.CenterPosition);
} }
} }
} }

View File

@@ -128,7 +128,7 @@ namespace OpenRA.Mods.Common.Traits
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
var notification = self.Owner.IsAlliedWith(self.World.RenderPlayer) ? Info.LaunchSound : Info.IncomingSound; var notification = self.Owner.IsAlliedWith(self.World.RenderPlayer) ? Info.LaunchSound : Info.IncomingSound;
Sound.Play(notification); Game.Sound.Play(notification);
Actor distanceTestActor = null; Actor distanceTestActor = null;
for (var i = -info.SquadSize / 2; i <= info.SquadSize / 2; i++) for (var i = -info.SquadSize / 2; i <= info.SquadSize / 2; i++)

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Mods.Common.Traits
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
{ {
Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound);
return new SelectTarget(Self.World, order, manager, this); return new SelectTarget(Self.World, order, manager, this);
} }
@@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Traits
self.Trait<WithSpriteBody>().PlayCustomAnimation(self, info.GrantUpgradeSequence); self.Trait<WithSpriteBody>().PlayCustomAnimation(self, info.GrantUpgradeSequence);
Sound.Play(info.GrantUpgradeSound, self.World.Map.CenterOfCell(order.TargetLocation)); Game.Sound.Play(info.GrantUpgradeSound, self.World.Map.CenterOfCell(order.TargetLocation));
foreach (var a in UnitsInRange(order.TargetLocation)) foreach (var a in UnitsInRange(order.TargetLocation))
{ {

View File

@@ -71,9 +71,9 @@ namespace OpenRA.Mods.Common.Traits
base.Activate(self, order, manager); base.Activate(self, order, manager);
if (self.Owner.IsAlliedWith(self.World.RenderPlayer)) if (self.Owner.IsAlliedWith(self.World.RenderPlayer))
Sound.Play(Info.LaunchSound); Game.Sound.Play(Info.LaunchSound);
else else
Sound.Play(Info.IncomingSound); Game.Sound.Play(Info.IncomingSound);
if (!string.IsNullOrEmpty(info.ActivationSequence)) if (!string.IsNullOrEmpty(info.ActivationSequence))
{ {

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Common.Traits
{ {
var location = self.World.Map.CenterOfCell(order.TargetLocation); var location = self.World.Map.CenterOfCell(order.TargetLocation);
Sound.Play(info.DeploySound, location); Game.Sound.Play(info.DeploySound, location);
if (!string.IsNullOrEmpty(info.EffectSequence) && !string.IsNullOrEmpty(info.EffectPalette)) if (!string.IsNullOrEmpty(info.EffectSequence) && !string.IsNullOrEmpty(info.EffectPalette))
w.Add(new SpriteEffect(location, w, info.EffectSequence, info.EffectPalette)); w.Add(new SpriteEffect(location, w, info.EffectSequence, info.EffectPalette));

View File

@@ -73,12 +73,12 @@ namespace OpenRA.Mods.Common.Traits
public virtual void Charging(Actor self, string key) public virtual void Charging(Actor self, string key)
{ {
Sound.PlayToPlayer(self.Owner, Info.BeginChargeSound); Game.Sound.PlayToPlayer(self.Owner, Info.BeginChargeSound);
} }
public virtual void Charged(Actor self, string key) public virtual void Charged(Actor self, string key)
{ {
Sound.PlayToPlayer(self.Owner, Info.EndChargeSound); Game.Sound.PlayToPlayer(self.Owner, Info.EndChargeSound);
} }
public virtual void Activate(Actor self, Order order, SupportPowerManager manager) public virtual void Activate(Actor self, Order order, SupportPowerManager manager)
@@ -95,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) public virtual IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
{ {
Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound);
return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left);
} }
} }

View File

@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Traits
self.World.Add(projectile); self.World.Add(projectile);
if (args.Weapon.Report != null && args.Weapon.Report.Any()) if (args.Weapon.Report != null && args.Weapon.Report.Any())
Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); Game.Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition);
} }
}); });
} }

View File

@@ -99,9 +99,9 @@ namespace OpenRA.Mods.Common.Traits
if (!CanDeploy() || (building != null && !building.Lock())) if (!CanDeploy() || (building != null && !building.Lock()))
{ {
foreach (var s in info.NoTransformSounds) foreach (var s in info.NoTransformSounds)
Sound.PlayToPlayer(self.Owner, s); Game.Sound.PlayToPlayer(self.Owner, s);
Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.NoTransformNotification, self.Owner.Faction.InternalName); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.NoTransformNotification, self.Owner.Faction.InternalName);
return; return;
} }

View File

@@ -98,7 +98,7 @@ namespace OpenRA.Mods.Common.Traits
self.QueueActivity(false, new CallFunc(() => self.QueueActivity(false, new CallFunc(() =>
{ {
if (!string.IsNullOrEmpty(info.UndeploySound)) if (!string.IsNullOrEmpty(info.UndeploySound))
Sound.Play(info.UndeploySound, self.CenterPosition); Game.Sound.Play(info.UndeploySound, self.CenterPosition);
if (string.IsNullOrEmpty(info.DeployAnimation)) if (string.IsNullOrEmpty(info.DeployAnimation))
{ {
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.Traits
self.QueueActivity(new CallFunc(() => self.QueueActivity(new CallFunc(() =>
{ {
if (!string.IsNullOrEmpty(info.DeploySound)) if (!string.IsNullOrEmpty(info.DeploySound))
Sound.Play(info.DeploySound, self.CenterPosition); Game.Sound.Play(info.DeploySound, self.CenterPosition);
if (string.IsNullOrEmpty(info.DeployAnimation)) if (string.IsNullOrEmpty(info.DeployAnimation))
return; return;

View File

@@ -73,7 +73,7 @@ namespace OpenRA.Mods.Common.Traits
if (cachedDisabled != disabled) if (cachedDisabled != disabled)
{ {
Sound.Play(disabled ? info.DisableSound : info.EnableSound, self.CenterPosition); Game.Sound.Play(disabled ? info.DisableSound : info.EnableSound, self.CenterPosition);
desiredRange = disabled ? WDist.Zero : info.Range; desiredRange = disabled ? WDist.Zero : info.Range;
cachedDisabled = disabled; cachedDisabled = disabled;
} }

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Common.Traits
var type = Info.VoiceSet.ToLowerInvariant(); var type = Info.VoiceSet.ToLowerInvariant();
var volume = Info.Volume; var volume = Info.Volume;
return Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, true, WPos.Zero, volume, true); return Game.Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, true, WPos.Zero, volume, true);
} }
public bool PlayVoiceLocal(Actor self, string phrase, string variant, float volume) public bool PlayVoiceLocal(Actor self, string phrase, string variant, float volume)
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits
return false; return false;
var type = Info.VoiceSet.ToLowerInvariant(); var type = Info.VoiceSet.ToLowerInvariant();
return Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, false, self.CenterPosition, volume, true); return Game.Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, false, self.CenterPosition, volume, true);
} }
public bool HasVoice(Actor self, string voice) public bool HasVoice(Actor self, string voice)

View File

@@ -134,7 +134,7 @@ namespace OpenRA.Mods.Common.Traits
if (!SongExists(currentSong)) if (!SongExists(currentSong))
return; return;
Sound.PlayMusicThen(currentSong, () => Game.Sound.PlayMusicThen(currentSong, () =>
{ {
if (!CurrentSongIsBackground && !Game.Settings.Sound.Repeat) if (!CurrentSongIsBackground && !Game.Settings.Sound.Repeat)
currentSong = GetNextSong(); currentSong = GetNextSong();
@@ -161,7 +161,7 @@ namespace OpenRA.Mods.Common.Traits
currentSong = music; currentSong = music;
CurrentSongIsBackground = false; CurrentSongIsBackground = false;
Sound.PlayMusicThen(music, onComplete); Game.Sound.PlayMusicThen(music, onComplete);
} }
public MusicInfo GetNextSong() public MusicInfo GetNextSong()
@@ -195,7 +195,7 @@ namespace OpenRA.Mods.Common.Traits
public void Stop() public void Stop()
{ {
currentSong = null; currentSong = null;
Sound.StopMusic(); Game.Sound.StopMusic();
if (currentBackgroundSong != null) if (currentBackgroundSong != null)
{ {
@@ -208,7 +208,7 @@ namespace OpenRA.Mods.Common.Traits
public void Disposing(Actor self) public void Disposing(Actor self)
{ {
if (currentSong != null) if (currentSong != null)
Sound.StopMusic(); Game.Sound.StopMusic();
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits
public void WorldLoaded(World world, WorldRenderer wr) public void WorldLoaded(World world, WorldRenderer wr)
{ {
Sound.PlayNotification(world.Map.Rules, null, "Speech", info.Notification, world.RenderPlayer == null ? null : world.RenderPlayer.Faction.InternalName); Game.Sound.PlayNotification(world.Map.Rules, null, "Speech", info.Notification, world.RenderPlayer == null ? null : world.RenderPlayer.Faction.InternalName);
} }
} }
} }

View File

@@ -92,7 +92,7 @@ namespace OpenRA.Mods.Common.Warheads
world.AddFrameEndTask(w => w.Add(new Explosion(w, pos, Explosion, palette))); world.AddFrameEndTask(w => w.Add(new Explosion(w, pos, Explosion, palette)));
if (ImpactSound != null) if (ImpactSound != null)
Sound.Play(ImpactSound, pos); Game.Sound.Play(ImpactSound, pos);
} }
public bool IsValidImpact(WPos pos, Actor firedBy) public bool IsValidImpact(WPos pos, Actor firedBy)

View File

@@ -126,10 +126,10 @@ namespace OpenRA.Mods.Common.Widgets
if (!IsDisabled()) if (!IsDisabled())
{ {
OnKeyPress(e); OnKeyPress(e);
Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
} }
else else
Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null); Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
return true; return true;
} }
@@ -167,12 +167,12 @@ namespace OpenRA.Mods.Common.Widgets
{ {
OnMouseDown(mi); OnMouseDown(mi);
Depressed = true; Depressed = true;
Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
} }
else else
{ {
YieldMouseFocus(mi); YieldMouseFocus(mi);
Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null); Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
} }
} }
else if (mi.Event == MouseInputEvent.Move && HasMouseFocus) else if (mi.Event == MouseInputEvent.Move && HasMouseFocus)

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Mods.Common.Widgets
recentLines.Add(new ChatLine(from, text, Game.LocalTick + RemoveTime, c)); recentLines.Add(new ChatLine(from, text, Game.LocalTick + RemoveTime, c));
if (Notification != null) if (Notification != null)
Sound.Play(Notification); Game.Sound.Play(Notification);
while (recentLines.Count > LogLength) while (recentLines.Count > LogLength)
recentLines.RemoveAt(0); recentLines.RemoveAt(0);

View File

@@ -84,7 +84,7 @@ namespace OpenRA.Mods.Common.Widgets
// Mask to prevent any clicks from being sent to other widgets // Mask to prevent any clicks from being sent to other widgets
fullscreenMask = new MaskWidget(); fullscreenMask = new MaskWidget();
fullscreenMask.Bounds = new Rectangle(0, 0, Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height); fullscreenMask.Bounds = new Rectangle(0, 0, Game.Renderer.Resolution.Width, Game.Renderer.Resolution.Height);
fullscreenMask.OnMouseDown += mi => { Sound.PlayNotification(this.ModRules, null, "Sounds", "ClickSound", null); RemovePanel(); }; fullscreenMask.OnMouseDown += mi => { Game.Sound.PlayNotification(this.ModRules, null, "Sounds", "ClickSound", null); RemovePanel(); };
if (onCancel != null) if (onCancel != null)
fullscreenMask.OnMouseDown += _ => onCancel(); fullscreenMask.OnMouseDown += _ => onCancel();

View File

@@ -203,7 +203,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
chatScrollPanel.ScrollToBottom(smooth: true); chatScrollPanel.ScrollToBottom(smooth: true);
if (!replayCache) if (!replayCache)
Sound.PlayNotification(modRules, null, "Sounds", "ChatLine", null); Game.Sound.PlayNotification(modRules, null, "Sounds", "ChatLine", null);
} }
} }
} }

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Action onQuit = () => Action onQuit = () =>
{ {
if (world.Type == WorldType.Regular) if (world.Type == WorldType.Regular)
Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Faction.InternalName); Game.Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Faction.InternalName);
leaving = true; leaving = true;

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive); .Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
if (radarEnabled != cachedRadarEnabled) if (radarEnabled != cachedRadarEnabled)
Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
cachedRadarEnabled = radarEnabled; cachedRadarEnabled = radarEnabled;
}; };

View File

@@ -653,7 +653,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (scrolledToBottom) if (scrolledToBottom)
chatPanel.ScrollToBottom(smooth: true); chatPanel.ScrollToBottom(smooth: true);
Sound.PlayNotification(modRules, null, "Sounds", "ChatLine", null); Game.Sound.PlayNotification(modRules, null, "Sounds", "ChatLine", null);
} }
bool SwitchTeamChat() bool SwitchTeamChat()

View File

@@ -213,18 +213,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
float cachedMusicVolume; float cachedMusicVolume;
void MuteSounds() void MuteSounds()
{ {
cachedSoundVolume = Sound.SoundVolume; cachedSoundVolume = Game.Sound.SoundVolume;
cachedMusicVolume = Sound.MusicVolume; cachedMusicVolume = Game.Sound.MusicVolume;
Sound.SoundVolume = Sound.MusicVolume = 0; Game.Sound.SoundVolume = Game.Sound.MusicVolume = 0;
} }
void UnMuteSounds() void UnMuteSounds()
{ {
if (cachedSoundVolume > 0) if (cachedSoundVolume > 0)
Sound.SoundVolume = cachedSoundVolume; Game.Sound.SoundVolume = cachedSoundVolume;
if (cachedMusicVolume > 0) if (cachedMusicVolume > 0)
Sound.MusicVolume = cachedMusicVolume; Game.Sound.MusicVolume = cachedMusicVolume;
} }
void PlayVideo(VqaPlayerWidget player, string video, PlayingVideo pv, Action onComplete) void PlayVideo(VqaPlayerWidget player, string video, PlayingVideo pv, Action onComplete)

View File

@@ -41,12 +41,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var playButton = panel.Get<ButtonWidget>("BUTTON_PLAY"); var playButton = panel.Get<ButtonWidget>("BUTTON_PLAY");
playButton.OnClick = Play; playButton.OnClick = Play;
playButton.IsDisabled = noMusic; playButton.IsDisabled = noMusic;
playButton.IsVisible = () => !Sound.MusicPlaying; playButton.IsVisible = () => !Game.Sound.MusicPlaying;
var pauseButton = panel.Get<ButtonWidget>("BUTTON_PAUSE"); var pauseButton = panel.Get<ButtonWidget>("BUTTON_PAUSE");
pauseButton.OnClick = Sound.PauseMusic; pauseButton.OnClick = Game.Sound.PauseMusic;
pauseButton.IsDisabled = noMusic; pauseButton.IsDisabled = noMusic;
pauseButton.IsVisible = () => Sound.MusicPlaying; pauseButton.IsVisible = () => Game.Sound.MusicPlaying;
var stopButton = panel.Get<ButtonWidget>("BUTTON_STOP"); var stopButton = panel.Get<ButtonWidget>("BUTTON_STOP");
stopButton.OnClick = () => { musicPlaylist.Stop(); }; stopButton.OnClick = () => { musicPlaylist.Stop(); };
@@ -75,8 +75,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (currentSong == null || musicPlaylist.CurrentSongIsBackground) if (currentSong == null || musicPlaylist.CurrentSongIsBackground)
return ""; return "";
var minutes = (int)Sound.MusicSeekPosition / 60; var minutes = (int)Game.Sound.MusicSeekPosition / 60;
var seconds = (int)Sound.MusicSeekPosition % 60; var seconds = (int)Game.Sound.MusicSeekPosition % 60;
var totalMinutes = currentSong.Length / 60; var totalMinutes = currentSong.Length / 60;
var totalSeconds = currentSong.Length % 60; var totalSeconds = currentSong.Length % 60;
@@ -84,8 +84,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}; };
var musicSlider = panel.Get<SliderWidget>("MUSIC_SLIDER"); var musicSlider = panel.Get<SliderWidget>("MUSIC_SLIDER");
musicSlider.OnChange += x => Sound.MusicVolume = x; musicSlider.OnChange += x => Game.Sound.MusicVolume = x;
musicSlider.Value = Sound.MusicVolume; musicSlider.Value = Game.Sound.MusicVolume;
var installButton = widget.GetOrNull<ButtonWidget>("INSTALL_BUTTON"); var installButton = widget.GetOrNull<ButtonWidget>("INSTALL_BUTTON");
if (installButton != null) if (installButton != null)
@@ -108,10 +108,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (musicPlaylist.CurrentSongIsBackground && currentSong != null) if (musicPlaylist.CurrentSongIsBackground && currentSong != null)
currentSong = null; currentSong = null;
if (Sound.CurrentMusic == null || currentSong == Sound.CurrentMusic || musicPlaylist.CurrentSongIsBackground) if (Game.Sound.CurrentMusic == null || currentSong == Game.Sound.CurrentMusic || musicPlaylist.CurrentSongIsBackground)
return; return;
currentSong = Sound.CurrentMusic; currentSong = Game.Sound.CurrentMusic;
}; };
} }

View File

@@ -307,11 +307,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
BindSliderPref(panel, "VIDEO_VOLUME", ss, "VideoVolume"); BindSliderPref(panel, "VIDEO_VOLUME", ss, "VideoVolume");
// Update volume immediately // Update volume immediately
panel.Get<SliderWidget>("SOUND_VOLUME").OnChange += x => Sound.SoundVolume = x; panel.Get<SliderWidget>("SOUND_VOLUME").OnChange += x => Game.Sound.SoundVolume = x;
panel.Get<SliderWidget>("MUSIC_VOLUME").OnChange += x => Sound.MusicVolume = x; panel.Get<SliderWidget>("MUSIC_VOLUME").OnChange += x => Game.Sound.MusicVolume = x;
panel.Get<SliderWidget>("VIDEO_VOLUME").OnChange += x => Sound.VideoVolume = x; panel.Get<SliderWidget>("VIDEO_VOLUME").OnChange += x => Game.Sound.VideoVolume = x;
var devices = Sound.AvailableDevices(); var devices = Game.Sound.AvailableDevices();
soundDevice = devices.FirstOrDefault(d => d.Engine == ss.Engine && d.Device == ss.Device) ?? devices.First(); soundDevice = devices.FirstOrDefault(d => d.Engine == ss.Engine && d.Device == ss.Device) ?? devices.First();
var audioDeviceDropdown = panel.Get<DropDownButtonWidget>("AUDIO_DEVICE"); var audioDeviceDropdown = panel.Get<DropDownButtonWidget>("AUDIO_DEVICE");
@@ -339,12 +339,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
ss.Engine = dss.Engine; ss.Engine = dss.Engine;
panel.Get<SliderWidget>("SOUND_VOLUME").Value = ss.SoundVolume; panel.Get<SliderWidget>("SOUND_VOLUME").Value = ss.SoundVolume;
Sound.SoundVolume = ss.SoundVolume; Game.Sound.SoundVolume = ss.SoundVolume;
panel.Get<SliderWidget>("MUSIC_VOLUME").Value = ss.MusicVolume; panel.Get<SliderWidget>("MUSIC_VOLUME").Value = ss.MusicVolume;
Sound.MusicVolume = ss.MusicVolume; Game.Sound.MusicVolume = ss.MusicVolume;
panel.Get<SliderWidget>("VIDEO_VOLUME").Value = ss.VideoVolume; panel.Get<SliderWidget>("VIDEO_VOLUME").Value = ss.VideoVolume;
Sound.VideoVolume = ss.VideoVolume; Game.Sound.VideoVolume = ss.VideoVolume;
soundDevice = Sound.AvailableDevices().First(); soundDevice = Game.Sound.AvailableDevices().First();
}; };
} }

View File

@@ -220,14 +220,14 @@ namespace OpenRA.Mods.Common.Widgets
{ {
if (PickUpCompletedBuildingIcon(icon, item)) if (PickUpCompletedBuildingIcon(icon, item))
{ {
Sound.Play(TabClick); Game.Sound.Play(TabClick);
return true; return true;
} }
if (item != null && item.Paused) if (item != null && item.Paused)
{ {
// Resume a paused item // Resume a paused item
Sound.Play(TabClick); Game.Sound.Play(TabClick);
World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, false)); World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, false));
return true; return true;
} }
@@ -235,8 +235,8 @@ namespace OpenRA.Mods.Common.Widgets
if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name)) if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name))
{ {
// Queue a new item // Queue a new item
Sound.Play(TabClick); Game.Sound.Play(TabClick);
Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, World.LocalPlayer.Faction.InternalName); Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, World.LocalPlayer.Faction.InternalName);
World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name, World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name,
handleMultiple ? 5 : 1)); handleMultiple ? 5 : 1));
return true; return true;
@@ -250,19 +250,19 @@ namespace OpenRA.Mods.Common.Widgets
if (item == null) if (item == null)
return false; return false;
Sound.Play(TabClick); Game.Sound.Play(TabClick);
if (item.Paused || item.Done || item.TotalCost == item.RemainingCost) if (item.Paused || item.Done || item.TotalCost == item.RemainingCost)
{ {
// Instant cancel of things we have not started yet and things that are finished // Instant cancel of things we have not started yet and things that are finished
Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Faction.InternalName); Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Faction.InternalName);
World.IssueOrder(Order.CancelProduction(CurrentQueue.Actor, icon.Name, World.IssueOrder(Order.CancelProduction(CurrentQueue.Actor, icon.Name,
handleMultiple ? 5 : 1)); handleMultiple ? 5 : 1));
} }
else else
{ {
// Pause an existing item // Pause an existing item
Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, World.LocalPlayer.Faction.InternalName); Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, World.LocalPlayer.Faction.InternalName);
World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, true)); World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, true));
} }
@@ -276,7 +276,7 @@ namespace OpenRA.Mods.Common.Widgets
: HandleRightClick(item, icon, handleMultiple); : HandleRightClick(item, icon, handleMultiple);
if (!handled) if (!handled)
Sound.Play(DisabledTabClick); Game.Sound.Play(DisabledTabClick);
return true; return true;
} }

View File

@@ -261,9 +261,9 @@ namespace OpenRA.Mods.Common.Widgets
if (leftPressed || rightPressed) if (leftPressed || rightPressed)
{ {
if ((leftPressed && !leftDisabled) || (rightPressed && !rightDisabled)) if ((leftPressed && !leftDisabled) || (rightPressed && !rightDisabled))
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
else else
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickDisabledSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickDisabledSound", null);
} }
// Check production tabs // Check production tabs
@@ -271,7 +271,7 @@ namespace OpenRA.Mods.Common.Widgets
if (offsetloc.X > 0 && offsetloc.X < contentWidth) if (offsetloc.X > 0 && offsetloc.X < contentWidth)
{ {
CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X / (TabWidth - 1)].Queue; CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X / (TabWidth - 1)].Queue;
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
} }
return true; return true;
@@ -286,12 +286,12 @@ namespace OpenRA.Mods.Common.Widgets
if (hotkey == Game.Settings.Keys.NextProductionTabKey) if (hotkey == Game.Settings.Keys.NextProductionTabKey)
{ {
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
return SelectNextTab(false); return SelectNextTab(false);
} }
else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey) else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey)
{ {
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
return SelectNextTab(true); return SelectNextTab(true);
} }

View File

@@ -335,7 +335,7 @@ namespace OpenRA.Mods.Common.Widgets
// Enable/Disable the radar // Enable/Disable the radar
var enabled = IsEnabled(); var enabled = IsEnabled();
if (enabled != cachedEnabled) if (enabled != cachedEnabled)
Sound.Play(enabled ? RadarOnlineSound : RadarOfflineSound); Game.Sound.Play(enabled ? RadarOnlineSound : RadarOfflineSound);
cachedEnabled = enabled; cachedEnabled = enabled;
if (enabled) if (enabled)

View File

@@ -321,7 +321,7 @@ namespace OpenRA.Mods.Common.Widgets
lastMouseLocation = mi.Location; lastMouseLocation = mi.Location;
if (mi.Event == MouseInputEvent.Down && ((upPressed && !upDisabled) || (downPressed && !downDisabled) || thumbPressed)) if (mi.Event == MouseInputEvent.Down && ((upPressed && !upDisabled) || (downPressed && !downDisabled) || thumbPressed))
Sound.PlayNotification(modRules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(modRules, null, "Sounds", "ClickSound", null);
} }
return upPressed || downPressed || thumbPressed; return upPressed || downPressed || thumbPressed;

View File

@@ -113,7 +113,7 @@ namespace OpenRA.Mods.Common.Widgets
protected void ClickIcon(SupportPowerIcon clicked) protected void ClickIcon(SupportPowerIcon clicked)
{ {
if (!clicked.Power.Active) if (!clicked.Power.Active)
Sound.PlayToPlayer(spm.Self.Owner, clicked.Power.Info.InsufficientPowerSound); Game.Sound.PlayToPlayer(spm.Self.Owner, clicked.Power.Info.InsufficientPowerSound);
else else
clicked.Power.Target(); clicked.Power.Target();
} }

View File

@@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Widgets
stopped = true; stopped = true;
paused = true; paused = true;
Sound.StopVideo(); Game.Sound.StopVideo();
onComplete = () => { }; onComplete = () => { };
invLength = video.Framerate * 1f / video.Frames; invLength = video.Framerate * 1f / video.Frames;
@@ -113,7 +113,7 @@ namespace OpenRA.Mods.Common.Widgets
{ {
var nextFrame = 0; var nextFrame = 0;
if (video.HasAudio) if (video.HasAudio)
nextFrame = (int)float2.Lerp(0, video.Frames, Sound.VideoSeekPosition * invLength); nextFrame = (int)float2.Lerp(0, video.Frames, Game.Sound.VideoSeekPosition * invLength);
else else
nextFrame = video.CurrentFrame + 1; nextFrame = video.CurrentFrame + 1;
@@ -176,9 +176,9 @@ namespace OpenRA.Mods.Common.Widgets
onComplete = after; onComplete = after;
if (stopped) if (stopped)
Sound.PlayVideo(video.AudioData, video.AudioChannels, video.SampleBits, video.SampleRate); Game.Sound.PlayVideo(video.AudioData, video.AudioChannels, video.SampleBits, video.SampleRate);
else else
Sound.PlayVideo(); Game.Sound.PlayVideo();
stopped = paused = false; stopped = paused = false;
} }
@@ -189,7 +189,7 @@ namespace OpenRA.Mods.Common.Widgets
return; return;
paused = true; paused = true;
Sound.PauseVideo(); Game.Sound.PauseVideo();
} }
public void Stop() public void Stop()
@@ -199,7 +199,7 @@ namespace OpenRA.Mods.Common.Widgets
stopped = true; stopped = true;
paused = true; paused = true;
Sound.StopVideo(); Game.Sound.StopVideo();
video.Reset(); video.Reset();
videoSprite.Sheet.GetTexture().SetData(video.FrameData); videoSprite.Sheet.GetTexture().SetData(video.FrameData);
world.AddFrameEndTask(_ => onComplete()); world.AddFrameEndTask(_ => onComplete());

View File

@@ -241,7 +241,7 @@ namespace OpenRA.Mods.Common.Widgets
world.Selection.Combine(world, new Actor[] { next }, false, true); world.Selection.Combine(world, new Actor[] { next }, false, true);
Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null); Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
return ToSelection(); return ToSelection();
} }

View File

@@ -105,7 +105,7 @@ namespace OpenRA.Mods.D2k.Activities
void PlayAttack(Actor self, WPos attackPosition, List<Player> affectedPlayers) void PlayAttack(Actor self, WPos attackPosition, List<Player> affectedPlayers)
{ {
withSpriteBody.PlayCustomAnimation(self, sandworm.Info.MouthSequence); withSpriteBody.PlayCustomAnimation(self, sandworm.Info.MouthSequence);
Sound.Play(swallow.Info.WormAttackSound, self.CenterPosition); Game.Sound.Play(swallow.Info.WormAttackSound, self.CenterPosition);
Game.RunAfterDelay(1000, () => Game.RunAfterDelay(1000, () =>
{ {
@@ -116,7 +116,7 @@ namespace OpenRA.Mods.D2k.Activities
void NotifyPlayer(Player player, WPos location) void NotifyPlayer(Player player, WPos location)
{ {
Sound.PlayNotification(player.World.Map.Rules, player, "Speech", swallow.Info.WormAttackNotification, player.Faction.InternalName); Game.Sound.PlayNotification(player.World.Map.Rules, player, "Speech", swallow.Info.WormAttackNotification, player.Faction.InternalName);
if (player == player.World.RenderPlayer) if (player == player.World.RenderPlayer)
radarPings.Add(() => true, location, Color.Red, 50); radarPings.Add(() => true, location, Color.Red, 50);

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA.Activities
self.Dispose(); self.Dispose();
if (target.Info.HasTraitInfo<BuildingInfo>()) if (target.Info.HasTraitInfo<BuildingInfo>())
Sound.PlayToPlayer(self.Owner, "bldginf1.aud"); Game.Sound.PlayToPlayer(self.Owner, "bldginf1.aud");
} }
} }
} }

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Mods.RA.Activities
self.Trait<WithInfantryBody>().Attacking(self, Target.FromActor(target)); self.Trait<WithInfantryBody>().Attacking(self, Target.FromActor(target));
if (weapon.Report != null && weapon.Report.Any()) if (weapon.Report != null && weapon.Report.Any())
Sound.Play(weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); Game.Sound.Play(weapon.Report.Random(self.World.SharedRandom), self.CenterPosition);
} }
public override Activity Tick(Actor self) public override Activity Tick(Actor self)

View File

@@ -59,8 +59,8 @@ namespace OpenRA.Mods.RA.Activities
destination = bestCell.Value; destination = bestCell.Value;
Sound.Play(sound, self.CenterPosition); Game.Sound.Play(sound, self.CenterPosition);
Sound.Play(sound, self.World.Map.CenterOfCell(destination)); Game.Sound.Play(sound, self.World.Map.CenterOfCell(destination));
self.Trait<IPositionable>().SetPosition(self, destination); self.Trait<IPositionable>().SetPosition(self, destination);
self.Generation++; self.Generation++;

View File

@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Traits
targetResources.TakeCash(toTake); targetResources.TakeCash(toTake);
spyResources.GiveCash(toGive); spyResources.GiveCash(toGive);
Sound.PlayToPlayer(self.Owner, info.SoundToVictim); Game.Sound.PlayToPlayer(self.Owner, info.SoundToVictim);
self.World.AddFrameEndTask(w => w.Add(new FloatingText(self.CenterPosition, infiltrator.Owner.Color.RGB, FloatingText.FormatCashTick(toGive), 30))); self.World.AddFrameEndTask(w => w.Add(new FloatingText(self.CenterPosition, infiltrator.Owner.Color.RGB, FloatingText.FormatCashTick(toGive), 30)));
} }

View File

@@ -152,9 +152,9 @@ namespace OpenRA.Mods.RA.Traits
wfsb.PlayCustomAnimationRepeating(self, info.ThumpSequence); wfsb.PlayCustomAnimationRepeating(self, info.ThumpSequence);
deployed = true; deployed = true;
self.QueueActivity(new Wait(info.ChargeDelay, false)); self.QueueActivity(new Wait(info.ChargeDelay, false));
self.QueueActivity(new CallFunc(() => Sound.Play(info.ChargeSound, self.CenterPosition))); self.QueueActivity(new CallFunc(() => Game.Sound.Play(info.ChargeSound, self.CenterPosition)));
self.QueueActivity(new Wait(info.DetonationDelay, false)); self.QueueActivity(new Wait(info.DetonationDelay, false));
self.QueueActivity(new CallFunc(() => Sound.Play(info.DetonationSound, self.CenterPosition))); self.QueueActivity(new CallFunc(() => Game.Sound.Play(info.DetonationSound, self.CenterPosition)));
self.QueueActivity(new CallFunc(Detonate)); self.QueueActivity(new CallFunc(Detonate));
} }

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Traits
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
{ {
Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound);
return new SelectTarget(Self.World, order, manager, this); return new SelectTarget(Self.World, order, manager, this);
} }

View File

@@ -111,7 +111,7 @@ namespace OpenRA.Mods.RA.Traits
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
Sound.PlayToPlayer(self.Owner, Info.LaunchSound); Game.Sound.PlayToPlayer(self.Owner, Info.LaunchSound);
w.Add(new SatelliteLaunch(self)); w.Add(new SatelliteLaunch(self));

View File

@@ -147,7 +147,7 @@ namespace OpenRA.Mods.RA.Traits
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
var notification = self.Owner.IsAlliedWith(self.World.RenderPlayer) ? Info.LaunchSound : Info.IncomingSound; var notification = self.Owner.IsAlliedWith(self.World.RenderPlayer) ? Info.LaunchSound : Info.IncomingSound;
Sound.Play(notification); Game.Sound.Play(notification);
Actor distanceTestActor = null; Actor distanceTestActor = null;

View File

@@ -21,7 +21,7 @@ using OpenTK.Audio.OpenAL;
namespace OpenRA.Platforms.Default namespace OpenRA.Platforms.Default
{ {
class OpenAlSoundEngine : ISoundEngine sealed class OpenAlSoundEngine : ISoundEngine
{ {
public SoundDevice[] AvailableDevices() public SoundDevice[] AvailableDevices()
{ {
@@ -49,6 +49,7 @@ namespace OpenRA.Platforms.Default
const int GroupDistanceSqr = GroupDistance * GroupDistance; const int GroupDistanceSqr = GroupDistance * GroupDistance;
const int PoolSize = 32; const int PoolSize = 32;
IntPtr device;
float volume = 1f; float volume = 1f;
Dictionary<int, PoolSlot> sourcePool = new Dictionary<int, PoolSlot>(); Dictionary<int, PoolSlot> sourcePool = new Dictionary<int, PoolSlot>();
@@ -88,16 +89,16 @@ namespace OpenRA.Platforms.Default
else else
Console.WriteLine("Using default device"); Console.WriteLine("Using default device");
var dev = Alc.OpenDevice(Game.Settings.Sound.Device); device = Alc.OpenDevice(Game.Settings.Sound.Device);
if (dev == IntPtr.Zero) if (device == IntPtr.Zero)
{ {
Console.WriteLine("Failed to open device. Falling back to default"); Console.WriteLine("Failed to open device. Falling back to default");
dev = Alc.OpenDevice(null); device = Alc.OpenDevice(null);
if (dev == IntPtr.Zero) if (device == IntPtr.Zero)
throw new InvalidOperationException("Can't create OpenAL device"); throw new InvalidOperationException("Can't create OpenAL device");
} }
var ctx = Alc.CreateContext(dev, (int[])null); var ctx = Alc.CreateContext(device, (int[])null);
if (ctx == ContextHandle.Zero) if (ctx == ContextHandle.Zero)
throw new InvalidOperationException("Can't create OpenAL context"); throw new InvalidOperationException("Can't create OpenAL context");
Alc.MakeContextCurrent(ctx); Alc.MakeContextCurrent(ctx);
@@ -286,6 +287,15 @@ namespace OpenRA.Platforms.Default
AL.Listener(ALListenerfv.Orientation, ref orientation); AL.Listener(ALListenerfv.Orientation, ref orientation);
AL.Listener(ALListenerf.EfxMetersPerUnit, .01f); AL.Listener(ALListenerf.EfxMetersPerUnit, .01f);
} }
public void Dispose()
{
if (device == IntPtr.Zero)
return;
Alc.CloseDevice(device);
device = IntPtr.Zero;
}
} }
class OpenAlSoundSource : ISoundSource class OpenAlSoundSource : ISoundSource

View File

@@ -12,7 +12,7 @@ using System;
namespace OpenRA.Platforms.Null namespace OpenRA.Platforms.Null
{ {
class NullSoundEngine : ISoundEngine sealed class NullSoundEngine : ISoundEngine
{ {
public SoundDevice[] AvailableDevices() public SoundDevice[] AvailableDevices()
{ {
@@ -42,6 +42,8 @@ namespace OpenRA.Platforms.Null
public void SetSoundVolume(float volume, ISound music, ISound video) { } public void SetSoundVolume(float volume, ISound music, ISound video) { }
public float Volume { get; set; } public float Volume { get; set; }
public void Dispose() { }
} }
class NullSoundSource : ISoundSource { } class NullSoundSource : ISoundSource { }