use forge_foundation::ZoneType;
use crate::ids::{CardId, PlayerId};
use super::Zone;
#[derive(Debug, Clone)]
pub struct PlayerZone {
pub zone: Zone,
pub player: PlayerId,
}
impl PlayerZone {
pub fn new(zone_type: ZoneType, player: PlayerId) -> Self {
PlayerZone {
zone: Zone::new(zone_type, player),
player,
}
}
pub fn get_player(&self) -> PlayerId {
self.player
}
pub fn test(&self, card: CardId) -> bool {
self.zone.contains(card)
}
pub fn get_cards_player_can_activate(&self, who: PlayerId) -> Vec<CardId> {
let is_owner = who == self.player;
let zone_type = self.zone.zone_type;
if is_owner && (zone_type == ZoneType::Battlefield || zone_type == ZoneType::Hand) {
return self.zone.cards.clone();
}
if zone_type == ZoneType::Library {
return self.zone.cards.last().copied().into_iter().collect();
}
self.zone.cards.clone()
}
}
impl std::ops::Deref for PlayerZone {
type Target = Zone;
fn deref(&self) -> &Zone {
&self.zone
}
}
impl std::ops::DerefMut for PlayerZone {
fn deref_mut(&mut self) -> &mut Zone {
&mut self.zone
}
}