using vnxbqy.UI;  
 | 
using UnityEngine;  
 | 
  
 | 
public class EffectMgr : SingletonMonobehaviour<EffectMgr>  
 | 
  
 | 
{  
 | 
    public UIEffectBehaviour GetUIEffect(int id, bool _destroy = false)  
 | 
    {  
 | 
        var _prefab = InstanceResourcesLoader.LoadEffect(id);  
 | 
        if (_prefab == null)  
 | 
        {  
 | 
            return null;  
 | 
        }  
 | 
        GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab);  
 | 
        _prefab = _pool.Request();  
 | 
        var _effect = _prefab.GetComponent<UIEffect>();  
 | 
        if (_effect != null && _destroy)  
 | 
        {  
 | 
            Destroy(_effect);  
 | 
        }  
 | 
        var _behaviour = _prefab.AddMissingComponent<UIEffectBehaviour>();  
 | 
        return _behaviour;  
 | 
    }  
 | 
  
 | 
    //玩家是否主动屏蔽了特效  
 | 
    public bool IsNotShowBySetting(int id)  
 | 
    {  
 | 
        var config = EffectConfig.Get(id);  
 | 
        if (config == null)  
 | 
        {  
 | 
#if UNITY_EDITOR  
 | 
            Debug.LogError("特效配置表中没有找到id为" + id + "的特效");  
 | 
#endif  
 | 
            return true;  
 | 
        }  
 | 
        bool isNotShow = LocalSave.GetBool("IsNotShowBroadEffect", false);  
 | 
        if (config.notShow == 1 && isNotShow)  
 | 
            return true;  
 | 
  
 | 
        return false;  
 | 
    }  
 | 
  
 | 
    public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, bool loop)  
 | 
    {  
 | 
        if (IsNotShowBySetting(id))  
 | 
            return null;  
 | 
        UIEffectBehaviour _behaviour = GetUIEffect(id);  
 | 
        UIEffect uieffect = null;  
 | 
        if (_behaviour != null)  
 | 
        {  
 | 
            _behaviour.SetActive(false);  
 | 
            _behaviour.transform.SetParent(parent);  
 | 
            uieffect = _behaviour.AddMissingComponent<UIEffect>();  
 | 
            uieffect.target = _behaviour;  
 | 
            SetUIEffect(uieffect, id, renderQueue, loop, Vector3.zero, Vector3.zero);  
 | 
            uieffect.Active();  
 | 
        }  
 | 
        return uieffect;  
 | 
    }  
 | 
  
 | 
    public UIEffect PlayUIEffect(int id, int renderQueue, Transform parent, Vector3 _localPos, Vector3 _localRot, bool loop)  
 | 
    {  
 | 
        if (IsNotShowBySetting(id))  
 | 
            return null;  
 | 
        UIEffectBehaviour _behaviour = GetUIEffect(id);  
 | 
        UIEffect uieffect = null;  
 | 
        if (_behaviour != null)  
 | 
        {  
 | 
            _behaviour.SetActive(false);  
 | 
            _behaviour.transform.SetParent(parent);  
 | 
            uieffect = _behaviour.AddMissingComponent<UIEffect>();  
 | 
            uieffect.target = _behaviour;  
 | 
            SetUIEffect(uieffect, id, renderQueue, loop, _localPos, _localRot);  
 | 
            uieffect.Active();  
 | 
        }  
 | 
        return uieffect;  
 | 
    }  
 | 
  
 | 
    public UIEffect PlayUIEffect(int id, int renderQueue, Vector3 _localPos, bool loop = false)  
 | 
    {  
 | 
        if (IsNotShowBySetting(id))  
 | 
            return null;  
 | 
        UIEffectBehaviour _behaviour = GetUIEffect(id);  
 | 
        UIEffect uieffect = null;  
 | 
        if (_behaviour != null)  
 | 
        {  
 | 
            _behaviour.SetActive(false);  
 | 
            _behaviour.transform.SetParent(WindowCenter.Instance.uiRoot.baseCanvas);  
 | 
            uieffect = _behaviour.AddMissingComponent<UIEffect>();  
 | 
            uieffect.target = _behaviour;  
 | 
            SetUIEffect(uieffect, id, renderQueue, loop, _localPos, Vector3.zero);  
 | 
            uieffect.Active();  
 | 
        }  
 | 
        return uieffect;  
 | 
    }  
 | 
  
 | 
    private void SetUIEffect(UIEffect effect, int id, int renderQueue, bool loop, Vector3 _localPos, Vector3 _localRot)  
 | 
    {  
 | 
        effect.effect = id;  
 | 
        effect.renderQueue = renderQueue;  
 | 
        effect.loop = loop;  
 | 
        effect.effectPos = _localPos;  
 | 
        effect.effectRot = _localRot;  
 | 
    }  
 | 
  
 | 
    public void RecyleUIEffect(int id, GameObject _effectObj)  
 | 
    {  
 | 
        var _prefab = InstanceResourcesLoader.LoadEffect(id);  
 | 
        _effectObj.SetActive(false);  
 | 
        if (_prefab == null)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab);  
 | 
        if (_pool != null)  
 | 
        {  
 | 
            _pool.Release(_effectObj);  
 | 
        }  
 | 
    }  
 | 
}  
 | 
  
 |