Exemple #1
0
        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;
        }
Exemple #2
0
        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;
                        }
                }
            }
        }