Skip to main content

manabrew_engine/phase/
extra_turn.rs

1//! ExtraTurn — stores information about extra turns.
2//!
3//! Mirrors Java's `ExtraTurn.java`.
4
5use crate::ids::PlayerId;
6
7/// An extra turn entry — tracks who gets the turn and any modifications.
8/// Mirrors Java's `ExtraTurn` class.
9#[derive(Debug, Clone)]
10pub struct ExtraTurn {
11    pub player: PlayerId,
12    /// If true, the untap step is skipped during this extra turn.
13    pub skip_untap: bool,
14    /// Delayed triggers to register when this extra turn begins.
15    delayed_triggers: Vec<String>,
16    /// If true, the player can't set schemes in motion this turn (Archenemy).
17    pub cant_set_schemes_in_motion: bool,
18}
19
20impl ExtraTurn {
21    pub fn new(player: PlayerId) -> Self {
22        ExtraTurn {
23            player,
24            skip_untap: false,
25            delayed_triggers: Vec::new(),
26            cant_set_schemes_in_motion: false,
27        }
28    }
29
30    pub fn get_player(&self) -> PlayerId {
31        self.player
32    }
33
34    pub fn set_player(&mut self, player: PlayerId) {
35        self.player = player;
36    }
37
38    pub fn add_trigger(&mut self, del_trigger: String) {
39        self.delayed_triggers.push(del_trigger);
40    }
41
42    pub fn get_delayed_triggers(&self) -> &[String] {
43        &self.delayed_triggers
44    }
45
46    pub fn is_skip_untap(&self) -> bool {
47        self.skip_untap
48    }
49
50    pub fn set_skip_untap(&mut self, skip: bool) {
51        self.skip_untap = skip;
52    }
53
54    pub fn is_cant_set_schemes_in_motion(&self) -> bool {
55        self.cant_set_schemes_in_motion
56    }
57
58    pub fn set_cant_set_schemes_in_motion(&mut self, cant: bool) {
59        self.cant_set_schemes_in_motion = cant;
60    }
61}