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); } } }
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); } } }
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))); }