public List<Actor> GetActors(FilteCondition filteCondition, Actor compareTarget = null) { m_allActors = ActorManager.AllActors; List<Actor> _filtedActors = new List<Actor>(); switch (filteCondition.filteBy) { case FilteBy.Distance: case FilteBy.Hp: { AddActorBySatus(filteCondition, m_allActors, ref _filtedActors, compareTarget); break; } case FilteBy.Type: { if (filteCondition.compareCondition != CompareCondition.Is) { Debug.LogWarning("FilteCondition MUST be \"Is\" when filting by ActorType"); break; } for (int i = 0; i < m_allActors.Count; i++) { if (m_allActors[i].GetCharacterStatus().HP <= 0) { continue; } switch (filteCondition.actorType) { case ActorType.All: { _filtedActors.Add(m_allActors[i]); break; } case ActorType.Normal: case ActorType.Shooter: case ActorType.Zombie: { if (IsMatchNeededActorType(filteCondition.actorType, m_allActors[i])) { _filtedActors.Add(m_allActors[i]); } break; } } } break; } } return _filtedActors; }
private void AddActorBySatus(FilteCondition filteCondition, List<Actor> allActors, ref List<Actor> addTo, Actor compareTarget) { for (int i = 0; i < allActors.Count; i++) { float _targetValue = 0f; float _actorValue = 0f; switch (filteCondition.filteBy) { case FilteBy.Distance: { if (compareTarget != null) { _targetValue = filteCondition.value; _actorValue = Vector3.Distance(allActors[i].transform.position, compareTarget.transform.position); } else { Debug.LogError("Need to set a compare target when filting actors by distance"); } break; } case FilteBy.Hp: { if (compareTarget != null) { _targetValue = compareTarget.GetCharacterStatus().HP + filteCondition.value; } else { _targetValue = filteCondition.value; } _actorValue = allActors[i].GetCharacterStatus().HP; break; } // rest of Values.... } switch (filteCondition.compareCondition) { case CompareCondition.Is: { if (_actorValue == _targetValue) { if (IsMatchNeededActorType(filteCondition.actorType, allActors[i])) { addTo.Add(allActors[i]); } break; } break; } case CompareCondition.More: { if (_actorValue >= _targetValue) { if (IsMatchNeededActorType(filteCondition.actorType, allActors[i])) { addTo.Add(allActors[i]); } break; } break; } case CompareCondition.Less: { if (_actorValue <= _targetValue) { if (IsMatchNeededActorType(filteCondition.actorType, allActors[i])) { addTo.Add(allActors[i]); } break; } break; } } } }