diff options
Diffstat (limited to 'src/card')
| -rw-r--r-- | src/card/card.rs | 62 | ||||
| -rw-r--r-- | src/card/effect.rs | 14 | ||||
| -rw-r--r-- | src/card/mod.rs | 6 | ||||
| -rw-r--r-- | src/card/player.rs | 30 |
4 files changed, 112 insertions, 0 deletions
diff --git a/src/card/card.rs b/src/card/card.rs new file mode 100644 index 0000000..72b992a --- /dev/null +++ b/src/card/card.rs @@ -0,0 +1,62 @@ +use crate::card::effect::*; +use crate::card::player::*; +use crate::rand_u8; + +#[allow(dead_code)] +#[derive(Copy,Clone)] +pub struct Card { + pub n: u8, + pub e: u8, + pub s: u8, + pub w: u8, + pub owner: PlayerId, + pub effect: Option<CardEffect>, +} + +#[allow(dead_code)] +impl Default for Card { + fn default() -> Self { + Card { + n: 0, + e: 0, + s: 0, + w: 0, + owner: PlayerId::default(), + effect: None, + } + } +} + +impl core::fmt::Debug for Card { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + if let Err(error) = write!(f, "Card {{\n\towner: {:?}\n\tn: {:?},\n\te: {:?},\n\ts: {:?},\n\tw: {:?}", self.owner, self.n, self.e, self.s, self.w) { + return Err(error); + } + if let Some(effect) = self.effect { + if let Err(error) = write!(f, "\n\teffect: {:?}", effect) { + return Err(error); + } + } + write!(f, "\n}}") + } +} + +impl Card { + pub fn new(owner: PlayerId) -> Self { + Self { + n: 0, + e: 0, + s: 0, + w: 0, + owner: owner, + effect: None, + } + } + + pub fn randomize(&mut self) { + self.n = rand_u8(); + self.e = rand_u8(); + self.s = rand_u8(); + self.w = rand_u8(); + } +} diff --git a/src/card/effect.rs b/src/card/effect.rs new file mode 100644 index 0000000..a5f909e --- /dev/null +++ b/src/card/effect.rs @@ -0,0 +1,14 @@ +#[allow(dead_code)] +#[derive(Copy,Clone)] +pub struct CardEffect { + pub name: &'static str, + pub when: usize, // TODO: Change this + pub fun: &'static dyn Fn(), +} + +impl core::fmt::Debug for CardEffect { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "{}", self.name) + } +} + diff --git a/src/card/mod.rs b/src/card/mod.rs new file mode 100644 index 0000000..64eb9b5 --- /dev/null +++ b/src/card/mod.rs @@ -0,0 +1,6 @@ +pub mod card; +pub mod effect; +pub mod player; +//pub use card::*; +//pub use effect::*; +//pub use player::*; diff --git a/src/card/player.rs b/src/card/player.rs new file mode 100644 index 0000000..1439258 --- /dev/null +++ b/src/card/player.rs @@ -0,0 +1,30 @@ +#[allow(non_camel_case_types)] +#[allow(dead_code)] +#[derive(Copy,Clone)] +pub enum PlayerId { + NONE, + PLAYER_1, + PLAYER_2, +} + +impl Default for PlayerId { + fn default() -> Self { + PlayerId::NONE + } +} + +impl core::fmt::Debug for PlayerId { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match *self { + PlayerId::NONE => { + write!(f, "PlayerId::NONE ") + }, + PlayerId::PLAYER_1 => { + write!(f, "PlayerId::PLAYER_1") + }, + PlayerId::PLAYER_2 => { + write!(f, "PlayerId::PLAYER_2") + }, + } + } +} |
