public static AttributesManager[] FindRangePlayer(PlayerFaction targetFaction, Vector3 center, float radius) { List <AttributesManager> rangeTeammateList = new List <AttributesManager>(); AttributesManager[] teammateAttrManager = AttributesManager.GetFactionAllAttrManager(targetFaction); float sqrRadius = Mathf.Sqrt(radius); foreach (AttributesManager tempTeammate in teammateAttrManager) { Vector3 centerToTeammate = tempTeammate.transform.position - center; float sqrMagnitude = centerToTeammate.sqrMagnitude; if (sqrMagnitude <= sqrRadius) { rangeTeammateList.Add(tempTeammate); } } return(rangeTeammateList.ToArray()); }
// 获得将被影响的AttributesManager private AttributesManager[] GetAllEffectAttrManager(AttributesManager userAttrManager) { PlayerFaction myFaction = userAttrManager.faction; PlayerFaction enemyFaction = AttributesManager.GetEnemyFaction(myFaction); Vector3 position = userAttrManager.transform.position; float radius = myItemGroup.itemInfo.radius; List <AttributesManager> effectAttrManagerList = new List <AttributesManager>(); switch (myItemGroup.itemInfo.effectGroup) { case EffectGroup.MySelf: effectAttrManagerList.Add(userAttrManager); break; case EffectGroup.RandomTeammate: AttributesManager[] teammates = AttributesManager.GetFactionAllAttrManager(myFaction); effectAttrManagerList.Add(teammates[Random.Range(0, teammates.Length)]); break; case EffectGroup.OneNearbyTeammate: AttributesManager nearbyTeammate = AttributesManager.FindNearbyPlayer(myFaction, position, radius); if (nearbyTeammate != null) { effectAttrManagerList.Add(nearbyTeammate); } break; case EffectGroup.RangeRandomTeammate: AttributesManager[] rangeTeamates = AttributesManager.FindRangePlayer(myFaction, position, radius); effectAttrManagerList.Add(rangeTeamates[Random.Range(0, rangeTeamates.Length)]); break; case EffectGroup.RangeTeammate: effectAttrManagerList.AddRange(AttributesManager.FindRangePlayer(myFaction, position, radius)); break; case EffectGroup.AllTeammate: effectAttrManagerList.AddRange(AttributesManager.GetFactionAllAttrManager(myFaction)); break; case EffectGroup.RandomEnemy: AttributesManager[] enemys = AttributesManager.GetFactionAllAttrManager(enemyFaction); effectAttrManagerList.Add(enemys[Random.Range(0, enemys.Length)]); break; case EffectGroup.OneNearbyEnemy: AttributesManager nearbyEnemy = AttributesManager.FindNearbyPlayer(enemyFaction, position, radius); if (nearbyEnemy != null) { effectAttrManagerList.Add(nearbyEnemy); } break; case EffectGroup.RangeRandomEnemy: AttributesManager[] rangeEnemys = AttributesManager.FindRangePlayer(enemyFaction, position, radius); effectAttrManagerList.Add(rangeEnemys[Random.Range(0, rangeEnemys.Length)]); break; case EffectGroup.RangeEnemy: effectAttrManagerList.AddRange(AttributesManager.FindRangePlayer(enemyFaction, position, radius)); break; case EffectGroup.AllEnemy: effectAttrManagerList.AddRange(AttributesManager.GetFactionAllAttrManager(enemyFaction)); break; } return(effectAttrManagerList.ToArray()); }