using System; using System.Collections.Generic; using UnityEngine; public class BattleEffectMgr : MonoBehaviour { private BattleField battleField; private Dictionary> effectDict = new Dictionary>(); public void Init(BattleField _battleField) { battleField = _battleField; } public void PauseGame() { foreach (KeyValuePair> kvPair in effectDict) { foreach (EffectPlayer effectPlayer in kvPair.Value) { if (effectPlayer != null) { effectPlayer.Pause(); } } } } public void ResumeGame() { foreach (KeyValuePair> 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.Create(effectId, parent); effectPlayer.onDestroy += OnEffectDestroy; if (effectPlayer != null) { effectDict[effectId].Add(effectPlayer); } return effectPlayer; } public void RemoveEffect(int effectId, EffectPlayer effectPlayer) { List 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> 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(); } }