summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs53
1 files changed, 34 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs
index a839b2f..14e53b9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,13 +7,27 @@ fn rand_u8() -> u8 {
#[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 {
n: u8,
e: u8,
s: u8,
w: u8,
owner: PlayerId,
- special: Option<&'static dyn Fn()>,
+ effect: Option<CardEffect>,
}
#[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<const SIZE: usize> core::fmt::Debug for Grid<SIZE> {
}
}
-#[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);