Skip to main content

PlayerZone

Struct PlayerZone 

Source
pub struct PlayerZone {
    pub zone: Zone,
    pub player: PlayerId,
}
Expand description

A zone owned by a specific player. Mirrors Java’s PlayerZone which extends Zone.

In Rust, we use composition rather than inheritance: PlayerZone wraps a Zone and adds player-specific behavior.

Note: The engine’s GameState stores zones as HashMap<ZoneKey, Zone>. PlayerZone provides the ported Java API for zone-level card filtering; callers that need card-state filtering (keywords, may-play) should use GameState methods which have access to CardInstance data.

Fields§

§zone: Zone§player: PlayerId

Implementations§

Source§

impl PlayerZone

Source

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

Source

pub fn get_player(&self) -> PlayerId

Source

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

Test whether a card in this zone passes a containment check. Mirrors Java’s inner OwnCardsActivationFilter.test().

Source

pub fn get_cards_player_can_activate(&self, who: PlayerId) -> Vec<CardId>

Get cards the given player can potentially activate from this zone. Mirrors Java’s PlayerZone.getCardsPlayerCanActivate().

This performs zone-level filtering:

  • Battlefield/Hand: owner sees all their cards
  • Library: only the top card is visible
  • Other zones: all cards returned (card-level keyword filtering like Flashback/Retrace requires GameState access)

Methods from Deref<Target = Zone>§

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 PlayerZone

Source§

fn clone(&self) -> PlayerZone

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 PlayerZone

Source§

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

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

impl Deref for PlayerZone

Source§

type Target = Zone

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Zone

Dereferences the value.
Source§

impl DerefMut for PlayerZone

Source§

fn deref_mut(&mut self) -> &mut Zone

Mutably dereferences the value.

Auto Trait Implementations§

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> 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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