OpenRA.Platforms.Default.OpenAlSoundEngine.TryGetSourceFromPool C# (CSharp) Method

TryGetSourceFromPool() private method

private TryGetSourceFromPool ( uint &source ) : bool
source uint
return bool
        bool TryGetSourceFromPool(out uint source)
        {
            foreach (var kvp in sourcePool)
            {
                if (!kvp.Value.IsActive)
                {
                    sourcePool[kvp.Key].IsActive = true;
                    source = kvp.Key;
                    return true;
                }
            }

            var freeSources = new List<uint>();
            foreach (var key in sourcePool.Keys)
            {
                int state;
                AL10.alGetSourcei(key, AL10.AL_SOURCE_STATE, out state);
                if (state != AL10.AL_PLAYING && state != AL10.AL_PAUSED)
                    freeSources.Add(key);
            }

            if (freeSources.Count == 0)
            {
                source = 0;
                return false;
            }

            foreach (var i in freeSources)
                sourcePool[i].IsActive = false;

            sourcePool[freeSources[0]].IsActive = true;

            source = freeSources[0];
            return true;
        }