예제 #1
0
    public string GetOnTryToAttackMessage(bool isFriendly, MeleUnitBlockingCondition meleUnitBlockingCondition = MeleUnitBlockingCondition.None)
    {
        if (isFriendly)
        {
            return(onTryToAttackFriendlyMessage);
        }
        else
        {
            switch (meleUnitBlockingCondition)
            {
            case MeleUnitBlockingCondition.None:
                return(onTryToAttackNonBlockedEnemyMessage);

            case MeleUnitBlockingCondition.AttackerIsBlockedByFriendlyFrontRowUnits:
                return(onTryToAttackEnemyIfMeleAttackerIsBlockedByFriendlyFrontRowUnitsMessage);

            case MeleUnitBlockingCondition.TargetUnitIsProtectedByFriendlyUnitsInFrontRow:
                return(onTryToAttackEnemyIfMeleAttackerAndTargetIsProtectedByFriendlyUnitsInFrontRowMessage);

            case MeleUnitBlockingCondition.TargetUnitIsProtectedByUnitAbove:
                return(onTryToAttackEnemyIfMeleAttackerAndTargetIsProtectedByUnitAboveMessage);

            case MeleUnitBlockingCondition.TargetUnitIsProtectedByUnitBelow:
                return(onTryToAttackEnemyIfMeleAttackerAndTargetIsProtectedByUnitBelowMessage);

            default:
                Debug.LogError("Unknown MeleUnitBlockingCondition: " + meleUnitBlockingCondition);
                return(onTryToAttackNonBlockedEnemyMessage);
            }
        }
    }
예제 #2
0
 public bool GetCanBeAttacked(bool isFriendly, MeleUnitBlockingCondition meleUnitBlockingCondition = MeleUnitBlockingCondition.None)
 {
     if (isFriendly)
     {
         return(canBeAttackedIfFriendly);
     }
     else
     {
         // verify if there is no blocking condition
         if (MeleUnitBlockingCondition.None == meleUnitBlockingCondition)
         {
             return(canBeAttackedIfEnemyAndNotBlocked);
         }
         else
         {
             return(canBeAttackedIfEnemyAndBlocked);
         }
     }
 }
예제 #3
0
    ValidationResult DoDiscardModifierInContextOf(System.Object srcContext, System.Object dstContext)
    {
        // verify if source or destination context do not match requirements of this limiter
        if (!DoesContextMatch(srcContext, dstContext))
        {
            // context is not in scope of this limiter
            // don't limit
            return(ValidationResult.Pass());
        }
        // get and cache mele unit blocking condition
        MeleUnitBlockingCondition meleUnitBlockingCondition = GetMeleUnitBlockingCondition(srcContext, dstContext);

        // verify if mele blocking condition has been triggered
        if (MeleUnitBlockingCondition.None == meleUnitBlockingCondition)
        {
            // destination cell can be reached - dont' limit modifier
            return(ValidationResult.Pass());
        }
        // Default: destination cell is not reachable - discard modifier
        return(ValidationResult.Discard(GetOnLimitMessage(meleUnitBlockingCondition)));
    }