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;
}