public void Fade3D(string layerName, string sourceName, float fromVol, float toVol, float time)
        {
            Sound3DLayerData layer = soundLayers3D.FirstOrDefault(l => l.layerName == layerName);

            if (layer == null)
            {
                return;
            }

            SoundSourceData sourceData = layer.soundData.sources.FirstOrDefault(c => c.sourceName == sourceName);

            if (sourceData == null)
            {
                return;
            }

            GameObject target             = sourceData.source.gameObject;
            SoundFadeCallbackBehabiour cb = target.AddComponent <SoundFadeCallbackBehabiour>();

            cb.audioSource = sourceData.source;

            iTween.ValueTo(target,
                           iTween.Hash(
                               "from", fromVol,
                               "to", toVol,
                               "time", time,
                               "onupdate", "fade_updated",
                               "onupdatetarget", target,
                               "oncomplete", "fade_completed",
                               "oncompletetarget", target));
        }
 public void AddLayer3D(Sound3DLayerData layer)
 {
     if (!soundLayers3DTable.ContainsKey(layer.layerName))
     {
         soundLayers3DTable.Add(layer.layerName, layer);
     }
     else
     {
         Debug.LogWarning("SoundManager :: layer is already exists.");
     }
 }
        private void InternalStop3D(string layerName, string sourceName, bool asAll)
        {
            if (layerName != "")
            {
                Sound3DLayerData layer = soundLayers3D.FirstOrDefault(l => l.layerName == layerName);
                if (layer == null)
                {
                    return;
                }

                if (sourceName == "")
                {
                    foreach (SoundSourceData sourceData in layer.soundData.sources)
                    {
                        if (sourceData.source.isPlaying)
                        {
                            sourceData.source.Stop();
                        }
                    }
                }
                else
                {
                    SoundSourceData sourceData = layer.soundData.sources.FirstOrDefault(c => c.sourceName == sourceName);
                    if (sourceData == null)
                    {
                        return;
                    }

                    if (sourceData.source.isPlaying)
                    {
                        sourceData.source.Stop();
                    }
                }
            }
            else
            {
                foreach (Sound3DLayerData layer in soundLayers3D)
                {
                    if (asAll && !layer.IgnoreAllMethod)
                    {
                        foreach (SoundSourceData sourceData in layer.soundData.sources)
                        {
                            if (sourceData.source.isPlaying)
                            {
                                sourceData.source.Stop();
                            }
                        }
                    }
                }
            }
        }
        public void Play3D(string layerName, string sourceName, bool overlap, bool loop, bool asOneShot)
        {
            Sound3DLayerData layer = soundLayers3D.FirstOrDefault(l => l.layerName == layerName);

            if (layer == null)
            {
                return;
            }

            if (layer.soundData.use)
            {
                SoundSourceData sourceData = layer.soundData.sources.FirstOrDefault(c => c.sourceName == sourceName);
                if (sourceData == null)
                {
                    return;
                }

                if (!overlap)
                {
                    if (sourceData.source.isPlaying)
                    {
                        sourceData.source.Stop();
                    }
                }

                sourceData.source.volume = layer.soundData.volume;

                if (asOneShot)
                {
                    sourceData.source.PlayOneShot(sourceData.source.clip);
                }
                else
                {
                    sourceData.source.loop = loop;
                    sourceData.source.Play();
                }
            }
        }
        public void AddSource3D(string layerName, string sourceName, AudioSource source)
        {
            if (!soundLayers3DTable.ContainsKey(layerName))
            {
                Sound3DLayerData layer = new Sound3DLayerData();
                layer.layerName = layerName;
                AddLayer3D(layer);
            }

            SoundSourceData exist = soundLayers3DTable[layerName].soundData.sources.Find((s) => s.sourceName == sourceName);

            if (exist == null)
            {
                SoundSourceData sourceData = new SoundSourceData();
                sourceData.sourceName = sourceName;
                sourceData.source     = source;
                soundLayers3DTable[layerName].soundData.sources.Add(sourceData);
            }
            else
            {
                Debug.LogWarning("SoundManager :: source is already exists.");
            }
        }
        public bool IsPlay3D(string layerName, string sourceName)
        {
            Sound3DLayerData layer = soundLayers3D.FirstOrDefault(l => l.layerName == layerName);

            if (layer == null)
            {
                return(false);
            }

            if (layer.soundData.use)
            {
                SoundSourceData sourceData = layer.soundData.sources.FirstOrDefault(c => c.sourceName == sourceName);
                if (sourceData == null)
                {
                    return(false);
                }

                return(sourceData.source.isPlaying);
            }
            else
            {
                return(false);
            }
        }