using System; using System.Collections.Generic; using System.IO; using Content.Shared.GameObjects; using SS14.Shared.Audio; using SS14.Shared.GameObjects; using SS14.Shared.Interfaces.GameObjects; using SS14.Shared.Interfaces.Serialization; using SS14.Shared.IoC; using SS14.Shared.Map; using SS14.Shared.Serialization; using SS14.Shared.Timers; namespace Content.Shared.GameObjects.Components.Sound { public class SharedSoundComponent : Component { public override string Name => "Sound"; public override uint? NetID => ContentNetIDs.SOUND; /// /// Stops all sounds. /// public virtual void StopAllSounds() {} /// /// Stops a certain scheduled sound from playing. /// public virtual void StopScheduledSound(string filename) {} /// /// Adds an scheduled sound to be played. /// public virtual void AddScheduledSound(ScheduledSound scheduledSound) {} /// /// Play an audio file following the entity. /// /// The resource path to the OGG Vorbis file to play. public void Play(string filename, AudioParams? audioParams = null) { AddScheduledSound(new ScheduledSound() { Filename = filename, AudioParams = audioParams, }); } } [NetSerializable, Serializable] public class ScheduledSoundMessage : ComponentMessage { public ScheduledSound Schedule; public ScheduledSoundMessage() { Directed = true; } } [NetSerializable, Serializable] public class StopSoundScheduleMessage : ComponentMessage { public string Filename; public StopSoundScheduleMessage() { Directed = true; } } [NetSerializable, Serializable] public class StopAllSoundsMessage : ComponentMessage { public StopAllSoundsMessage() { Directed = true; } } [Serializable, NetSerializable] public class ScheduledSound : IExposeData { public string Filename = ""; /// /// The parameters to play the sound with. /// public AudioParams? AudioParams; /// /// Delay in milliseconds before playing the sound, /// and delay between repetitions if Times is not 0. /// public uint Delay = 0; /// /// Maximum number of milliseconds to add to the delay randomly. /// Useful for random ambience noises. Generated value differs from client to client. /// public uint RandomDelay = 0; /// /// How many times to repeat the sound. If it's 0, it will play the sound once. /// If it's less than 0, it will repeat the sound indefinitely. /// If it's greater than 0, it will play the sound n+1 times. /// public int Times = 0; /// /// Whether the sound will play or not. /// public bool Play = true; public void ExposeData(ObjectSerializer serializer) { Filename = serializer.ReadDataField("filename", ""); Delay = serializer.ReadDataField("delay", 0u); RandomDelay = serializer.ReadDataField("randomdelay", 0u); Times = serializer.ReadDataField("times", 0); AudioParams = serializer.ReadDataField("audioparams", SS14.Shared.Audio.AudioParams.Default); } } }