fBaseXtensions.Game.Hero.Skills.Skill.CheckCombatConditionMethod C# (CSharp) Method

CheckCombatConditionMethod() public method

Check Combat
public CheckCombatConditionMethod ( ConditionCriteraTypes conditions = ConditionCriteraTypes.All, CacheUnit unit = null ) : bool
conditions ConditionCriteraTypes
unit fBaseXtensions.Cache.Internal.Objects.CacheUnit
return bool
        public bool CheckCombatConditionMethod(ConditionCriteraTypes conditions = ConditionCriteraTypes.All, CacheUnit unit = null)
        {
            //Order in which tests are conducted..

            //Units in Range (Not Cluster)
            //Clusters
            //Single Target

            //If all are null or any of them are successful, then we test Custom Conditions
            //Custom Condition

            //Reset Last Condition
            LastConditionPassed = ConditionCriteraTypes.None;
            bool TestCustomConditions = false;
            bool FailedCondition = false;

            if (conditions.HasFlag(ConditionCriteraTypes.Cluster) && ClusterConditions.Count > 0)
            {
                foreach (var condition in ClusterConditions)
                {
                    FailedCondition = false;

                    foreach (Func<bool> item in condition.Criteria.GetInvocationList())
                    {
                        if (!item())
                        {
                            FailedCondition = true;
                            break;
                        }
                    }

                    //Last Condition did not fail.. (Success!)
                    if (!FailedCondition)
                    {
                        LastConditionPassed = ConditionCriteraTypes.Cluster;
                        LastClusterConditionSuccessful=condition;
                        TestCustomConditions = true;
                        break;
                    }
                }
            }

            if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.SingleTarget) && SingleUnitCondition.Count > 0)
            {
                //We iterate each condition in the list and test the criteria.
                foreach (var condition in SingleUnitCondition)
                {
                    FailedCondition = false;

                    foreach (Func<CacheUnit,bool> item in condition.Criteria.GetInvocationList())
                    {
                        if (!item(unit))
                        {
                            FailedCondition = true;
                            break;
                        }
                    }

                    //Last Condition did not fail.. (Success!)
                    if (!FailedCondition)
                    {
                        LastConditionPassed = ConditionCriteraTypes.SingleTarget;
                        TestCustomConditions = true;
                        break;
                    }
                }
            }

            //If TestCustomCondtion failed, and FailedCondition is true.. then we tested a combat condition.
            //If FailedCondition is false, then we never tested a condition.
            if (!TestCustomConditions && !TestCustomCombatConditions) return false; //&&FailedCondition

            foreach (Func<CacheUnit, bool> item in FcriteriaCombat.GetInvocationList())
                if (!item(unit)) return false;

            return true;
        }