Example #1
0
 public override OrderResult Execute(Unit executor)
 {
     Ability.AbilityResult result = executor.UseUntargetedAbility(m_ability);
     // We'll clear the Order regardless of whether it failed or succeeded because, with
     // untargeted Abilities, there is nothing the Unit can do by itself to fix the failure condition.
     Fail(executor, AbilityResultToOrderResult(result));
     return(AbilityResultToOrderResult(result));
 }
Example #2
0
 public override OrderResult Execute(Unit executor)
 {
     Ability.AbilityResult result = executor.UseUnitTargetedAbility(m_ability, m_targetUnit);
     if (result != Ability.AbilityResult.OK)
     {
         ResolveAbilityFailure(executor, m_ability, result, m_targetUnit.Position);
     }
     return(AbilityResultToOrderResult(result));
 }
Example #3
0
    public OrderResult AbilityResultToOrderResult(Ability.AbilityResult result)
    {
        switch (result)
        {
        case Ability.AbilityResult.OK:                  return(OrderResult.OK);

        case Ability.AbilityResult.OutOfRange:          return(OrderResult.OutOfRange);

        case Ability.AbilityResult.InsufficientMana:    return(OrderResult.InsufficientMana);

        case Ability.AbilityResult.AbilityOnCooldown:   return(OrderResult.AbilityOnCooldown);

        default:                                        return(OrderResult.Unknown);
        }
    }
Example #4
0
 protected void ResolveAbilityFailure(Unit executor, Ability failingAbility, Ability.AbilityResult failureCondition, Vector3 locationOfTarget)
 {
     if (failureCondition == Ability.AbilityResult.OK)
     {
         return; // The ability activated successfully; nothing to be done.
     }
     // If we failed to activate the Ability because we're out of range but we're capable
     // of moving closer to the target, move toward the target and retry.
     if (failureCondition == Ability.AbilityResult.OutOfRange)
     {
         if (executor.CanReach(locationOfTarget, failingAbility.GetRange()))
         {
             executor.MoveToward(locationOfTarget);
         }
         else
         {
             Fail(executor, AbilityResultToOrderResult(failureCondition)); // If we can't move closer, give up.
         }
     }
     else   // Ability failed for some reason other than range; nothing we can do about that.
     {
         Fail(executor, AbilityResultToOrderResult(failureCondition));
     }
 }