From ccc015a370b87cebec77c3f48cd72ec3039dea6d Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Wed, 7 Feb 2024 18:58:07 -0800 Subject: Report Card Effect In Debug --- src/main.rs | 53 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index a839b2f..14e53b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,20 @@ fn rand_u8() -> u8 { rng.gen() } +#[allow(dead_code)] +#[derive(Copy,Clone)] +struct CardEffect { + name: &'static str, + when: usize, // TODO: Change this + 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) + } +} + #[allow(dead_code)] #[derive(Copy,Clone)] struct Card { @@ -13,7 +27,7 @@ struct Card { s: u8, w: u8, owner: PlayerId, - special: Option<&'static dyn Fn()>, + effect: Option, } #[allow(non_camel_case_types)] @@ -56,14 +70,22 @@ impl Default for Card { s: 0, w: 0, owner: PlayerId::default(), - special: None, + effect: None, } } } impl core::fmt::Debug for Card { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - write!(f, "Card {{\n\tn: {:?},\n\te: {:?},\n\ts: {:?},\n\tw: {:?}\n\towner: {:?}\n}}", self.n, self.e, self.s, self.w, self.owner) + 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}}") } } @@ -75,7 +97,7 @@ impl Card { s: 0, w: 0, owner: owner, - special: None, + effect: None, } } @@ -264,27 +286,12 @@ impl core::fmt::Debug for Grid { } } -#[allow(dead_code)] -struct Entity { - attack: i64, - defense: i64, - special: Option<&'static dyn Fn()> -} - fn special_000() { println!("Hello, world!"); } #[allow(unused_variables)] fn main() { - let entity = Entity { - attack: 0, - defense: 0, - special: Some(&special_000), - }; - if let Some(function) = entity.special { - function(); - } let mut card = Card::new(PlayerId::PLAYER_1); println!("{:?}", card); card.n ^= 5; @@ -292,9 +299,17 @@ fn main() { card.n ^= 3; println!("{:?}", card); card.n = 254; + card.effect = Some(CardEffect { + name: "Say Hello", + when: 0, + fun: &special_000, + }); println!("{:?}", card); card.randomize(); println!("{:?}", card); + if let Some(effect) = card.effect { + (effect.fun)(); + } let mut grid = Grid::<3>::default(); println!("{:?}", grid); grid.field[0][1] = Some(card); -- cgit v1.2.1