internal List<Skill> ReturnAllUsableAbilities(CacheUnit obj, bool IgnoreOutOfRange = false)
{
//Reset default attack can use
CanUseDefaultAttack = !Abilities.ContainsKey(DefaultAttack.Power) ? false : true;
ConditionCriteraTypes criterias = ConditionCriteraTypes.All;
//Although the unit is a cluster exception.. we should verify it is not a clustered object.
if (obj.IsClusterException && obj.BeingIgnoredDueToClusterLogic)
{
criterias = ConditionCriteraTypes.SingleTarget;
}
List<Skill> UsableAbilities = new List<Skill>();
foreach (var item in SortedAbilities)
{
//Check precast conditions
if (!item.CheckPreCastConditionMethod()) continue;
//Check Combat Conditions!
if (!item.CheckCombatConditionMethod(conditions: criterias))
{
continue;
}
//Check if we can execute or if it requires movement
if (IgnoreOutOfRange)
{
if (item.DestinationVector != FunkyGame.Hero.Position)
continue;
}
Skill ability = item;
Skill.SetupAbilityForUse(ref ability, obj);
UsableAbilities.Add(ability);
}
return UsableAbilities;
}