using System; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
  
 | 
public class BattleEffectMgr : MonoBehaviour 
 | 
{ 
 | 
    private BattleField battleField; 
 | 
  
 | 
    private Dictionary<int, List<EffectPlayer>> effectDict = new Dictionary<int, List<EffectPlayer>>(); 
 | 
  
 | 
    public void Init(BattleField _battleField) 
 | 
    { 
 | 
        battleField = _battleField; 
 | 
    } 
 | 
  
 | 
    public void PauseGame() 
 | 
    { 
 | 
        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict) 
 | 
        { 
 | 
            foreach (EffectPlayer effectPlayer in kvPair.Value) 
 | 
            { 
 | 
                if (effectPlayer != null) 
 | 
                { 
 | 
                    effectPlayer.Pause(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void ResumeGame() 
 | 
    { 
 | 
        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict) 
 | 
        { 
 | 
            foreach (EffectPlayer effectPlayer in kvPair.Value) 
 | 
            { 
 | 
                if (effectPlayer != null) 
 | 
                { 
 | 
                    effectPlayer.Resume(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public EffectPlayer PlayEffect(int ObjID, int effectId, Transform parent) 
 | 
    { 
 | 
        if (!effectDict.ContainsKey(effectId)) 
 | 
        { 
 | 
            effectDict[effectId] = new List<EffectPlayer>(); 
 | 
        } 
 | 
  
 | 
        EffectPlayer effectPlayer = EffectPlayer.Create(effectId, parent); 
 | 
        effectPlayer.onDestroy += OnEffectDestroy; 
 | 
        if (effectPlayer != null) 
 | 
        { 
 | 
            effectDict[effectId].Add(effectPlayer); 
 | 
        } 
 | 
        return effectPlayer; 
 | 
    } 
 | 
  
 | 
    public void RemoveEffect(int effectId, EffectPlayer effectPlayer) 
 | 
    { 
 | 
        List<EffectPlayer> effectPlayers = null; 
 | 
  
 | 
        if (effectDict.TryGetValue(effectId, out effectPlayers)) 
 | 
        { 
 | 
            effectPlayers.Remove(effectPlayer); 
 | 
            GameObject.DestroyImmediate(effectPlayer.gameObject); 
 | 
            effectPlayer = null; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            Debug.LogError("could not find effect in list, effectid : " + effectId); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    protected void OnEffectDestroy(EffectPlayer effectPlayer) 
 | 
    { 
 | 
        if (effectDict.ContainsKey(effectPlayer.effectId)) 
 | 
        { 
 | 
            effectDict[effectPlayer.effectId].Remove(effectPlayer); 
 | 
            if (effectDict[effectPlayer.effectId].Count == 0) 
 | 
            { 
 | 
                effectDict.Remove(effectPlayer.effectId); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void HaveRest() 
 | 
    { 
 | 
        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict) 
 | 
        { 
 | 
            foreach (EffectPlayer effectPlayer in kvPair.Value) 
 | 
            { 
 | 
                if (effectPlayer != null) 
 | 
                { 
 | 
                    GameObject.DestroyImmediate(effectPlayer.gameObject); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        effectDict.Clear(); 
 | 
    } 
 | 
  
 | 
    public void Release() 
 | 
    { 
 | 
        foreach (var effect in effectDict) 
 | 
        { 
 | 
            foreach (var effectPlayer in effect.Value) 
 | 
            { 
 | 
                if (effectPlayer != null) 
 | 
                { 
 | 
                    GameObject.DestroyImmediate(effectPlayer.gameObject); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        effectDict.Clear(); 
 | 
    } 
 | 
} 
 |