Beispiel #1
0
    AudioSourseSet GetManagedSource(object key, Transform parent = null)
    {
        AudioSourseSet res = new AudioSourseSet();

        if (!managedUsedSources.ContainsKey(key))
        {
            managedUsedSources.Add(key, new List <AudioSourseSet>(maxAudioSourceCount));
        }

        if (poolSources.Count > 0)
        {
            res = poolSources[0];
            poolSources.RemoveAt(0);
            managedUsedSources[key].Add(res);
        }
        else if (poolSources.Count + usedSources.Count + managedUsedSources.Count < maxAudioSourceCount)
        {
            res = CreateNewSource("Source" + (poolSources.Count + usedSources.Count + managedUsedSources.Count));
            managedUsedSources[key].Add(res);
        }

        if (res.source != null)
        {
            res.PosToUpdate = parent;
        }

        return(res);
    }
Beispiel #2
0
    void ReturnBackSource(AudioSourseSet source)
    {
        usedSources.Remove(source);

        poolSources.Add(source);
        if (source.coroutineClipQueue != null)
        {
            StopCoroutine(source.coroutineClipQueue);
            source.coroutineClipQueue = null;
        }
        source.clipQueue       = null;
        source.fadeStartVolume = 1;
        source.priority        = 0;
        source.needToStop      = false;
        //source.source.transform.parent = transform;
        source.PosToUpdate = null;
        source.source.Stop();
    }
Beispiel #3
0
    AudioSourseSet GetSource()
    {
        AudioSourseSet res = new AudioSourseSet();

        if (poolSources.Count > 0)
        {
            res = poolSources[0];
            poolSources.RemoveAt(0);

            usedSources.Add(res);
        }
        else if (poolSources.Count + usedSources.Count + managedUsedSources.Count < maxAudioSourceCount)
        {
            res = CreateNewSource("Source" + (poolSources.Count + usedSources.Count + managedUsedSources.Count));

            usedSources.Add(res);
        }
        return(res);
    }
Beispiel #4
0
    IEnumerator PlayClipsQueue(AudioSourseSet src, bool loop, float volume, SoundManager.SoundType type, float updateDeltaTime = 0.5f)
    {
        while (src.clipQueue.Count > 0)
        {
            var clipSet = src.clipQueue.Peek();

            src.currentClipSet            = clipSet;
            src.source.clip               = clipSet.Clip;
            src.source.loop               = clipSet.Loop;
            src.volumeDempfer             = volume;
            src.Type                      = type;
            src.source.transform.position = src.clipQueue.Peek().Position;
            //src.source.transform.localPosition = src.clipQueue.Peek().Position;
            src.Play();

            if (!src.source.loop)
            {
                var clip = src.clipQueue.Dequeue();

                if (loop)
                {
                    src.clipQueue.Enqueue(clip);
                }

                //если установили позицию для апдейта, то обновляем регулярно...
                if (src.PosToUpdate != null)
                {
                    var timer    = 0f;
                    var duration = src.source.clip.length;
                    while (timer < duration)
                    {
                        timer += Time.unscaledDeltaTime;
                        if (src.PosToUpdate != null)
                        {
                            src.source.transform.position = src.PosToUpdate.position;
                        }
                        yield return(new WaitForSecondsRealtime(updateDeltaTime));
                    }
                }
                else
                {
                    yield return(new WaitForSecondsRealtime(src.source.clip.length));
                }
            }
            else
            {
                if (src.PosToUpdate != null)
                {
                    while (true)
                    {
                        if (src.PosToUpdate != null)
                        {
                            src.source.transform.position = src.PosToUpdate.position;
                        }
                        yield return(new WaitForSecondsRealtime(updateDeltaTime));
                    }
                }
                else
                {
                    break;
                }
            }
        }

        if (src.clipQueue.Count == 0)
        {
            ReturnBackSource(src);
        }
    }