Exemple #1
0
 private void CollectionAudio(AudioElementStruct elem)
 {
     if (elem.m_Root == null)
     {
         return;
     }
     elem.m_AudioSource.Stop();
     elem.m_AudioSource.clip = null;
     if (elem.m_Root.transform.parent.gameObject != m_AudioRoot)
     {
         GameObject.Destroy(elem.m_Root);
     }
     else
     {
         if (m_AudioStorePool.Count > m_iPoolSize)
         {
             GameObject.Destroy(elem.m_Root);
         }
         else
         {
             elem.m_AudioClip = null;
             m_AudioStorePool.Push(elem);
         }
     }
 }
Exemple #2
0
    private AudioElementStruct CreateElement(string resource, Transform parent, bool isLoop)
    {
        AudioElementStruct elem = null;

        if (m_AudioStorePool.Count > 0)
        {
            elem = m_AudioStorePool.Pop();
        }
        else
        {
            elem        = new AudioElementStruct();
            elem.m_Root = new GameObject("AudioClip");
            ComponentTool.Attach(parent, elem.m_Root.transform);
            elem.m_AudioSource = elem.m_Root.AddComponent <AudioSource>();
        }

        elem.m_AudioClip = ResourceManager.Instance.LoadBuildInResource <AudioClip>(resource, AssetType.Audio);
        if (elem.m_AudioClip == null)
        {
            return(null);
        }
        elem.m_AudioSource.clip = elem.m_AudioClip;
        elem.m_AudioSource.loop = isLoop;
        elem.m_bIsLoop          = isLoop;
        elem.m_AudioSource.Play();
        elem.m_Root.name = resource;
        return(elem);
    }
Exemple #3
0
    private AudioElementStruct CreateElement(string resource, Vector3 postion, bool isLoop)
    {
        AudioElementStruct elem = null;

        if (m_AudioStorePool.Count > 0)
        {
            elem = m_AudioStorePool.Pop();
        }
        else
        {
            elem        = new AudioElementStruct();
            elem.m_Root = new GameObject("AudioClip");
            ComponentTool.Attach(m_AudioRoot.transform, elem.m_Root.transform);
            elem.m_AudioSource = elem.m_Root.AddComponent <AudioSource>();
        }

        elem.m_AudioClip = ResourceManager.Instance.LoadBuildInResource <AudioClip>(resource, AssetType.Audio);
        if (elem.m_AudioClip == null)
        {
            Debug.LogError("there is no audio : " + resource);
            return(null);
        }
        elem.m_Root.transform.position = postion;
        elem.m_AudioSource.clip        = elem.m_AudioClip;
        elem.m_AudioSource.loop        = isLoop;
        elem.m_bIsLoop = isLoop;
        elem.m_AudioSource.Play();
        elem.m_Root.name = resource;
        return(elem);
    }
Exemple #4
0
    private void Update()
    {
        //float deltaTime = TimeManager.Instance.GetDeltaTime();
        float deltaTime = TimeManager.Instance.GetRealDeltaTime();

        for (int i = 0; i < m_AudioClipList.Count;)
        {
            AudioElementStruct elem = m_AudioClipList[i];
            if (elem.m_OnFinishedCallBack == null)
            {
                ++i;
                continue;
            }
            elem.m_fCurrentPlayedLength += deltaTime;
            if (elem.m_fCurrentPlayedLength >= elem.m_fAudioLength)
            {
                //elem.m_OnFinishedCallBack(elem.m_Root.name);
                m_AudioCallBacktmpList.Add(new AudioCallBackElement(elem.m_OnFinishedCallBack, elem.m_Root.name));

                if (elem.m_bIsLoop)
                {
                    elem.m_fCurrentPlayedLength = elem.m_fCurrentPlayedLength - elem.m_fAudioLength;
                }
                else
                {
                    elem.m_fCurrentPlayedLength = 0.0f;
                }
                if (!elem.m_bIsLoop)
                {
                    elem.m_AudioSource.Stop();
                    elem.m_OnFinishedCallBack = null;
                    CollectionAudio(elem);
                    m_AudioClipList.Remove(elem);
                    CheckHavCallBackAudio();
                }
                else
                {
                    ++i;
                }
            }
            else
            {
                ++i;
            }
        }

        if (m_AudioCallBacktmpList.Count > 0)
        {
            //execute call back
            for (int i = 0; i < m_AudioCallBacktmpList.Count; ++i)
            {
                m_AudioCallBacktmpList[i].Execute();
            }
            m_AudioCallBacktmpList.Clear();
        }
    }
