Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
        /// <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));
        }
Esempio n. 4
0
        /// <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()));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        /// <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()));
        }