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