/// <summary> /// Play an audio file at a static position. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="coordinates">The coordinates at which to play 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 PlayAtCoords(string filename, GridCoordinates coordinates, AudioParams?audioParams = null, int range = AudioDistanceRange) { var id = CacheIdentifier(); var msg = new PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, AudioParams = audioParams ?? AudioParams.Default, Identifier = id }; if (range <= 0) { RaiseNetworkEvent(msg); return(new AudioSourceServer(this, id)); } var players = _playerManager.GetPlayersInRange(coordinates, range); foreach (var player in players) { RaiseNetworkEvent(msg, player.ConnectedClient); } return(new AudioSourceServer(this, id, players)); }
/// <inheritdoc /> public IPlayingAudioStream Play(Filter playerFilter, string filename, EntityCoordinates coordinates, 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 PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, AudioParams = audioParams ?? AudioParams.Default, Identifier = id }; IList <ICommonSession> players; var recipients = (playerFilter as IFilter).Recipients; if (range > 0.0f) { players = PasInRange(recipients, coordinates.ToMap(EntityManager), range); } else { players = recipients; } foreach (var player in players) { RaiseNetworkEvent(msg, player.ConnectedClient); } return(new AudioSourceServer(this, id, players)); }
/// <summary> /// Play an audio file at a static position. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="coordinates">The coordinates at which to play 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">Session that won't receive the audio message.</param> public AudioSourceServer PlayAtCoords(string filename, EntityCoordinates coordinates, AudioParams?audioParams = null, int range = AudioDistanceRange, IPlayerSession?excludedSession = null) { var id = CacheIdentifier(); var msg = new PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, 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(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)); }
/// <inheritdoc /> public IPlayingAudioStream Play(Filter playerFilter, string filename, EntityCoordinates coordinates, 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 fallbackCoordinates = GetFallbackCoordinates(coordinates.ToMap(_entityManager)); var msg = new PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, FallbackCoordinates = fallbackCoordinates, 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(coordinates.ToMap(EntityManager), range); } RaiseNetworkEvent(msg, playerFilter); return(new AudioSourceServer(this, id, playerFilter.Recipients.ToArray())); }
private void PlayAudioPositionalHandler(PlayAudioPositionalMessage ev) { if (!_mapManager.GridExists(ev.Coordinates.GridID)) { Logger.Error($"Server tried to play sound on grid {ev.Coordinates.GridID.Value}, which does not exist. Ignoring."); return; } Play(ev.FileName, ev.Coordinates, ev.AudioParams); }
/// <summary> /// Play an audio file at a static position. /// </summary> /// <param name="filename">The resource path to the OGG Vorbis file to play.</param> /// <param name="coordinates">The coordinates at which to play the audio.</param> public void Play(string filename, GridLocalCoordinates coordinates, AudioParams?audioParams = null) { var msg = new PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, AudioParams = audioParams ?? AudioParams.Default }; RaiseNetworkEvent(msg); }
private void PlayAudioPositionalHandler(PlayAudioPositionalMessage ev) { if (!_mapManager.GridExists(ev.Coordinates.GridID)) { Logger.Error( $"Server tried to play sound on grid {ev.Coordinates.GridID.Value}, which does not exist. Ignoring."); return; } var stream = (PlayingStream?)Play(ev.FileName, ev.Coordinates, ev.AudioParams); if (stream != null) { stream.NetIdentifier = ev.Identifier; } }
/// <inheritdoc /> public IPlayingAudioStream Play(Filter playerFilter, string filename, EntityCoordinates coordinates, AudioParams?audioParams = null) { var id = CacheIdentifier(); var fallbackCoordinates = GetFallbackCoordinates(coordinates.ToMap(_entityManager)); var msg = new PlayAudioPositionalMessage { FileName = filename, Coordinates = coordinates, FallbackCoordinates = fallbackCoordinates, AudioParams = audioParams ?? AudioParams.Default, Identifier = id }; RaiseNetworkEvent(msg, playerFilter); return(new AudioSourceServer(this, id, playerFilter.Recipients.ToArray())); }