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