Attempt to reduce audio helper resolves (#8493)

This commit is contained in:
Leon Friedrich
2022-05-28 23:03:21 +12:00
committed by GitHub
parent 4c40f3bdf8
commit 5dbe77ecba
2 changed files with 25 additions and 10 deletions

View File

@@ -8,9 +8,19 @@ namespace Content.Shared.Audio
/// <summary> /// <summary>
/// Returns a random pitch. /// Returns a random pitch.
/// </summary> /// </summary>
[Obsolete("Use variant that takes in IRobustRandom instead.")]
public static AudioParams WithVariation(float amplitude) public static AudioParams WithVariation(float amplitude)
{ {
var scale = (float)(IoCManager.Resolve<IRobustRandom>().NextGaussian(1, amplitude)); return WithVariation(amplitude, null);
}
/// <summary>
/// Returns a random pitch.
/// </summary>
public static AudioParams WithVariation(float amplitude, IRobustRandom? rand)
{
IoCManager.Resolve(ref rand);
var scale = (float) rand.NextGaussian(1, amplitude);
return AudioParams.Default.WithPitchScale(scale); return AudioParams.Default.WithPitchScale(scale);
} }
@@ -43,16 +53,18 @@ namespace Content.Shared.Audio
/// Returns a pitch multiplier shifted by a random number of semitones within variation. /// Returns a pitch multiplier shifted by a random number of semitones within variation.
/// </summary> /// </summary>
/// <param name="variation">Max number of semitones to shift in either direction. Values above 12 have no effect.</param> /// <param name="variation">Max number of semitones to shift in either direction. Values above 12 have no effect.</param>
public static AudioParams WithSemitoneVariation(int variation) public static AudioParams WithSemitoneVariation(int variation, IRobustRandom? rand)
{ {
IoCManager.Resolve(ref rand);
variation = Math.Clamp(variation, 0, 12); variation = Math.Clamp(variation, 0, 12);
return ShiftSemitone(IoCManager.Resolve<IRobustRandom>().Next(-variation, variation)); return ShiftSemitone(rand.Next(-variation, variation));
} }
public static string GetRandomFileFromSoundCollection(string name) public static string GetRandomFileFromSoundCollection(string name, IRobustRandom? rand, IPrototypeManager? proto)
{ {
var soundCollection = IoCManager.Resolve<IPrototypeManager>().Index<SoundCollectionPrototype>(name); IoCManager.Resolve(ref rand, ref proto);
return IoCManager.Resolve<IRobustRandom>().Pick(soundCollection.PickFiles).ToString(); var soundCollection = proto.Index<SoundCollectionPrototype>(name);
return rand.Pick(soundCollection.PickFiles).ToString();
} }
} }
} }

View File

@@ -1,6 +1,8 @@
using Content.Shared.Audio; using Content.Shared.Audio;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Serialization.TypeSerializers.Implementations; using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Utility; using Robust.Shared.Utility;
@@ -13,7 +15,8 @@ namespace Content.Shared.Sound
[ViewVariables(VVAccess.ReadWrite), DataField("params")] [ViewVariables(VVAccess.ReadWrite), DataField("params")]
public AudioParams Params = AudioParams.Default; public AudioParams Params = AudioParams.Default;
public abstract string GetSound(); // TODO: remove most uses of this function, and just make the audio-system take in a SoundSpecifier
public abstract string GetSound(IRobustRandom? rand = null, IPrototypeManager? proto = null);
} }
public sealed class SoundPathSpecifier : SoundSpecifier public sealed class SoundPathSpecifier : SoundSpecifier
@@ -38,7 +41,7 @@ namespace Content.Shared.Sound
Path = path; Path = path;
} }
public override string GetSound() public override string GetSound(IRobustRandom? rand = null, IPrototypeManager? proto = null)
{ {
return Path == null ? string.Empty : Path.ToString(); return Path == null ? string.Empty : Path.ToString();
} }
@@ -61,9 +64,9 @@ namespace Content.Shared.Sound
Collection = collection; Collection = collection;
} }
public override string GetSound() public override string GetSound(IRobustRandom? rand = null, IPrototypeManager? proto = null)
{ {
return Collection == null ? string.Empty : AudioHelpers.GetRandomFileFromSoundCollection(Collection); return Collection == null ? string.Empty : AudioHelpers.GetRandomFileFromSoundCollection(Collection, rand, proto);
} }
} }
} }