fantasy_realms_unofficial_api 0.1.0

An unofficial API for the Fantasy Realms card game.
Documentation
use super::*;

pub(crate) const WARSHIP: Card = Card {
    name: Name::Warship,
    suit: Suit::Weapon,
    strength: 23,
    adder: None,
    wild: None,
    modifier: Some(warship_modifier),
    immunity: None,
    blanks: Some(warship_blanks),
    bonus: None,
    penalty: None,
};

pub(crate) fn warship_modifier(hand: &Vec<Card>) -> Vec<Vec<Card>> {
    vec![hand
        .iter()
        .map(|card| {
            if card.name == Name::GreatFlood {
                Card {
                    blanks: Some(great_flood_blanks_modified),
                    ..*card
                }
            } else if card.name == Name::Swamp {
                Card {
                    penalty: Some(swamp_penalty_modified),
                    ..*card
                }
            } else {
                *card
            }
        })
        .collect::<Vec<Card>>()]
}

pub(crate) fn warship_blanks(hand: &Vec<Card>, _: &CardCollection, blanks: &mut CardCollection) {
    if !hand.iter().any(|card| card.suit == Suit::Flood) {
        *blanks += Name::Warship
    }
}

pub(crate) fn great_flood_blanks_modified(_: &Vec<Card>, immunity: &CardCollection, blanks: &mut CardCollection){
    let mut updated_blanks = CardCollection::new();
    if !immunity.contains(Suit::Land) {
        updated_blanks += Suit::Land;
    }
    if !immunity.contains(Suit::Flame) {
        updated_blanks += Suit::Flame;
    }
    updated_blanks -= Name::Mountain;
    updated_blanks -= Name::Lightning;
    *blanks += updated_blanks;
}

pub(crate) fn swamp_penalty_modified(hand: &ScoringHand, immunity: &CardCollection) -> i16 {
    if !immunity.contains(Suit::Flame) {
        3 * hand.number_of_suit(Suit::Flame)
    } else {
        0
    }
}