| | |
| | | |
| | | private Dictionary<int, List<BattleEffectPlayer>> effectDict = new Dictionary<int, List<BattleEffectPlayer>>(); |
| | | |
| | | // 缓存Run()的临时列表,避免每帧分配 |
| | | private List<BattleEffectPlayer> _runList = new List<BattleEffectPlayer>(); |
| | | |
| | | public void Init(BattleField _battleField) |
| | | { |
| | | Reload(_battleField); |
| | |
| | | |
| | | public void Run() |
| | | { |
| | | List<BattleEffectPlayer> runList = new List<BattleEffectPlayer>(); |
| | | _runList.Clear(); |
| | | |
| | | foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict) |
| | | { |
| | | runList.AddRange(kvPair.Value); |
| | | _runList.AddRange(kvPair.Value); |
| | | } |
| | | |
| | | for (int i = runList.Count - 1; i >= 0; i--) |
| | | for (int i = _runList.Count - 1; i >= 0; i--) |
| | | { |
| | | BattleEffectPlayer effectPlayer = runList[i]; |
| | | BattleEffectPlayer effectPlayer = _runList[i]; |
| | | if (effectPlayer != null) |
| | | { |
| | | effectPlayer.Run(); |
| | |
| | | |
| | | public void Release() |
| | | { |
| | | List<int> fKeys = effectDict.Keys.ToList(); |
| | | |
| | | for (int i = 0; i < fKeys.Count; i++) |
| | | // 必须先快照key列表,因为DestroyImmediate会同步触发OnEffectDestroy修改effectDict |
| | | _runList.Clear(); |
| | | var keys = new List<int>(effectDict.Keys); |
| | | for (int k = 0; k < keys.Count; k++) |
| | | { |
| | | List<BattleEffectPlayer> effectPlayers = effectDict[fKeys[i]]; |
| | | if (!effectDict.TryGetValue(keys[k], out var effectPlayers)) |
| | | continue; |
| | | while (effectPlayers.Count > 0) |
| | | { |
| | | var effectPlayer = effectPlayers[0]; |