using System.Collections.Generic;
|
using UnityEngine;
|
|
|
public class BattleEffectPlayRule : Singleton<BattleEffectPlayRule>
|
{
|
public readonly List<uint> sortPlayerList = new List<uint>();
|
public readonly List<uint> showPlayerList = new List<uint>();
|
|
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;
|
}
|
}
|