/// <inheritdoc /> public IPlayingAudioStream Play(Filter playerFilter, string filename, IEntity entity, AudioParams?audioParams = null) { //TODO: Calculate this from PAS var range = audioParams is null || audioParams.Value.MaxDistance <= 0 ? AudioDistanceRange : audioParams.Value.MaxDistance; var id = CacheIdentifier(); var msg = new PlayAudioEntityMessage { FileName = filename, Coordinates = entity.Transform.Coordinates, EntityUid = entity.Uid, AudioParams = audioParams ?? AudioParams.Default, Identifier = id, }; // We clone the filter here as to not modify the original instance. if (range > 0.0f) { playerFilter = playerFilter.Clone().AddInRange(entity.Transform.MapPosition, range); } RaiseNetworkEvent(msg, playerFilter); return(new AudioSourceServer(this, id, playerFilter.Recipients.ToArray())); }
/// <summary> /// Play an audio file following an entity. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="entity">The entity "emitting" the audio.</param> /// <param name="audioParams"></param> /// <param name="range">The max range at which the audio will be heard. Less than or equal to 0 to send to every player.</param> public AudioSourceServer PlayFromEntity(string filename, IEntity entity, AudioParams?audioParams = null, int range = AudioDistanceRange) { var id = CacheIdentifier(); var msg = new PlayAudioEntityMessage { FileName = filename, EntityUid = entity.Uid, AudioParams = audioParams ?? AudioParams.Default, Identifier = id }; if (range <= 0) { RaiseNetworkEvent(msg); return(new AudioSourceServer(this, id)); } var players = _playerManager.GetPlayersInRange(entity.Transform.GridPosition, range); foreach (var player in players) { RaiseNetworkEvent(msg, player.ConnectedClient); } return(new AudioSourceServer(this, id, players)); }
public IPlayingAudioStream?Play(Filter playerFilter, string filename, EntityUid uid, AudioParams?audioParams = null) { if (!EntityManager.TryGetComponent <TransformComponent>(uid, out var transform)) { return(null); } var id = CacheIdentifier(); var fallbackCoordinates = GetFallbackCoordinates(transform.MapPosition); var msg = new PlayAudioEntityMessage { FileName = filename, Coordinates = transform.Coordinates, FallbackCoordinates = fallbackCoordinates, EntityUid = uid, AudioParams = audioParams ?? AudioParams.Default, Identifier = id, }; RaiseNetworkEvent(msg, playerFilter); return(new AudioSourceServer(this, id, playerFilter.Recipients.ToArray())); }
/// <inheritdoc /> public IPlayingAudioStream Play(Filter playerFilter, string filename, IEntity entity, AudioParams?audioParams = null) { //TODO: Calculate this from PAS var range = audioParams is null || audioParams.Value.MaxDistance <= 0 ? AudioDistanceRange : audioParams.Value.MaxDistance; var id = CacheIdentifier(); var msg = new PlayAudioEntityMessage { FileName = filename, Coordinates = entity.Transform.Coordinates, EntityUid = entity.Uid, AudioParams = audioParams ?? AudioParams.Default, Identifier = id, }; IList <ICommonSession> players; var recipients = (playerFilter as IFilter).Recipients; if (range > 0.0f) { players = PasInRange(recipients, entity.Transform.MapPosition, range); } else { players = recipients; } foreach (var player in players) { RaiseNetworkEvent(msg, player.ConnectedClient); } return(new AudioSourceServer(this, id, players)); }
/// <summary> /// Play an audio file following an entity. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="entity">The entity "emitting" the audio.</param> /// <param name="audioParams"></param> /// <param name="range">The max range at which the audio will be heard. Less than or equal to 0 to send to every player.</param> /// <param name="excludedSession">Sessions that won't receive the audio message.</param> public AudioSourceServer PlayFromEntity(string filename, IEntity entity, AudioParams?audioParams = null, int range = AudioDistanceRange, IPlayerSession?excludedSession = null) { var id = CacheIdentifier(); var msg = new PlayAudioEntityMessage { FileName = filename, Coordinates = entity.Transform.Coordinates, EntityUid = entity.Uid, AudioParams = audioParams ?? AudioParams.Default, Identifier = id, }; if (range <= 0 && excludedSession == null) { RaiseNetworkEvent(msg); return(new AudioSourceServer(this, id)); } var players = range > 0.0f ? _playerManager.GetPlayersInRange(entity.Transform.Coordinates, range) : _playerManager.GetAllPlayers(); for (var i = players.Count - 1; i >= 0; i--) { var player = players[i]; if (player == excludedSession) { players.RemoveAt(i); continue; } RaiseNetworkEvent(msg, player.ConnectedClient); } return(new AudioSourceServer(this, id, players)); }
private void PlayAudioEntityHandler(PlayAudioEntityMessage ev) { if (!EntityManager.TryGetEntity(ev.EntityUid, out var entity)) { Logger.Error($"Server tried to play audio file {ev.FileName} on entity {ev.EntityUid} which does not exist."); return; } Play(ev.FileName, entity, ev.AudioParams); }
/// <summary> /// Play an audio file following an entity. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="entity">The entity "emitting" the audio.</param> public void Play(string filename, IEntity entity, AudioParams?audioParams = null) { var msg = new PlayAudioEntityMessage { FileName = filename, EntityUid = entity.Uid, AudioParams = audioParams ?? AudioParams.Default }; RaiseNetworkEvent(msg); }
private void PlayAudioEntityHandler(PlayAudioEntityMessage ev) { var stream = EntityManager.TryGetEntity(ev.EntityUid, out var entity) ? (PlayingStream?)Play(ev.FileName, entity, ev.AudioParams) : (PlayingStream?)Play(ev.FileName, ev.Coordinates, ev.AudioParams); if (stream != null) { stream.NetIdentifier = ev.Identifier; } }
private void PlayAudioEntityHandler(PlayAudioEntityMessage ev) { if (!EntityManager.TryGetEntity(ev.EntityUid, out var entity)) { Logger.Error( $"Server tried to play audio file {ev.FileName} on entity {ev.EntityUid} which does not exist."); return; } var stream = (PlayingStream?)Play(ev.FileName, entity, ev.AudioParams); if (stream != null) { stream.NetIdentifier = ev.Identifier; } }