using System.Collections.Generic; using UnityEngine; public class BattleEffectPlayRule : Singleton { public readonly List sortPlayerList = new List(); public readonly List showPlayerList = new List(); public void AddPlayer(uint id) { if (sortPlayerList.Contains(id)) { return; } sortPlayerList.Add(id); SortList(); // 是否已经达到数量显示上限 if (showPlayerList.Count < limit) { showPlayerList.Add(id); } } public void RemovePlayer(uint id) { if (sortPlayerList.Contains(id)) { sortPlayerList.Remove(id); } SortList(); if(showPlayerList.Contains(id)) { showPlayerList.Remove(id); for(int i = 0;i < sortPlayerList.Count;++i) { if(showPlayerList.Contains(sortPlayerList[i])) { continue; } showPlayerList.Add(sortPlayerList[i]); break; } GAMgr.Instance.OnPlayerSyncCountChange(); } } private int limit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityEffectCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityEffectCount; } else { return GeneralDefine.lowQualityEffectCount; } } } public int petLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityPetCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityPetCount; } else { return GeneralDefine.lowQualityPetCount; } } } public int guardLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityGuardCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityGuardCount; } else { return GeneralDefine.lowQualityGuardCount; } } } public int petEffectLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityPetEffectCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityPetEffectCount; } else { return GeneralDefine.lowQualityPetEffectCount; } } } public int horseEffectLimit { get { if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.High) { return GeneralDefine.highQualityHorseEffectCount; } else if (SystemSetting.Instance.GetCurrentQualityLevel() == GameQuality.Medium) { return GeneralDefine.medQualityHorseEffectCount; } else { return GeneralDefine.lowQualityHorseEffectCount; } } } public float timeEscape; private void SortList() { GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero == null) { return; } sortPlayerList.Sort((id1, id2) => { GActor _actor1 = GAMgr.Instance.GetBySID(id1); GActor _actor2 = GAMgr.Instance.GetBySID(id2); float _dis1 = 0f; float _dis2 = 0f; if (_actor1 != null) { _dis1 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor1.Pos); } if (_actor2 != null) { _dis2 = MathUtility.DistanceSqrtXZ(_hero.Pos, _actor2.Pos); } return _dis2 > _dis1 ? -1 : 1; }); } public void Update() { } public int GetIndex(uint sid) { return sortPlayerList.IndexOf(sid); } public bool CanPlay(uint sid) { GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero == null) { return false; } if (_hero.ServerInstID == sid) { return true; } // 选中英雄必显示 if (_hero.SelectTarget != null) { if (_hero.SelectTarget.ServerInstID == sid) { return true; } } if (_hero.LockTarget != null) { if (_hero.LockTarget.ServerInstID == sid) { return true; } } if(!showPlayerList.Contains(sid)) { return false; } // 获取传入的玩家在排序后的队列中的索引 int _index = sortPlayerList.IndexOf(sid); // 不存在可能是异常,不播放 if (_index < 0) { return false; } // 在限定的数量内,允许播放 if (_index < limit) { return true; } return false; } }