using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
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)
|
{
|
Release();
|
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, BattleCamp camp)
|
{
|
if (effectId <= 0)
|
{
|
Debug.LogError("effect id <= 0");
|
return null;
|
}
|
|
var effectCfg = EffectConfig.Get(effectId);
|
if (null == effectCfg)
|
{
|
Debug.LogError("effect config is null, effectId : " + effectId);
|
return null;
|
}
|
|
if (!effectDict.ContainsKey(effectId))
|
{
|
effectDict[effectId] = new List<BattleEffectPlayer>();
|
}
|
|
bool isRedCamp = camp == BattleCamp.Red;
|
|
BattleEffectPlayer effectPlayer = BattleEffectPlayer.Create(effectId, battleField.battleRootNode.transform, isRedCamp);
|
// 设置特效缩放和方向
|
|
effectPlayer.transform.position = parent.position;
|
|
effectPlayer.onDestroy += OnEffectDestroy;
|
if (effectPlayer != null)
|
{
|
effectDict[effectId].Add(effectPlayer);
|
}
|
effectPlayer.Play(true);
|
|
var effectScale = effectPlayer.transform.localScale;
|
effectScale.x *= isRedCamp ? 1 : -1;
|
effectPlayer.transform.localScale = effectScale;
|
|
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()
|
{
|
Release();
|
}
|
|
public void Release()
|
{
|
List<int> fKeys = effectDict.Keys.ToList();
|
|
for (int i = 0; i < fKeys.Count; i++)
|
{
|
List<BattleEffectPlayer> effectPlayers = effectDict[fKeys[i]];
|
while (effectPlayers.Count > 0)
|
{
|
var effectPlayer = effectPlayers[0];
|
if (effectPlayer != null)
|
{
|
GameObject.DestroyImmediate(effectPlayer.gameObject);
|
}
|
else
|
{
|
effectPlayers.RemoveAt(0);
|
}
|
}
|
}
|
|
effectDict.Clear();
|
}
|
}
|