diff --git a/OpenRA.Game/Sound/Sound.cs b/OpenRA.Game/Sound/Sound.cs index dac136810c..d61a5ac692 100644 --- a/OpenRA.Game/Sound/Sound.cs +++ b/OpenRA.Game/Sound/Sound.cs @@ -32,6 +32,8 @@ namespace OpenRA Stream GetPCMInputStream(); } + public enum SoundType { World, UI } + public sealed class Sound : IDisposable { readonly ISoundEngine soundEngine; @@ -92,7 +94,7 @@ namespace OpenRA soundEngine.SetListenerPosition(position); } - ISound Play(Player player, string name, bool headRelative, WPos pos, float volumeModifier = 1f, bool loop = false) + ISound Play(SoundType type, Player player, string name, bool headRelative, WPos pos, float volumeModifier = 1f, bool loop = false) { if (string.IsNullOrEmpty(name)) return null; @@ -119,14 +121,14 @@ namespace OpenRA soundEngine.Volume = 1f; } - public ISound Play(string name) { return Play(null, name, true, WPos.Zero, 1f); } - public ISound Play(string name, WPos pos) { return Play(null, name, false, pos, 1f); } - public ISound Play(string name, float volumeModifier) { return Play(null, name, true, WPos.Zero, volumeModifier); } - public ISound Play(string name, WPos pos, float volumeModifier) { return Play(null, name, false, pos, volumeModifier); } - public ISound PlayToPlayer(Player player, string name) { return Play(player, name, true, WPos.Zero, 1f); } - public ISound PlayToPlayer(Player player, string name, WPos pos) { return Play(player, name, false, pos, 1f); } - public ISound PlayLooped(string name) { return PlayLooped(name, WPos.Zero); } - public ISound PlayLooped(string name, WPos pos) { return Play(null, name, true, pos, 1f, true); } + public ISound Play(SoundType type, string name) { return Play(type, null, name, true, WPos.Zero, 1f); } + public ISound Play(SoundType type, string name, WPos pos) { return Play(type, null, name, false, pos, 1f); } + public ISound Play(SoundType type, string name, float volumeModifier) { return Play(type, null, name, true, WPos.Zero, volumeModifier); } + public ISound Play(SoundType type, string name, WPos pos, float volumeModifier) { return Play(type, null, name, false, pos, volumeModifier); } + public ISound PlayToPlayer(SoundType type, Player player, string name) { return Play(type, player, name, true, WPos.Zero, 1f); } + public ISound PlayToPlayer(SoundType type, Player player, string name, WPos pos) { return Play(type, player, name, false, pos, 1f); } + public ISound PlayLooped(SoundType type, string name) { return PlayLooped(type, name, WPos.Zero); } + public ISound PlayLooped(SoundType type, string name, WPos pos) { return Play(type, null, name, true, pos, 1f, true); } public void PlayVideo(byte[] raw, int channels, int sampleBits, int sampleRate) { @@ -300,7 +302,7 @@ namespace OpenRA } // Returns true if played successfully - public bool PlayPredefined(Ruleset ruleset, Player p, Actor voicedActor, string type, string definition, string variant, + public bool PlayPredefined(SoundType soundType, Ruleset ruleset, Player p, Actor voicedActor, string type, string definition, string variant, bool relative, WPos pos, float volumeModifier, bool attenuateVolume) { if (ruleset == null) @@ -375,7 +377,7 @@ namespace OpenRA if (type == null || notification == null) return false; - return PlayPredefined(rules, player, null, type.ToLowerInvariant(), notification, variant, true, WPos.Zero, 1f, false); + return PlayPredefined(SoundType.UI, rules, player, null, type.ToLowerInvariant(), notification, variant, true, WPos.Zero, 1f, false); } public void Dispose() diff --git a/OpenRA.Mods.Cnc/Projectiles/IonCannon.cs b/OpenRA.Mods.Cnc/Projectiles/IonCannon.cs index cd1f938058..96dac28b53 100644 --- a/OpenRA.Mods.Cnc/Projectiles/IonCannon.cs +++ b/OpenRA.Mods.Cnc/Projectiles/IonCannon.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.Cnc.Effects anim.PlayThen(sequence, () => Finish(world)); if (weapon.Report != null && weapon.Report.Any()) - Game.Sound.Play(weapon.Report.Random(firedBy.World.SharedRandom), launchPos); + Game.Sound.Play(SoundType.World, weapon.Report.Random(firedBy.World.SharedRandom), launchPos); } public void Tick(World world) diff --git a/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs index 03cc029aaf..0c0e64e2f9 100644 --- a/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs +++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs @@ -71,7 +71,7 @@ namespace OpenRA.Mods.Cnc.Traits self.World.AddFrameEndTask(w => { PlayLaunchSounds(); - Game.Sound.Play(info.OnFireSound, self.World.Map.CenterOfCell(order.TargetLocation)); + Game.Sound.Play(SoundType.World, info.OnFireSound, self.World.Map.CenterOfCell(order.TargetLocation)); w.Add(new IonCannon(self.Owner, info.WeaponInfo, w, self.CenterPosition, order.TargetLocation, info.Effect, info.EffectSequence, info.EffectPalette, info.WeaponDelay)); diff --git a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs index 6f584e2fb4..c5a57c5ba4 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs @@ -59,7 +59,7 @@ namespace OpenRA.Mods.Common.Activities if (!playedSound && helicopter.Info.TakeoffSound != null && self.IsAtGroundLevel()) { - Game.Sound.Play(helicopter.Info.TakeoffSound); + Game.Sound.Play(SoundType.World, helicopter.Info.TakeoffSound); playedSound = true; } diff --git a/OpenRA.Mods.Common/Activities/Air/HeliLand.cs b/OpenRA.Mods.Common/Activities/Air/HeliLand.cs index 727f1dfe45..8012cfba0d 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliLand.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliLand.cs @@ -42,7 +42,7 @@ namespace OpenRA.Mods.Common.Activities if (!playedSound && helicopter.Info.LandingSound != null && !self.IsAtGroundLevel()) { - Game.Sound.Play(helicopter.Info.LandingSound); + Game.Sound.Play(SoundType.World, helicopter.Info.LandingSound); playedSound = true; } diff --git a/OpenRA.Mods.Common/Activities/Rearm.cs b/OpenRA.Mods.Common/Activities/Rearm.cs index 173f3e47b5..b15bea3146 100644 --- a/OpenRA.Mods.Common/Activities/Rearm.cs +++ b/OpenRA.Mods.Common/Activities/Rearm.cs @@ -64,7 +64,7 @@ namespace OpenRA.Mods.Common.Activities var sound = pool.Info.RearmSound; if (sound != null) - Game.Sound.PlayToPlayer(self.Owner, sound, self.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, self.Owner, sound, self.CenterPosition); ammoPoolsReloadTimes[pool] = pool.Info.ReloadDelay; } diff --git a/OpenRA.Mods.Common/Activities/Transform.cs b/OpenRA.Mods.Common/Activities/Transform.cs index 3fde4c1799..46ca3cad08 100644 --- a/OpenRA.Mods.Common/Activities/Transform.cs +++ b/OpenRA.Mods.Common/Activities/Transform.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.Common.Activities self.Dispose(); foreach (var s in Sounds) - Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, self.Owner, s, self.CenterPosition); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Notification, self.Owner.Faction.InternalName); diff --git a/OpenRA.Mods.Common/Projectiles/NukeLaunch.cs b/OpenRA.Mods.Common/Projectiles/NukeLaunch.cs index f8f0ce1be3..c9ada19373 100644 --- a/OpenRA.Mods.Common/Projectiles/NukeLaunch.cs +++ b/OpenRA.Mods.Common/Projectiles/NukeLaunch.cs @@ -60,7 +60,7 @@ namespace OpenRA.Mods.Common.Effects pos = launchPos; if (weapon.Report != null && weapon.Report.Any()) - Game.Sound.Play(weapon.Report.Random(firedBy.World.SharedRandom), pos); + Game.Sound.Play(SoundType.World, weapon.Report.Random(firedBy.World.SharedRandom), pos); if (skipAscent) ticks = turn; diff --git a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs index e7dd34b189..dfc7e6765e 100644 --- a/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs +++ b/OpenRA.Mods.Common/Scripting/Global/MediaGlobal.cs @@ -52,7 +52,8 @@ namespace OpenRA.Mods.Common.Scripting [Desc("Play a sound file")] public void PlaySound(string file) { - Game.Sound.Play(file); + // TODO: Investigate how scripts use this function, and think about exposing the UI vs World distinction if needed + Game.Sound.Play(SoundType.World, file); } [Desc("Play track defined in music.yaml or map.yaml, or keep track empty for playing a random song.")] diff --git a/OpenRA.Mods.Common/Traits/Armament.cs b/OpenRA.Mods.Common/Traits/Armament.cs index 06f493fc13..a3af586e38 100644 --- a/OpenRA.Mods.Common/Traits/Armament.cs +++ b/OpenRA.Mods.Common/Traits/Armament.cs @@ -245,7 +245,7 @@ namespace OpenRA.Mods.Common.Traits self.World.Add(projectile); if (args.Weapon.Report != null && args.Weapon.Report.Any()) - Game.Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); foreach (var na in self.TraitsImplementing()) na.Attacking(self, target, this, barrel); diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackCharge.cs b/OpenRA.Mods.Common/Traits/Attack/AttackCharge.cs index 6c7582ac19..1938155b3d 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackCharge.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackCharge.cs @@ -100,7 +100,7 @@ namespace OpenRA.Mods.Common.Traits notify.Charging(self, target); if (!string.IsNullOrEmpty(attack.info.ChargeAudio)) - Game.Sound.Play(attack.info.ChargeAudio, self.CenterPosition); + Game.Sound.Play(SoundType.World, attack.info.ChargeAudio, self.CenterPosition); return ActivityUtils.SequenceActivities(new Wait(attack.info.InitialChargeDelay), new ChargeFire(attack, target), this); } diff --git a/OpenRA.Mods.Common/Traits/Buildings/Building.cs b/OpenRA.Mods.Common/Traits/Buildings/Building.cs index 34c49e7bd9..be480f8d25 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Building.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Building.cs @@ -236,7 +236,7 @@ namespace OpenRA.Mods.Common.Traits RemoveSmudges(); foreach (var s in Info.UndeploySounds) - Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, self.Owner, s, self.CenterPosition); } void INotifyTransform.OnTransform(Actor self) { } diff --git a/OpenRA.Mods.Common/Traits/Buildings/Gate.cs b/OpenRA.Mods.Common/Traits/Buildings/Gate.cs index 898bd85a85..4ba1ca58cc 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Gate.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Gate.cs @@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Traits // Gate was fully open if (Position == OpenPosition) { - Game.Sound.Play(info.ClosingSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.ClosingSound, self.CenterPosition); self.World.ActorMap.AddInfluence(self, this); } @@ -72,7 +72,7 @@ namespace OpenRA.Mods.Common.Traits { // Gate was fully closed if (Position == 0) - Game.Sound.Play(info.OpeningSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.OpeningSound, self.CenterPosition); Position++; diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 3e5706a8b8..2ddfab5bcf 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -148,7 +148,7 @@ namespace OpenRA.Mods.Common.Traits cloakedToken = upgradeManager.GrantCondition(self, Info.CloakedCondition); if (!self.TraitsImplementing().Any(a => a != this && a.Cloaked)) - Game.Sound.Play(Info.CloakSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, Info.CloakSound, self.CenterPosition); } else if (!isCloaked && wasCloaked) { @@ -156,7 +156,7 @@ namespace OpenRA.Mods.Common.Traits cloakedToken = upgradeManager.RevokeCondition(self, cloakedToken); if (!self.TraitsImplementing().Any(a => a != this && a.Cloaked)) - Game.Sound.Play(Info.UncloakSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, Info.UncloakSound, self.CenterPosition); } wasCloaked = isCloaked; diff --git a/OpenRA.Mods.Common/Traits/Crates/CrateAction.cs b/OpenRA.Mods.Common/Traits/Crates/CrateAction.cs index 2d55f69fe3..3b302c0a78 100644 --- a/OpenRA.Mods.Common/Traits/Crates/CrateAction.cs +++ b/OpenRA.Mods.Common/Traits/Crates/CrateAction.cs @@ -73,7 +73,7 @@ namespace OpenRA.Mods.Common.Traits public virtual void Activate(Actor collector) { - Game.Sound.PlayToPlayer(collector.Owner, info.Notification); + Game.Sound.PlayToPlayer(SoundType.World, collector.Owner, info.Notification); if (info.Effect != null) collector.World.AddFrameEndTask(w => w.Add(new CrateEffect(collector, info.Effect, info.Palette))); diff --git a/OpenRA.Mods.Common/Traits/Crushable.cs b/OpenRA.Mods.Common/Traits/Crushable.cs index 23c44f10ac..def92d8b5d 100644 --- a/OpenRA.Mods.Common/Traits/Crushable.cs +++ b/OpenRA.Mods.Common/Traits/Crushable.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Traits if (!CrushableInner(crushClasses, crusher.Owner)) return; - Game.Sound.Play(info.CrushSound, crusher.CenterPosition); + Game.Sound.Play(SoundType.World, info.CrushSound, crusher.CenterPosition); self.Kill(crusher); } diff --git a/OpenRA.Mods.Common/Traits/EjectOnDeath.cs b/OpenRA.Mods.Common/Traits/EjectOnDeath.cs index 1f9d99434a..b04bbaa52b 100644 --- a/OpenRA.Mods.Common/Traits/EjectOnDeath.cs +++ b/OpenRA.Mods.Common/Traits/EjectOnDeath.cs @@ -82,7 +82,7 @@ namespace OpenRA.Mods.Common.Traits w.Add(pilot); pilot.QueueActivity(new Parachute(pilot, cp)); }); - Game.Sound.Play(info.ChuteSound, cp); + Game.Sound.Play(SoundType.World, info.ChuteSound, cp); } else { diff --git a/OpenRA.Mods.Common/Traits/Explodes.cs b/OpenRA.Mods.Common/Traits/Explodes.cs index 3fd58b3dd3..8173e72b45 100644 --- a/OpenRA.Mods.Common/Traits/Explodes.cs +++ b/OpenRA.Mods.Common/Traits/Explodes.cs @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits return; if (weapon.Report != null && weapon.Report.Any()) - Game.Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); if (info.Type == ExplosionType.Footprint && buildingInfo != null) { diff --git a/OpenRA.Mods.Common/Traits/ParaDrop.cs b/OpenRA.Mods.Common/Traits/ParaDrop.cs index 68e1c99a75..30f2ae4ce3 100644 --- a/OpenRA.Mods.Common/Traits/ParaDrop.cs +++ b/OpenRA.Mods.Common/Traits/ParaDrop.cs @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits w.Add(a); a.QueueActivity(new Parachute(a, self.CenterPosition)); }); - Game.Sound.Play(info.ChuteSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.ChuteSound, self.CenterPosition); } static bool IsSuitableCell(Actor actorToDrop, CPos p) diff --git a/OpenRA.Mods.Common/Traits/Parachutable.cs b/OpenRA.Mods.Common/Traits/Parachutable.cs index 7301c197ef..4d705f8b90 100644 --- a/OpenRA.Mods.Common/Traits/Parachutable.cs +++ b/OpenRA.Mods.Common/Traits/Parachutable.cs @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits var onWater = info.WaterTerrainTypes.Contains(self.World.Map.GetTerrainInfo(cell).Type); var sound = onWater ? info.WaterImpactSound : info.GroundImpactSound; - Game.Sound.Play(sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); var sequence = onWater ? info.WaterCorpseSequence : info.GroundCorpseSequence; var palette = onWater ? info.WaterCorpsePalette : info.GroundCorpsePalette; diff --git a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs index 0ca7bf6fe8..ea80e3001b 100644 --- a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs +++ b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs @@ -86,7 +86,7 @@ namespace OpenRA.Mods.Common.Traits if (playSounds) foreach (var s in buildingInfo.BuildSounds) - Game.Sound.PlayToPlayer(order.Player, s, building.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, order.Player, s, building.CenterPosition); playSounds = false; } @@ -110,7 +110,7 @@ namespace OpenRA.Mods.Common.Traits pluggable.EnablePlug(host, plugInfo.Type); foreach (var s in buildingInfo.BuildSounds) - Game.Sound.PlayToPlayer(order.Player, s, host.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, order.Player, s, host.CenterPosition); } else { @@ -126,7 +126,7 @@ namespace OpenRA.Mods.Common.Traits }); foreach (var s in buildingInfo.BuildSounds) - Game.Sound.PlayToPlayer(order.Player, s, building.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.World, order.Player, s, building.CenterPosition); } if (producer.Actor != null) diff --git a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs index 73a93a38c1..060ba6cfa0 100644 --- a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs +++ b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs @@ -86,7 +86,7 @@ namespace OpenRA.Mods.Common.Traits cargo.Delivered(self); self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit, factionVariant)); - Game.Sound.Play(info.ChuteSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.ChuteSound, self.CenterPosition); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.ReadyAudio, self.Owner.Faction.InternalName); })); diff --git a/OpenRA.Mods.Common/Traits/Sellable.cs b/OpenRA.Mods.Common/Traits/Sellable.cs index f31ac98497..a50cc69c66 100644 --- a/OpenRA.Mods.Common/Traits/Sellable.cs +++ b/OpenRA.Mods.Common/Traits/Sellable.cs @@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Traits self.CancelActivity(); foreach (var s in info.SellSounds) - Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); + Game.Sound.PlayToPlayer(SoundType.UI, self.Owner, s, self.CenterPosition); foreach (var ns in self.TraitsImplementing()) ns.Selling(self); diff --git a/OpenRA.Mods.Common/Traits/Sound/AmbientSound.cs b/OpenRA.Mods.Common/Traits/Sound/AmbientSound.cs index ecc872432d..1aba3c51db 100644 --- a/OpenRA.Mods.Common/Traits/Sound/AmbientSound.cs +++ b/OpenRA.Mods.Common/Traits/Sound/AmbientSound.cs @@ -50,9 +50,9 @@ namespace OpenRA.Mods.Common.Traits.Sound if (wasDisabled && Info.Interval <= 0) { if (self.OccupiesSpace != null) - currentSound = Game.Sound.PlayLooped(Info.SoundFile, self.CenterPosition); + currentSound = Game.Sound.PlayLooped(SoundType.World, Info.SoundFile, self.CenterPosition); else - currentSound = Game.Sound.PlayLooped(Info.SoundFile); + currentSound = Game.Sound.PlayLooped(SoundType.World, Info.SoundFile); } wasDisabled = false; @@ -66,9 +66,9 @@ namespace OpenRA.Mods.Common.Traits.Sound interval = Info.Interval; if (self.OccupiesSpace != null) - Game.Sound.Play(Info.SoundFile, self.CenterPosition); + Game.Sound.Play(SoundType.World, Info.SoundFile, self.CenterPosition); else - Game.Sound.Play(Info.SoundFile); + Game.Sound.Play(SoundType.World, Info.SoundFile); } } } diff --git a/OpenRA.Mods.Common/Traits/Sound/AttackSounds.cs b/OpenRA.Mods.Common/Traits/Sound/AttackSounds.cs index 9e4e81339c..bf6fede1de 100644 --- a/OpenRA.Mods.Common/Traits/Sound/AttackSounds.cs +++ b/OpenRA.Mods.Common/Traits/Sound/AttackSounds.cs @@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Traits.Sound void PlaySound(Actor self) { if (info.Sounds.Any()) - Game.Sound.Play(info.Sounds.Random(self.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, info.Sounds.Random(self.World.SharedRandom), self.CenterPosition); } void INotifyAttack.Attacking(Actor self, Target target, Armament a, Barrel barrel) diff --git a/OpenRA.Mods.Common/Traits/Sound/SoundOnDamageTransition.cs b/OpenRA.Mods.Common/Traits/Sound/SoundOnDamageTransition.cs index 6c2e1050a2..3aad4a72f1 100644 --- a/OpenRA.Mods.Common/Traits/Sound/SoundOnDamageTransition.cs +++ b/OpenRA.Mods.Common/Traits/Sound/SoundOnDamageTransition.cs @@ -40,12 +40,12 @@ namespace OpenRA.Mods.Common.Traits.Sound if (e.DamageState == DamageState.Dead) { var sound = info.DestroyedSounds.RandomOrDefault(rand); - Game.Sound.Play(sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); } else if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy) { var sound = info.DamagedSounds.RandomOrDefault(rand); - Game.Sound.Play(sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); } } } diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs index 74575a64dd..b0098a2deb 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs @@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits public override void SelectTarget(Actor self, string order, SupportPowerManager manager) { - Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); + Game.Sound.PlayToPlayer(SoundType.World, manager.Self.Owner, Info.SelectTargetSound); self.World.OrderGenerator = new SelectUpgradeTarget(Self.World, order, manager, this); } @@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Traits if (wsb != null && wsb.DefaultAnimation.HasSequence(info.Sequence)) wsb.PlayCustomAnimation(self, info.Sequence, () => wsb.CancelCustomAnimation(self)); - Game.Sound.Play(info.OnFireSound, self.World.Map.CenterOfCell(order.TargetLocation)); + Game.Sound.Play(SoundType.World, info.OnFireSound, self.World.Map.CenterOfCell(order.TargetLocation)); foreach (var a in UnitsInRange(order.TargetLocation)) { diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SpawnActorPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SpawnActorPower.cs index 323c950f5e..9cfb0db453 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SpawnActorPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SpawnActorPower.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.Common.Traits { var location = self.World.Map.CenterOfCell(order.TargetLocation); - Game.Sound.Play(info.DeploySound, location); + Game.Sound.Play(SoundType.World, info.DeploySound, location); if (!string.IsNullOrEmpty(info.EffectSequence) && !string.IsNullOrEmpty(info.EffectPalette)) w.Add(new SpriteEffect(location, w, info.EffectImage, info.EffectSequence, info.EffectPalette)); diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs index 48ec944a29..130a07aa9a 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs @@ -89,21 +89,21 @@ namespace OpenRA.Mods.Common.Traits public virtual void Charging(Actor self, string key) { - Game.Sound.PlayToPlayer(self.Owner, Info.BeginChargeSound); + Game.Sound.PlayToPlayer(SoundType.UI, self.Owner, Info.BeginChargeSound); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.BeginChargeSpeechNotification, self.Owner.Faction.InternalName); } public virtual void Charged(Actor self, string key) { - Game.Sound.PlayToPlayer(self.Owner, Info.EndChargeSound); + Game.Sound.PlayToPlayer(SoundType.UI, self.Owner, Info.EndChargeSound); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.EndChargeSpeechNotification, self.Owner.Faction.InternalName); } public virtual void SelectTarget(Actor self, string order, SupportPowerManager manager) { - Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); + Game.Sound.PlayToPlayer(SoundType.UI, manager.Self.Owner, Info.SelectTargetSound); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.SelectTargetSpeechNotification, self.Owner.Faction.InternalName); self.World.OrderGenerator = new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); @@ -125,7 +125,7 @@ namespace OpenRA.Mods.Common.Traits { var renderPlayer = Self.World.RenderPlayer; var isAllied = Self.Owner.IsAlliedWith(renderPlayer); - Game.Sound.Play(isAllied ? Info.LaunchSound : Info.IncomingSound); + Game.Sound.Play(SoundType.UI, isAllied ? Info.LaunchSound : Info.IncomingSound); // IsAlliedWith returns true if renderPlayer is null, so we are safe here. var toPlayer = isAllied ? renderPlayer ?? Self.Owner : renderPlayer; diff --git a/OpenRA.Mods.Common/Traits/ThrowsShrapnel.cs b/OpenRA.Mods.Common/Traits/ThrowsShrapnel.cs index 628ffdff76..8e5a5277a1 100644 --- a/OpenRA.Mods.Common/Traits/ThrowsShrapnel.cs +++ b/OpenRA.Mods.Common/Traits/ThrowsShrapnel.cs @@ -85,7 +85,7 @@ namespace OpenRA.Mods.Common.Traits self.World.Add(projectile); if (args.Weapon.Report != null && args.Weapon.Report.Any()) - Game.Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); } }); } diff --git a/OpenRA.Mods.Common/Traits/Transforms.cs b/OpenRA.Mods.Common/Traits/Transforms.cs index 68f9ea2708..c85938a798 100644 --- a/OpenRA.Mods.Common/Traits/Transforms.cs +++ b/OpenRA.Mods.Common/Traits/Transforms.cs @@ -103,7 +103,7 @@ namespace OpenRA.Mods.Common.Traits // Only play the "Cannot deploy here" audio // for non-queued orders foreach (var s in info.NoTransformSounds) - Game.Sound.PlayToPlayer(self.Owner, s); + Game.Sound.PlayToPlayer(SoundType.World, self.Owner, s); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.NoTransformNotification, self.Owner.Faction.InternalName); diff --git a/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDamageState.cs b/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDamageState.cs index 630d5d372d..85520d5e3e 100644 --- a/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDamageState.cs +++ b/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDamageState.cs @@ -64,7 +64,7 @@ namespace OpenRA.Mods.Common.Traits conditionToken = manager.GrantCondition(self, info.Condition); var sound = info.EnabledSounds.RandomOrDefault(Game.CosmeticRandom); - Game.Sound.Play(sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); } void INotifyDamageStateChanged.DamageStateChanged(Actor self, AttackInfo e) @@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits conditionToken = manager.RevokeCondition(self, conditionToken); var sound = info.DisabledSounds.RandomOrDefault(Game.CosmeticRandom); - Game.Sound.Play(sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); } } } diff --git a/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDeploy.cs b/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDeploy.cs index 3272deeb24..e0c6eb11f6 100644 --- a/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDeploy.cs +++ b/OpenRA.Mods.Common/Traits/Upgrades/GrantConditionOnDeploy.cs @@ -204,7 +204,7 @@ namespace OpenRA.Mods.Common.Traits return; if (!string.IsNullOrEmpty(info.DeploySound)) - Game.Sound.Play(info.DeploySound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.DeploySound, self.CenterPosition); // Revoke upgrades that are used while undeployed. if (!init) @@ -227,7 +227,7 @@ namespace OpenRA.Mods.Common.Traits return; if (!string.IsNullOrEmpty(info.UndeploySound)) - Game.Sound.Play(info.UndeploySound, self.CenterPosition); + Game.Sound.Play(SoundType.World, info.UndeploySound, self.CenterPosition); if (!init) OnUndeployStarted(); diff --git a/OpenRA.Mods.Common/Traits/Upgrades/ProximityExternalCondition.cs b/OpenRA.Mods.Common/Traits/Upgrades/ProximityExternalCondition.cs index 3bfea5b832..4cfba835c3 100644 --- a/OpenRA.Mods.Common/Traits/Upgrades/ProximityExternalCondition.cs +++ b/OpenRA.Mods.Common/Traits/Upgrades/ProximityExternalCondition.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Traits if (cachedDisabled != disabled) { - Game.Sound.Play(disabled ? info.DisableSound : info.EnableSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, disabled ? info.DisableSound : info.EnableSound, self.CenterPosition); desiredRange = disabled ? WDist.Zero : info.Range; desiredVRange = disabled ? WDist.Zero : info.MaximumVerticalOffset; cachedDisabled = disabled; diff --git a/OpenRA.Mods.Common/Traits/Voiced.cs b/OpenRA.Mods.Common/Traits/Voiced.cs index 88e27d2ff5..55a04554c2 100644 --- a/OpenRA.Mods.Common/Traits/Voiced.cs +++ b/OpenRA.Mods.Common/Traits/Voiced.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.Common.Traits var type = Info.VoiceSet.ToLowerInvariant(); var volume = Info.Volume; - return Game.Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, true, WPos.Zero, volume, true); + return Game.Sound.PlayPredefined(SoundType.World, 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) @@ -59,7 +59,7 @@ namespace OpenRA.Mods.Common.Traits return false; var type = Info.VoiceSet.ToLowerInvariant(); - return Game.Sound.PlayPredefined(self.World.Map.Rules, null, self, type, phrase, variant, false, self.CenterPosition, volume, true); + return Game.Sound.PlayPredefined(SoundType.World, self.World.Map.Rules, null, self, type, phrase, variant, false, self.CenterPosition, volume, true); } public bool HasVoice(Actor self, string voice) diff --git a/OpenRA.Mods.Common/Warheads/CreateEffectWarhead.cs b/OpenRA.Mods.Common/Warheads/CreateEffectWarhead.cs index 62a0b76e5f..1c0650744d 100644 --- a/OpenRA.Mods.Common/Warheads/CreateEffectWarhead.cs +++ b/OpenRA.Mods.Common/Warheads/CreateEffectWarhead.cs @@ -115,7 +115,7 @@ namespace OpenRA.Mods.Common.Warheads var impactSound = ImpactSounds.RandomOrDefault(Game.CosmeticRandom); if (impactSound != null) - Game.Sound.Play(impactSound, pos); + Game.Sound.Play(SoundType.World, impactSound, pos); } public bool IsValidImpact(WPos pos, Actor firedBy) diff --git a/OpenRA.Mods.Common/Widgets/ChatDisplayWidget.cs b/OpenRA.Mods.Common/Widgets/ChatDisplayWidget.cs index 24b7064ea5..cb5e25fe90 100644 --- a/OpenRA.Mods.Common/Widgets/ChatDisplayWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ChatDisplayWidget.cs @@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Widgets recentLines.Add(new ChatLine(from, text, Game.LocalTick + RemoveTime, c)); if (Notification != null) - Game.Sound.Play(Notification); + Game.Sound.Play(SoundType.UI, Notification); while (recentLines.Count > LogLength) recentLines.RemoveAt(0); diff --git a/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs b/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs index 4831991b0d..a61bb2a50e 100644 --- a/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs @@ -218,14 +218,14 @@ namespace OpenRA.Mods.Common.Widgets { if (PickUpCompletedBuildingIcon(icon, item)) { - Game.Sound.Play(TabClick); + Game.Sound.Play(SoundType.UI, TabClick); return true; } if (item != null && item.Paused) { // Resume a paused item - Game.Sound.Play(TabClick); + Game.Sound.Play(SoundType.UI, TabClick); World.IssueOrder(Order.PauseProduction(CurrentQueue.Actor, icon.Name, false)); return true; } @@ -233,7 +233,7 @@ namespace OpenRA.Mods.Common.Widgets if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name)) { // Queue a new item - Game.Sound.Play(TabClick); + Game.Sound.Play(SoundType.UI, TabClick); Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, World.LocalPlayer.Faction.InternalName); World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name, handleCount)); return true; @@ -247,7 +247,7 @@ namespace OpenRA.Mods.Common.Widgets if (item == null) return false; - Game.Sound.Play(TabClick); + Game.Sound.Play(SoundType.UI, TabClick); if (item.Paused || item.Done || item.TotalCost == item.RemainingCost) { @@ -271,7 +271,7 @@ namespace OpenRA.Mods.Common.Widgets return false; // Directly cancel, skipping "on-hold" - Game.Sound.Play(TabClick); + Game.Sound.Play(SoundType.UI, TabClick); Game.Sound.PlayNotification(World.Map.Rules, World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Faction.InternalName); World.IssueOrder(Order.CancelProduction(CurrentQueue.Actor, icon.Name, handleCount)); @@ -289,7 +289,7 @@ namespace OpenRA.Mods.Common.Widgets : false; if (!handled) - Game.Sound.Play(DisabledTabClick); + Game.Sound.Play(SoundType.UI, DisabledTabClick); return true; } diff --git a/OpenRA.Mods.Common/Widgets/RadarWidget.cs b/OpenRA.Mods.Common/Widgets/RadarWidget.cs index 010a13ca2c..e516f601fb 100644 --- a/OpenRA.Mods.Common/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.Common/Widgets/RadarWidget.cs @@ -333,7 +333,7 @@ namespace OpenRA.Mods.Common.Widgets // Enable/Disable the radar var enabled = IsEnabled(); if (enabled != cachedEnabled) - Game.Sound.Play(enabled ? RadarOnlineSound : RadarOfflineSound); + Game.Sound.Play(SoundType.UI, enabled ? RadarOnlineSound : RadarOfflineSound); cachedEnabled = enabled; if (enabled) diff --git a/OpenRA.Mods.Common/Widgets/SupportPowersWidget.cs b/OpenRA.Mods.Common/Widgets/SupportPowersWidget.cs index 2819ab21f5..dd40499c22 100644 --- a/OpenRA.Mods.Common/Widgets/SupportPowersWidget.cs +++ b/OpenRA.Mods.Common/Widgets/SupportPowersWidget.cs @@ -115,7 +115,7 @@ namespace OpenRA.Mods.Common.Widgets { if (!clicked.Power.Active) { - Game.Sound.PlayToPlayer(spm.Self.Owner, clicked.Power.Info.InsufficientPowerSound); + Game.Sound.PlayToPlayer(SoundType.UI, spm.Self.Owner, clicked.Power.Info.InsufficientPowerSound); Game.Sound.PlayNotification(spm.Self.World.Map.Rules, spm.Self.Owner, "Speech", clicked.Power.Info.InsufficientPowerSpeechNotification, spm.Self.Owner.Faction.InternalName); } diff --git a/OpenRA.Mods.D2k/Activities/SwallowActor.cs b/OpenRA.Mods.D2k/Activities/SwallowActor.cs index a5f220c772..39a1cd36e0 100644 --- a/OpenRA.Mods.D2k/Activities/SwallowActor.cs +++ b/OpenRA.Mods.D2k/Activities/SwallowActor.cs @@ -76,7 +76,7 @@ namespace OpenRA.Mods.D2k.Activities var attackPosition = self.CenterPosition; var affectedPlayers = targets.Select(x => x.Owner).Distinct().ToList(); - Game.Sound.Play(swallow.Info.WormAttackSound, self.CenterPosition); + Game.Sound.Play(SoundType.World, swallow.Info.WormAttackSound, self.CenterPosition); Game.RunAfterDelay(1000, () => { diff --git a/OpenRA.Mods.D2k/Traits/SpiceBloom.cs b/OpenRA.Mods.D2k/Traits/SpiceBloom.cs index e14f46ac9f..f38d8ac402 100644 --- a/OpenRA.Mods.D2k/Traits/SpiceBloom.cs +++ b/OpenRA.Mods.D2k/Traits/SpiceBloom.cs @@ -152,7 +152,7 @@ namespace OpenRA.Mods.D2k.Traits self.World.Add(projectile); if (args.Weapon.Report != null && args.Weapon.Report.Any()) - Game.Sound.Play(args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, args.Weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); } }); } diff --git a/OpenRA.Mods.RA/Activities/Leap.cs b/OpenRA.Mods.RA/Activities/Leap.cs index 39b548296b..7f8a90865d 100644 --- a/OpenRA.Mods.RA/Activities/Leap.cs +++ b/OpenRA.Mods.RA/Activities/Leap.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities self.Trait().Attacking(self, Target.FromActor(target), a); if (weapon.Report != null && weapon.Report.Any()) - Game.Sound.Play(weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); + Game.Sound.Play(SoundType.World, weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); } public override Activity Tick(Actor self) diff --git a/OpenRA.Mods.RA/Activities/Teleport.cs b/OpenRA.Mods.RA/Activities/Teleport.cs index 3f58bf1309..2806374b7d 100644 --- a/OpenRA.Mods.RA/Activities/Teleport.cs +++ b/OpenRA.Mods.RA/Activities/Teleport.cs @@ -60,8 +60,8 @@ namespace OpenRA.Mods.RA.Activities destination = bestCell.Value; - Game.Sound.Play(sound, self.CenterPosition); - Game.Sound.Play(sound, self.World.Map.CenterOfCell(destination)); + Game.Sound.Play(SoundType.World, sound, self.CenterPosition); + Game.Sound.Play(SoundType.World, sound, self.World.Map.CenterOfCell(destination)); self.Trait().SetPosition(self, destination); self.Generation++; diff --git a/OpenRA.Mods.RA/Traits/MadTank.cs b/OpenRA.Mods.RA/Traits/MadTank.cs index 271e6c7929..431aafd19c 100644 --- a/OpenRA.Mods.RA/Traits/MadTank.cs +++ b/OpenRA.Mods.RA/Traits/MadTank.cs @@ -159,9 +159,9 @@ namespace OpenRA.Mods.RA.Traits wfsb.PlayCustomAnimationRepeating(self, info.ThumpSequence); deployed = true; self.QueueActivity(new Wait(info.ChargeDelay, false)); - self.QueueActivity(new CallFunc(() => Game.Sound.Play(info.ChargeSound, self.CenterPosition))); + self.QueueActivity(new CallFunc(() => Game.Sound.Play(SoundType.World, info.ChargeSound, self.CenterPosition))); self.QueueActivity(new Wait(info.DetonationDelay, false)); - self.QueueActivity(new CallFunc(() => Game.Sound.Play(info.DetonationSound, self.CenterPosition))); + self.QueueActivity(new CallFunc(() => Game.Sound.Play(SoundType.World, info.DetonationSound, self.CenterPosition))); self.QueueActivity(new CallFunc(Detonate)); } diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs index ab5ddddb1d..29f08a6bc7 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs @@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA.Traits public override void SelectTarget(Actor self, string order, SupportPowerManager manager) { - Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); + Game.Sound.PlayToPlayer(SoundType.UI, manager.Self.Owner, Info.SelectTargetSound); self.World.OrderGenerator = new SelectChronoshiftTarget(Self.World, order, manager, this); } diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs index e3dcbe80a2..27c425341d 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs @@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA.Traits self.World.AddFrameEndTask(w => { - Game.Sound.PlayToPlayer(self.Owner, Info.LaunchSound); + Game.Sound.PlayToPlayer(SoundType.World, self.Owner, Info.LaunchSound); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.LaunchSpeechNotification, self.Owner.Faction.InternalName); diff --git a/OpenRA.Mods.TS/Traits/SupportPowers/AttackOrderPower.cs b/OpenRA.Mods.TS/Traits/SupportPowers/AttackOrderPower.cs index 5b6160b4e8..d348496745 100644 --- a/OpenRA.Mods.TS/Traits/SupportPowers/AttackOrderPower.cs +++ b/OpenRA.Mods.TS/Traits/SupportPowers/AttackOrderPower.cs @@ -37,7 +37,7 @@ namespace OpenRA.Mods.TS.Traits public override void SelectTarget(Actor self, string order, SupportPowerManager manager) { - Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); + Game.Sound.PlayToPlayer(SoundType.UI, manager.Self.Owner, Info.SelectTargetSound); self.World.OrderGenerator = new SelectAttackPowerTarget(self, order, manager, info.Cursor, MouseButton.Left, attack); }