private static void PlaySound(rymFX fx, rymFXSoundInfo info)
 {
     //IL_0018: Unknown result type (might be due to invalid IL or missing references)
     //IL_0074: Unknown result type (might be due to invalid IL or missing references)
     //IL_0079: Expected O, but got Unknown
     if (fx.get_enabled() && (!info.loop || !(info.audio_source != null)) && !string.IsNullOrEmpty(info.clip_name))
     {
         ResourceLink component = fx.GetComponent <ResourceLink>();
         if (component != null)
         {
             string    fileNameWithoutExtension = Path.GetFileNameWithoutExtension(info.clip_name);
             AudioClip val = component.Get <AudioClip>(fileNameWithoutExtension);
             if (val != null)
             {
                 AudioObject audioObject = SoundManager.PlaySE(val, info.loop, fx.get__transform());
                 if (audioObject != null && info.loop)
                 {
                     EffectInfoComponent component2 = fx.GetComponent <EffectInfoComponent>();
                     if (component2 != null)
                     {
                         component2.SetLoopAudioObject(audioObject);
                     }
                 }
             }
             else
             {
                 Log.Error(LOG.RESOURCE, "{0} is not found. ({1})", fileNameWithoutExtension, fx.get_name());
             }
         }
     }
 }
 public static void ReleaseEffect(GameObject effect_object, bool isPlayEndAnimation = true, bool immediate = false)
 {
     //IL_0072: Unknown result type (might be due to invalid IL or missing references)
     if (!(effect_object == null))
     {
         if (!MonoBehaviourSingleton <EffectManager> .IsValid())
         {
             Object.Destroy(effect_object);
         }
         else
         {
             EffectManager       i         = MonoBehaviourSingleton <EffectManager> .I;
             EffectInfoComponent component = effect_object.GetComponent <EffectInfoComponent>();
             if (component != null && component.destroyLoopEnd)
             {
                 component.SetLoopAudioObject(null);
                 rymFX      component2 = effect_object.GetComponent <rymFX>();
                 EffectCtrl effectCtrl = null;
                 if (component2 == null)
                 {
                     effectCtrl = effect_object.GetComponent <EffectCtrl>();
                 }
                 if (effectCtrl == null && effect_object.get_transform().get_childCount() > 0)
                 {
                     effect_object.GetComponentsInChildren <Renderer>(Temporary.rendererList);
                     int j = 0;
                     for (int count = Temporary.rendererList.Count; j < count; j++)
                     {
                         Temporary.rendererList[j].set_enabled(false);
                     }
                     Temporary.rendererList.Clear();
                 }
                 effect_object.GetComponents <Trail>(Temporary.trailList);
                 bool flag = false;
                 if (component2 != null && component2.get_enabled())
                 {
                     component2.AutoDelete = true;
                     component2.LoopEnd    = true;
                     flag = true;
                 }
                 else if (effectCtrl != null && effectCtrl.get_enabled())
                 {
                     effectCtrl.EndLoop(isPlayEndAnimation);
                     flag = true;
                 }
                 if (flag && !immediate)
                 {
                     int k = 0;
                     for (int count2 = Temporary.trailList.Count; k < count2; k++)
                     {
                         Temporary.trailList[k].StartDeleteFade();
                     }
                     Temporary.trailList.Clear();
                 }
                 else
                 {
                     i.StockOrDestroy(effect_object, true);
                     int l = 0;
                     for (int count3 = Temporary.trailList.Count; l < count3; l++)
                     {
                         Temporary.trailList[l].SetAutoDelete();
                     }
                     Temporary.trailList.Clear();
                 }
             }
             else
             {
                 i.StockOrDestroy(effect_object, true);
             }
         }
     }
 }