Exemple #5
0
    private void OnChangeScene(MessageObject obj)
    {
        for (int i = 0; i < m_AudioClipList.Count; ++i)
        {
            AudioElementStruct elem = m_AudioClipList[i];

            CollectionAudio(elem);
        }
        m_AudioClipList.Clear();
    }
Exemple #6
0
    private void CheckCallBack(AudioElementStruct elem, Action <string> callBack)
    {
        if (null == callBack || null == elem)
        {
            return;
        }

        elem.m_OnFinishedCallBack   = callBack;
        elem.m_fAudioLength         = elem.m_AudioClip.length;
        elem.m_fCurrentPlayedLength = 0.0f;

        LifeTickTask.Instance.RegisterToUpdateList(Update);
    }
Exemple #7
0
    public void PlayAudio(string resource, Transform parent, bool isLoop, Action <string> onFinishedCallBack = null)
    {
        Debuger.Log("Play audio: " + resource);

        CheckResource();

        AudioElementStruct elem = CreateElement(resource, parent, isLoop);

        CheckCallBack(elem, onFinishedCallBack);

        if (null != elem)
        {
            m_AudioClipList.Add(elem);
        }
    }
Exemple #8
0
 private void InitAudioPool()
 {
     for (int i = 0; i < m_iPoolSize; ++i)
     {
         AudioElementStruct elem = new AudioElementStruct();
         elem.m_AudioClip = null;
         elem.m_Root      = new GameObject("AudioClip");
         ComponentTool.Attach(m_AudioRoot.transform, elem.m_Root.transform);
         elem.m_Root.transform.position = Vector3.zero;
         elem.m_AudioSource             = elem.m_Root.AddComponent <AudioSource>();
         elem.m_AudioSource.clip        = elem.m_AudioClip;
         elem.m_AudioSource.playOnAwake = false;
         m_AudioStorePool.Push(elem);
     }
 }
Exemple #9
0
 public void StopAudio(string resource)
 {
     for (int i = 0; i < m_AudioClipList.Count;)
     {
         AudioElementStruct elem = m_AudioClipList[i];
         if (elem.m_Root.name == resource)
         {
             CollectionAudio(elem);
             m_AudioClipList.RemoveAt(i);
         }
         else
         {
             ++i;
         }
     }
 }
Exemple #10
0
    private void CheckHavCallBackAudio()
    {
        bool hav = false;

        for (int i = 0; i < m_AudioClipList.Count; ++i)
        {
            AudioElementStruct elem = m_AudioClipList[i];
            if (elem.m_OnFinishedCallBack != null)
            {
                hav = true;
                break;
            }
        }

        if (!hav)
        {
            Debuger.Log("No audio call back,clear store");

            LifeTickTask.Instance.UnRegisterFromUpdateList(Update);
        }
    }
Exemple #11
0
 private void CheckResource()
 {
     for (int i = 0; i < m_AudioClipList.Count;)
     {
         AudioElementStruct elem = m_AudioClipList[i];
         if (elem.m_Root == null)
         {
             m_AudioClipList.RemoveAt(i);
             continue;
         }
         if (!elem.m_bIsLoop && !elem.m_AudioSource.isPlaying && elem.m_OnFinishedCallBack == null)
         {
             CollectionAudio(elem);
             m_AudioClipList.RemoveAt(i);
         }
         else
         {
             ++i;
         }
     }
 }
Exemple #12
0
    public void PlayAudio(AudioClip clip, Vector3 postion, bool isLoop, Action <string> onFinishedCallBack = null)
    {
        Debuger.Log("Play audio: " + clip.name);

        AudioElementStruct elem = null;

        if (m_AudioStorePool.Count > 0)
        {
            elem = m_AudioStorePool.Pop();
        }
        else
        {
            elem        = new AudioElementStruct();
            elem.m_Root = new GameObject("AudioClip");
            ComponentTool.Attach(m_AudioRoot.transform, elem.m_Root.transform);
            elem.m_AudioSource = elem.m_Root.AddComponent <AudioSource>();
        }

        elem.m_AudioClip = clip;
        if (elem.m_AudioClip == null)
        {
            return;
        }
        elem.m_Root.transform.position = postion;
        elem.m_AudioSource.clip        = elem.m_AudioClip;
        elem.m_AudioSource.loop        = isLoop;
        elem.m_bIsLoop = isLoop;
        elem.m_AudioSource.Play();
        elem.m_Root.name = clip.name;

        CheckCallBack(elem, onFinishedCallBack);

        if (null != elem)
        {
            m_AudioClipList.Add(elem);
        }
    }