fBaseXtensions.Game.Hero.Skills.Conditions.UnitTargetConditions.CreateCriteria C# (CSharp) Method

CreateCriteria() private method

private CreateCriteria ( ) : void
return void
        private void CreateCriteria()
        {
            Criteria += unit =>
            {
                if (unit == null)
                {
                    Logger.DBLog.DebugFormat("[Funky] Recieved null CacheUnit value in skill criteria evaluation");
                    return true;
                }

                return true;
            };
            //Distance
            if (MaximumDistance > -1)
                Criteria += (unit) => unit.TargetInfo.RadiusDistance <= MaximumDistance;
            if (MinimumDistance > -1)
                Criteria += (unit) => unit.TargetInfo.RadiusDistance >= MinimumDistance;

            //Health
            if (HealthPercent > 0d)
                Criteria += (unit) => unit.CurrentHealthPct.HasValue && unit.CurrentHealthPct.Value <= HealthPercent;

            //TRUE CONDITIONS
            if (TrueConditionFlags.Equals(TargetProperties.None))
                Criteria += (unit) => true;
            else
            {
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Boss))
                    Criteria += (unit) => unit.IsBoss;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Burrowing))
                    Criteria += (unit) => unit.IsBurrowableUnit;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.FullHealth))
                    Criteria += (unit) => unit.CurrentHealthPct.HasValue &&
                                      unit.CurrentHealthPct.Value == 1d;

                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Weak))
                    Criteria += (unit) => unit.UnitMaxHitPointAverageWeight < 0;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.MissileDampening))
                    Criteria += (unit) => unit.MonsterMissileDampening;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.RareElite))
                    Criteria += (unit) => unit.IsEliteRareUnique;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.MissileReflecting))
                    Criteria += (unit) => unit.IsMissileReflecting && unit.AnimState == AnimationState.Transform;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Shielding))
                    Criteria += (unit) => unit.MonsterShielding;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Stealthable))
                    Criteria += (unit) => unit.IsStealthableUnit;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.SucideBomber))
                    Criteria += (unit) => unit.IsSucideBomber;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.TreasureGoblin))
                    Criteria += (unit) => unit.IsTreasureGoblin;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Unique))
                    Criteria += (unit) => unit.MonsterUnique;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Ranged))
                    Criteria += (unit) => unit.IsRanged;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.TargetableAndAttackable))
                    Criteria += (unit) => unit.IsTargetableAndAttackable;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Fast))
                    Criteria += (unit) => unit.IsFast;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.DOTDPS))
                    Criteria += (unit) => unit.HasDOTdps.HasValue && unit.HasDOTdps.Value;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.CloseDistance))
                    Criteria += (unit) => unit.TargetInfo.RadiusDistance < 10f;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.ReflectsDamage))
                    Criteria += (unit) => unit.MonsterReflectDamage;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Electrified))
                    Criteria += (unit) => unit.MonsterElectrified;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Normal))
                    Criteria += (unit) => unit.MonsterNormal;
                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.LowHealth))
                    Criteria += (unit) => unit.CurrentHealthPct.HasValue && unit.CurrentHealthPct.Value < 0.25d;

                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Flying))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value,UnitFlags.Flying);

                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Summoner))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Summoner);

                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.AvoidanceSummoner))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.AvoidanceSummoner);

                if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Debuffing))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Debuffing);
            }

            //FALSE CONDITIONS
            if (FalseConditionFlags.Equals(TargetProperties.None))
                Criteria += (unit) => true;
            else
            {
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Boss))
                    Criteria += (unit) => !unit.IsBoss;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Burrowing))
                    Criteria += (unit) => !unit.IsBurrowableUnit;

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.FullHealth))
                    Criteria += (unit) => unit.CurrentHealthPct.HasValue &&
                                      unit.CurrentHealthPct.Value < 1d;

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Weak))
                    Criteria += (unit) => unit.UnitMaxHitPointAverageWeight > 0;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.MissileDampening))
                    Criteria += (unit) => !unit.MonsterMissileDampening;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.RareElite))
                    Criteria += (unit) => !unit.IsEliteRareUnique;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.MissileReflecting))
                    Criteria += (unit) => !unit.IsMissileReflecting || unit.AnimState != AnimationState.Transform;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Shielding))
                    Criteria += (unit) => !unit.MonsterShielding;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Stealthable))
                    Criteria += (unit) => !unit.IsStealthableUnit;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.SucideBomber))
                    Criteria += (unit) => !unit.IsSucideBomber;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.TreasureGoblin))
                    Criteria += (unit) => !unit.IsTreasureGoblin;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Unique))
                    Criteria += (unit) => !unit.MonsterUnique;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Ranged))
                    Criteria += (unit) => !unit.IsRanged;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.TargetableAndAttackable))
                    Criteria += (unit) => !unit.IsTargetableAndAttackable;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Fast))
                    Criteria += (unit) => !unit.IsFast;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.DOTDPS))
                    Criteria += (unit) => !unit.HasDOTdps.HasValue || !unit.HasDOTdps.Value;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.CloseDistance))
                    Criteria += (unit) => unit.TargetInfo.RadiusDistance > 10f;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.ReflectsDamage))
                    Criteria += (unit) => !unit.MonsterReflectDamage;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Electrified))
                    Criteria += (unit) => !unit.MonsterElectrified;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Normal))
                    Criteria += (unit) => !unit.MonsterNormal;
                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.LowHealth))
                    Criteria += (unit) => !unit.CurrentHealthPct.HasValue || unit.CurrentHealthPct.Value >= 0.25d;

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Flying))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            !ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Flying);

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Summoner))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            !ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Summoner);

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.AvoidanceSummoner))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            !ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.AvoidanceSummoner);

                if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Debuffing))
                    Criteria +=
                        (unit) =>
                            unit.UnitPropertyFlags.HasValue &&
                            !ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Debuffing);
            }
        }