Skip to main content

Zone

Struct Zone 

Source
pub struct Zone {
    pub zone_type: ZoneType,
    pub owner: PlayerId,
    pub cards: Vec<CardId>,
    pub cards_added_this_turn: Vec<(ZoneType, CardId)>,
    pub cards_added_last_turn: Vec<(ZoneType, CardId)>,
    pub melded_cards: Vec<CardId>,
    pub triggers_enabled: bool,
}
Expand description

A game zone owned by a specific player. Each player has their own Hand, Library, Graveyard, etc. Battlefield and Stack are shared but cards still track their controller.

Mirrors Java’s Zone.java.

Fields§

§zone_type: ZoneType§owner: PlayerId§cards: Vec<CardId>§cards_added_this_turn: Vec<(ZoneType, CardId)>

Cards added this turn, keyed by their origin zone.

§cards_added_last_turn: Vec<(ZoneType, CardId)>

Cards added last turn, keyed by their origin zone.

§melded_cards: Vec<CardId>

Cards that have been melded (combined into a single permanent). Only meaningful when zone_type == Battlefield.

§triggers_enabled: bool

Whether entering-the-battlefield triggers are active. Mirrors Java’s PlayerZoneBattlefield.trigger field. Only meaningful when zone_type == Battlefield.

Implementations§

Source§

impl Zone

Source

pub fn new(zone_type: ZoneType, owner: PlayerId) -> Self

Source

pub fn add(&mut self, card: CardId)

Source

pub fn add_to_top(&mut self, card: CardId)

Source

pub fn add_to_bottom(&mut self, card: CardId)

Source

pub fn remove(&mut self, card: CardId) -> bool

Source

pub fn remove_all_cards(&mut self)

Remove all cards from the zone. Mirrors Java’s Zone.removeAllCards().

Source

pub fn reorder(&mut self, card: CardId, index: usize)

Reorder a card to a specific index. Mirrors Java’s Zone.reorder().

Source

pub fn contains(&self, card: CardId) -> bool

Source

pub fn is(&self, zone_type: ZoneType) -> bool

Check if this zone is the given type. Mirrors Java’s Zone.is().

Source

pub fn size(&self) -> usize

Number of cards in the zone. Mirrors Java’s Zone.size().

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn get(&self, index: usize) -> Option<CardId>

Get the card at the given index. Mirrors Java’s Zone.get().

Source

pub fn take_top(&mut self) -> Option<CardId>

Take the top card (last element = top of library).

Source

pub fn peek_top(&self) -> Option<CardId>

Peek at the top card without removing it.

Source

pub fn reset_cards_added_this_turn(&mut self)

Reset turn tracking: move this-turn data to last-turn. Mirrors Java’s Zone.resetCardsAddedThisTurn().

Source

pub fn iterator(&self) -> impl Iterator<Item = &CardId>

Provides an iterator over the cards in this zone. Mirrors Java’s Zone.iterator().

Source

pub fn shuffle(&mut self, rng: &mut dyn GameRng)

Shuffle the cards in this zone using the provided RNG. Mirrors Java’s Zone.shuffle().

All game randomness must flow through the game’s RNG for deterministic replay and parity testing.

Source

pub fn add_to_melded(&mut self, card: CardId)

Add a card to the melded cards list. Mirrors Java’s PlayerZoneBattlefield.addToMelded().

Source

pub fn remove_from_melded(&mut self, card: CardId)

Remove a card from the melded cards list. Mirrors Java’s PlayerZoneBattlefield.removeFromMelded().

Source

pub fn get_cards(&self, _filter: bool) -> &[CardId]

Get the cards in this zone. The _filter parameter is ignored for non-battlefield zones (they always return the full list). Battlefield filtering is handled by PlayerZoneBattlefield::get_cards(). Mirrors Java’s Zone.getCards(boolean).

Source

pub fn get_cards_added_this_turn(&self, origin: ZoneType) -> Vec<CardId>

Get cards that were added to this zone this turn from the given origin zone. Mirrors Java’s Zone.getCardsAddedThisTurn(ZoneType).

Source

pub fn get_cards_added_last_turn(&self, origin: ZoneType) -> Vec<CardId>

Get cards that were added to this zone last turn from the given origin zone. Mirrors Java’s Zone.getCardsAddedLastTurn(ZoneType).

Source

pub fn is_card_added_this_turn(&self, card: CardId, origin: ZoneType) -> bool

Check whether a specific card was added to this zone this turn from the given origin zone. Mirrors Java’s Zone.isCardAddedThisTurn(Card, ZoneType).

Source

pub fn get_lki_copy(&self) -> Zone

Create a shallow copy of this zone for last-known-information purposes. The returned zone has the same type, owner, and card list. Mirrors Java’s Zone.getLKICopy().

Source

pub fn save_lki(&mut self, card: CardId, origin_zone: ZoneType)

Save last-known-information for a card entering this zone. Mirrors Java’s Zone.saveLKI().

Trait Implementations§

Source§

impl Clone for Zone

Source§

fn clone(&self) -> Zone

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Zone

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Zone

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Zone

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Zone

§

impl RefUnwindSafe for Zone

§

impl Send for Zone

§

impl Sync for Zone

§

impl Unpin for Zone

§

impl UnsafeUnpin for Zone

§

impl UnwindSafe for Zone

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

Source§

fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The type for metadata in pointers and references to Self.
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V