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

SetupAbilityForUse() public static method

Resets usage variables and sets the target location or target ID depending on what condition passed.
public static SetupAbilityForUse ( Skill &ability, CacheObject obj, bool Destructible = false ) : void
ability Skill
obj CacheObject
Destructible bool
return void
        public static void SetupAbilityForUse(ref Skill ability, CacheObject obj, bool Destructible = false)
        {
            ability.MinimumRange = ability.Range;
            ability.TargetPosition_ = Vector3.Zero;
            ability._targetAcdguid = -1;
            ability.WaitLoopsBefore_ = ability.WaitVars.PreLoops;
            ability.WaitLoopsAfter_ = ability.WaitVars.PostLoops;
            ability.CanCastFlags = PowerManager.CanCastFlags.None;
            ability.SuccessUsed_ = null;
            ability.Target_ = null;
            ability.preActivationFinished = false;
            ability.ActivationFinished = false;
            ability.postActivationFinished = false;

            //Destructible Setup
            if (Destructible)
            {
                if (!ability.IsRanged)
                    ability.MinimumRange = 8f;
                else
                    ability.MinimumRange = 30f;

                bool LocationalAttack = (CacheIDLookup.hashDestructableLocationTarget.Contains(obj.SNOID)
                                                  || DateTime.Now.Subtract(PowerCacheLookup.dictAbilityLastFailed[ability.Power]).TotalMilliseconds < 1000);

                if (LocationalAttack)
                {
                    Vector3 attacklocation = obj.Position;

                    if (!ability.IsRanged)
                    {
                        //attacklocation=MathEx.CalculatePointFrom(FunkyGame.Hero.Class_.Data.Position,Bot.Target.CurrentTarget.Position, 0.25f);
                        attacklocation = MathEx.GetPointAt(FunkyGame.Hero.Position, 0.50f, Navigation.Navigation.FindDirection(FunkyGame.Hero.Position, obj.Position, true));
                    }
                    else
                    {
                        attacklocation = MathEx.GetPointAt(obj.Position, 1f, Navigation.Navigation.FindDirection(obj.Position, FunkyGame.Hero.Position, true));
                    }

                    attacklocation.Z = Navigation.Navigation.MGP.GetHeight(attacklocation.ToVector2());
                    ability.TargetPosition = attacklocation;
                }
                else
                {
                    if (obj.AcdGuid.HasValue)
                        ability.TargetACDGUID = obj.AcdGuid.Value;
                }

                return;
            }

            if (ability.LastConditionPassed == ConditionCriteraTypes.Cluster)
            {
                CacheUnit ClusterUnit;
                //Cluster Target -- Aims for Centeroid Unit
                if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterTarget) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster ACDGUID
                {
                    ClusterUnit = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].GetNearestUnitToCenteroid();
                    if (ClusterUnit.AcdGuid.HasValue)
                        ability.TargetACDGUID = ClusterUnit.AcdGuid.Value;

                    ability.Target_ = ClusterUnit;
                    return;
                }
                //Cluster Location -- Aims for Center of Cluster
                if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterLocation) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
                {
                    ability.TargetPosition = (Vector3)FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].Midpoint;
                    return;
                }
                //Cluster Location Nearest
                if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterLocationNearest) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
                {
                    ability.TargetPosition = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].ListUnits[0].Position;
                    return;
                }
                //Cluster Target Nearest -- Gets nearest unit in cluster as target.
                if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterTargetNearest) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
                {
                    ClusterUnit = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].ListUnits[0];
                    if (ClusterUnit.AcdGuid.HasValue)
                        ability.TargetACDGUID = ClusterUnit.AcdGuid.Value;

                    ability.Target_ = ClusterUnit;
                    return;
                }
            }

            if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Location)) //Current Target Position
            {
                ability.TargetPosition = obj.Position;
                ability.Target_ = (CacheUnit)obj;
            }
            else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Self)) //Current Bot Position
                ability.TargetPosition = FunkyGame.Hero.Position;
            else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ZigZagPathing)) //Zig-Zag Pathing
            {
                FunkyGame.Navigation.vPositionLastZigZagCheck = FunkyGame.Hero.Position;
                if (FunkyGame.Hero.Class.ShouldGenerateNewZigZagPath()) FunkyGame.Hero.Class.GenerateNewZigZagPath();

                ability.TargetPosition = FunkyGame.Navigation.vSideToSideTarget;
            }
            else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Target)) //Current Target ACDGUID
            {
                if (obj is CacheUnit)
                    ability.Target_ = (CacheUnit)obj;

                if (obj.AcdGuid.HasValue)
                    ability.TargetACDGUID = obj.AcdGuid.Value;
            }
        }