private static boolean tapTrigger(AbilityFactory af, SpellAbility sa, boolean mandatory) {
        if (!ComputerUtil.canPayCost(sa))
            return false;

        Target tgt = sa.getTarget();
        Card source = sa.getSourceCard();

        if (tgt == null) {
            if (mandatory)
                return true;

            // TODO: use Defined to determine, if this is an unfavorable result

            return true;
        } else {
            if (tapPrefTargeting(source, tgt, af, sa, mandatory)) {
                return true;
            } else if (mandatory) {
                // not enough preferred targets, but mandatory so keep going:
                return tapUnpreferredTargeting(af, sa, mandatory);
            }
        }

        return false;
    }